可能导致此编码问题的原因是什么?我是否正确编码了标题信息,或者是否会在其他地方引起?
我在这里发现了一个类似的问题: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(...)=?=]
感谢您的帮助:)
编辑:客户端的名称基本上使用与上面相同的字符。我的意思是该电子邮件应该来自“Clientnamédel'Ontario”
答案 0 :(得分:0)
您是否尝试将base64_encode
替换为utf8_encode
?
我试着替换:
$from = '=?UTF-8?B?'.base64_encode($email['from_name']).'?= <'.$email['from_email'].'>';
$to = '=?UTF-8?B?'.base64_encode($email['to_name']).'?= <'.$email['to_email'].'>';
使用:
$email['from_name'] = utf8_encode($email['from_name']);
$email['to_name'] = utf8_encode($email['to_name']);
$from = $email['from_name'].' <' . $email['from_email'] . '>';
$to = $email['to_name']) . ' <' . $email['to_email'] . '>';
可能值得一试......
detect_encoding也可以提供帮助(http://php.net/mb_detect_encoding/)?