
Eu uso o Postfix como servidor de e-mail. Eu tenho o sistema operacional Ubuntu.
Então eu uso PHP para enviar e-mails.
O problema é que nenhum dos meus e-mails é codificado corretamente por um software de e-mail usado pelo meu provedor VPS.
Segundo eles, o problema é meu.
É apenas o campo do nome que não está codificado corretamente. Por exemplo, "Björn" se torna "Björn" em meus e-mails.
No entanto, quando eu faço eco do $name
, ele gera "Bjorn" qual é correto.
Além disso, o Gmail e o Hotmail mostram isso corretamente.
A parte estranha é que o “texto” (a própria mensagem) está codificado corretamente.
Eu uso o seguinte para enviar e-mail:
$headers="MIME-Version: 1.0"."\n";
$headers.="Content-type: text/plain; charset=UTF-8"."\n";
$headers.="From: $name <$email>"."\n";
$name= iconv(mb_detect_encoding($name), "UTF-8//IGNORE//TRANSLIT", $name);
//// I HAVE TRIED WITH AND WITHOUT THE LINE ABOVE, NO DIFFERENCE
mail($to, '=?UTF-8?B?'.base64_encode($subject).'?=', $text, $headers, '[email protected]');
Eu tentei com e sem a linha iconv também, sem sorte.
A última coisa que consigo pensar éPOSTFIX, poderia haver uma configuração para codificação de caracteres lá? Alguém sabe?
Responder1
O texto da mensagem pode ser qualquer conjunto de caracteres que você definir (porque você define o conjunto de caracteres para o e-mail no cabeçalho do e-mail (tipo de conteúdo = utf8), mas os cabeçalhos (assunto, de - nome, e-mail) são definidos no cliente que está lendo o e-mail, então você não pode afetar isso. O Gmail está usando utf8 como padrão, enquanto outros clientes que estão visualizando os e-mails podem usar o que quiserem e basicamente apenas caracteres ASCII são totalmente suportados em todos os lugares.
Editar: você pode ter caracteres fora do US-ASCII no cabeçalho da mensagem se eles forem codificados em MIME ("=?charset?encoding?encoded text?=")
Responder2
Um problema que vejo é que você converteu $name
para UTF-8depoisincorporando-o no $headers
. Então, o que está sendo enviado para o postfix é o que estava lá antes. Você deveria iconv()
e adicionar a codificação MIME a eleantesadicionando-o em $headers
.