繁体   English   中英

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

[英]Encoding problem in From email and name when sending email in PHP?

什么可能导致这种编码问题? 我是否正确编码标题信息或者是否可能在其他地方引起?

我在这里发现了一个类似的问题: 来自PHP的电子邮件已经破坏了主题标题编码但是从我正在阅读的内容中我认为我正在这样做。

基本上有时我们的客户会发送用法语写的电子邮件。 它工作但偶尔我们得到一些编码问题,我想知道我是否编码错误(我无法弄清楚)。

$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”

您是否尝试使用utf8_encode替换base64_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/ )?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM