Problemas de codificação de caráter phpmailer
Pergunta
Eu tento usar o PHPMailer para enviar registro, ativação. ETC Mail para usuários:
require("class.phpmailer.php");
$mail -> charSet = "UTF-8";
$mail = new PHPMailer();
$mail->IsSMTP();
$mail->Host = "smtp.mydomain.org";
$mail->From = "name@mydomain.org";
$mail->SMTPAuth = true;
$mail->Username ="username";
$mail->Password="passw";
//$mail->FromName = $header;
$mail->FromName = mb_convert_encoding($header, "UTF-8", "auto");
$mail->AddAddress($emladd);
$mail->AddAddress("mytest@gmail.com");
$mail->AddBCC('mytest2@mydomain.org', 'firstadd');
$mail->Subject = $sub;
$mail->Body = $message;
$mail->WordWrap = 50;
if(!$mail->Send()) {
echo 'Message was not sent.';
echo 'Mailer error: ' . $mail->ErrorInfo;
}
o $message
é contém caracteres latinos. Infelizmente, todos os webmail (gmail, webmail.mydomain.org, emailaddress.domain.xx) usam codificação diferente.
Como posso forçar a usar a codificação UTF-8 para mostrar meu e-mail exatamente o mesmo em todas as caixas de correio?
Eu tento converter a largura do cabeçalho do correio mb_convert_encoding()
, mas sem sorte.
Solução
Se você tem 100% de certeza, a mensagem conterá ISO-8859-1, você pode usar UTF8_ENCODE Como David diz. Caso contrário, use mb_detect_encoding e mb_convert_encoding na mensagem $.
Também observe que
$mail -> charSet = "UTF-8";
Deve ser substituído por:
$mail->CharSet = 'UTF-8';
E colocada depois a instanciação da classe (após o new
). As propriedades são sensíveis ao caso! Veja o Phpmailer Doc FOT A LISTA E O SPELING EXATO.
Além disso, a codificação padrão do phpmailer é 8bit
o que pode ser problemático com os dados UTF-8. Para consertar isso, você pode fazer:
$mail->Encoding = 'base64';
Observe isso 'quoted-printable'
provavelmente também funcionaria nesses casos (e talvez até 'binary'
). Para mais detalhes, você pode ler RFC1341-Campo de cabeçalho de codificação de transferência de conteúdo.
Outras dicas
$mail -> CharSet = "UTF-8";
$mail = new PHPMailer();
linha $mail -> CharSet = "UTF-8";
deve estar depois $mail = new PHPMailer();
E sem espaços!
tente isso
$mail = new PHPMailer();
$mail->CharSet = "UTF-8";
Desculpe por estar atrasado na festa. Dependendo da configuração do seu servidor, você pode ser obrigado a especificar caráter estritamente com letras minúsculas UTF-8, caso contrário, será ignorado. Experimente se você acabar aqui procurando soluções e nenhuma das respostas acima ajuda:
$mail->CharSet = "UTF-8";
deve ser substituído por:
$mail->CharSet = "utf-8";
Eu me trabalho dessa maneira
$mail->FromName = utf8_decode($_POST['name']);
$mail = new PHPMailer();
$mail->CharSet = "UTF-8";
$mail->Encoding = "16bit";
eu estava conseguindo Ó Em $ Mail-> Assunto /W Phpmailer.
Então, para mim, a solução completa é:
// Your Subject with tildes. Example.
$someSubjectWithTildes = 'Subscripción España';
$mailer->CharSet = 'UTF-8';
$mailer->Encoding = 'quoted-printable';
$mailer->Subject = html_entity_decode($someSubjectWithTildes);
Espero que ajude.
Se sua mensagem usar o latim1, você pode usar UTF8_ENCODEFunciona para mim, de qualquer maneira.
@ $mail -> charSet = "UTF-8";
--- Esta linha deve estar sob
$mail = new PHPMailer(); line.
pff ..
Sim, está correto. Você tem que colocá -lo após a instanciação do objeto.
A maneira mais simples e ajudará você com o conjunto de charset para UTF-8
$mail->CharSet = "UTF-8"
Para evitar problemas de codificação de caracteres ao enviar e-mails usando a classe Phpmailer, podemos configurá-lo para enviá-lo com a codificação de caracteres UTF-8 usando o parâmetro "Charset", como podemos ver no seguinte código PHP:
$mail = new PHPMailer();
$mail->From = 'midireccion@email.com';
$mail->FromName = 'Mi nombre';
$mail->AddAddress('emaildestino@email.com');
$mail->Subject = 'Prueba';
$mail->Body = '';
$mail->IsHTML(true);
// Active condition utf-8
$mail->CharSet = 'UTF-8';
// Send mail
$mail->Send();
$mail = new PHPMailer();
$mail -> CharSet = "UTF-8";
$ Mail -> charset = "UTF -8"; --- Essa linha deve estar abaixo de $ Mail = new Phpmailer (); linha.
pff ..