Pergunta

Eu estou tentando enviar um multipart / MIME alternativa e-mail via PHP script ... tudo bem funciona, mas eu tenho alguns problemas com a codificação! Os caracteres acentuados, no corpo de e-mail, são apresentados de forma errada no cliente de email! Como pode codificar o corpo para resolver este problema? ... Eu tentei usar ..

utf8_encode($body)

Sem bons resultados!

Em alguns formato bruto e-mail, eu aviso que as acentuações são substituídos from = XX (onde XX são caractere alfanumérico) ... Como posso fazer isso?

Agradecemos antecipadamente!

Este é o código:

$header = "From: \n";
$header .= "Reply-To: \n";
$header .= "Content-Type: multipart/alternative; boundary=$alt_boundary\n"; 
$header .= "Mime-Version: 1.0\n";
$header .= "X-Mailer: PHP/".phpversion()."\n";

$body .= "\n".wordwrap($txt_body, 70);

$body .= "\n\n--$alt_boundary\n";
$body .= "Content-Type: multipart/mixed; boundary=$mixed_boundary\n";

$body .= "\n\n\n--$mixed_boundary\n";
$body .= "Content-Type: text/html; charset=utf-8\n";
$body .= "Content-Transfer-Encoding: 7bit\n";

$body .= "\n".wordwrap($html_body, 70);

$body .= "\n\n\n--$mixed_boundary\n";   
$body .= "Content-Disposition: attachment filename=\"test file\"\n";
$body .= "Content-Type: application/octet-stream; x-unix-mode=0644; name=\test file\"\n";
$body .= "Content-Transfer-Encoding: 7bit\n";

$body .="\n$file";

$body .= "\n\n--$mixed_boundary--";
$body .= "\n\n--$alt_boundary--"; 

mail($to, $subject, $body, utf8_encode($header));

EDIT:

O $txt_body e $html_body é o conteúdo de dois arquivos:

$txt_body = file_get_contents(...);
$html_body = file_get_contents(...);

Em que arquivos eu substituir algumas informações que recebo do PayPal através de IPN. Eu aviso que quando eu receber o e-mail, apenas as acentuações que ocorre na informação IPN são exibidos incorretamente (em outras palavras a informação adicional que eu substituir no conteúdo dos arquivos)! Os outros caracteres acentuados são mostrados corretamente !!

Como posso resolver isso?

RESOLVIDO:

Eu já resolveu o problema! função utf8_encode () deve ser aplicada apenas a informações variáveis ??papais, na verdade é que eu tento codificação em UTF-8 a $ txt_body ... as variáveis ??paypal são codificados 2 vezes em utf8. Em outras palavras eu fiz isso:

$txt_body = utf8_encode(file_get_contents(...));
$html_body = utf8_encode(file_get_contents(...));

e que em $ txt_body e US $ html_body troquei a informação recebida através IPN!

Graças à ererybody!

Foi útil?

Solução

Você precisa declarar a codificação de caracteres que você usou no cabeçalho dessa parte específica:

MIME-Version: 1.0
Content-Type: multipart/alternative; boundary=boundary

--boundary
Content-Type: text/plain; charset=utf-8

This part uses UTF-8.
--boundary
Content-Type: text/plain; charset=iso-8859-1

This part uses ISO 8859-1.
--boundary--

Outras dicas

mails de várias partes codificação UTF-8 pode ser facilmente criado com SwiftMailer

$message->addPart($txt_body, 'text/plain', 'utf-8');
$message->addPart($html_body, 'text/html', 'utf-8');
$message->attach(Swift_Attachment::fromPath('/path/to/testfile'));
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top