【发布时间】:2011-09-22 06:40:27
【问题描述】:
什么可能导致此编码问题?我是否正确编码了标头信息,或者这可能是其他地方引起的?
我在这里发现了一个类似的问题:Email from PHP has broken Subject header encoding 但从我正在阅读的内容来看,我认为我这样做是正确的。
基本上,我们的客户有时会发送用法语编写的电子邮件。它可以工作,但有时我们会遇到一些编码问题,我想知道我是否编码错误(我无法弄清楚)。
$from = '=?UTF-8?B?'.base64_encode($email['from_name']).'?= <'.$email['from_email'].'>';
$to = '=?UTF-8?B?'.base64_encode($email['to_name']).'?= <'.$email['to_email'].'>';
$get_param = array(
'Content-Type' => 'text/plain;charset=utf-8',
'Content-Transfer-Encoding' => '8bit');
上面的代码是我如何编码我的标题信息,下面是发送:
$msg = $message_mime->get($get_param);
$headers = array (
'From' => $from,
'To' => $to,
'Reply-To' => $from,
'Subject' => utf8_decode($subject));
$headers = $message_mime->headers($headers);
$smtp = Mail::factory('smtp',
array ('host' => $smtp_settings['host'],
'auth' => true,
'username' => $smtp_settings['username'],
'password' => $smtp_settings['password']));
$mail = $smtp->send($to, $headers, $msg);
问题是他们收到的电子邮件来自:
Clientnamé de l'Ontario[=?UTF-8B?QXNzZW1ib(...)=?=]
感谢您的帮助:)
编辑:客户名称基本上使用与上述相同的字符。我的意思是该电子邮件应该来自“Clientname de l'Ontario”
【问题讨论】:
-
我没有使用 PEAR Mail,但据我所知,您的编码是正确的。也许是一个有问题的电子邮件客户端?您是否有机会获得整个电子邮件源用于调试目的?
-
顺便说一句,base64 编码部分 (QXNzZW1ib...) 翻译成什么?与发件人名称相同?
-
是的,编码似乎是正确的。我通过 base64_decode 运行字符串,我得到客户端的名称没有问题。然而,一位同事刚刚注意到我们正在以文本/纯文本形式发送电子邮件。会不会是某些电子邮件客户端会识别 HTML 而其他人不会...现在测试。
-
如果电子邮件以
text/plain发送,而实际上是text/html或multipart,则内容类型可能是个问题。在任何体面的邮件程序库中,这应该是(半)自动设置的。不管怎样,看看this example 和this forum post。设置额外的 MIME 参数head_charset、text_charset和html_charset可能会成功。您有可用于测试的开发服务器吗? -
Content-type 不应该对 From/To 标头编码产生任何影响。但是,这可能是收件人的邮件客户端的问题。您是否碰巧知道他们使用哪个客户端来查看消息?看起来它正在解码它,但由于某种原因显示编码值。电子邮件地址不包含任何非 ASCII,是吗?
标签: php email character-encoding