我需要将重音字母写入电子邮件正文,但 utf-8 编码不起作用。在 Gmail 设置中,我选择了“使用 Unicode (UTF-8) 发送邮件”选项。
我正在使用 Gmail SMTP 和 Zend\Mail\Messsage。我尝试了 4 种不同的方法,但没有一种有效。
功能齐全:
public function sendRegistrationEmail(){
$message = new Message();
$message->addTo($this->email)
->addFrom(self::FROM)
->setSubject($this->subject)
->setEncoding('UTF-8')
->setBody('àèéòù');
$transport = new SmtpTransport();
$options = new SmtpOptions($this->smtp);
$transport->setOptions($options);
$transport->send($message);
}
1:
->setBody('àèéòù');
output: à èéòù
2:
->setBody(utf8_encode('àèéòù'));
output: àèéòù
3:
->setEncoding('UTF-8')
->setBody('àèéòù');
output: à èéòù
4:
->setEncoding('UTF-8')
->setBody(utf8_encode('àèéòù'));
output:àèéòù
我尝试在 Gmail 设置中选择“避免对外发邮件使用 Unicode (UTF-8) 编码”,但结果是相同的!我哪里做错了?感谢您的帮助!
最佳答案
我在这里找到了解决方案:
http://framework.zend.com/manual/current/en/modules/zend.mail.message.html
如果我需要使用 html 电子邮件:
$html = new MimePart($htmlMarkup);
$html->type = "text/html; charset = UTF-8";
否则,纯文本电子邮件:
$text = new MimePart($textContent);
$text->type = "text/plain; charset = UTF-8";
$body = new MimeMessage();
$body->setParts(array($text or $html));
.....rest of message instance....
->setBody($body);
我不明白为什么 setEncoding('UTF-8')
不起作用。还有其他解决方案吗?
关于php - Gmail SMTP 和 Zend\Mail\Message 的编码问题 - Zend Framework 2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31386524/