correio multipart - problemas acentuações
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!
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'));