在PHP中发送电子邮件时,来自电子邮件和名称的编码问题?

时间:2011-06-24 18:49:13

标签: php email character-encoding

可能导致此编码问题的原因是什么?我是否正确编码了标题信息,或者是否会在其他地方引起?

我在这里发现了一个类似的问题: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”

1 个答案:

答案 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/)?