使用Gmail SMTP和Zend \ Mail \ Message-Zend Framework 2编码问题

时间:2015-07-13 14:46:36

标签: php zend-framework2 smtp gmail zend-mail

我需要在电子邮件正文中写下重音字母,但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)编码来处理外发邮件"但这些结果是相同的!我哪里做错了?谢谢你的帮助!

1 个答案:

答案 0 :(得分:2)

我在这里找到了一个解决方案:

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')无效的原因。还有其他解决方案吗?