使用Zend_Mail + Zend_Mime在Zend Framework 2中创建HTML电子邮件

use*_*990 4 php html-email zend-mail zend-framework2

Zend框架更改了Zend_Mail对象,因此它不再使用setBodyHtml()方法来创建HTML电子邮件.

有谁知道如何使用ZF2邮件组件创建HTML电子邮件?到目前为止,我尝试过:

$html = new \Zend\Mime\Part($htmlText);
$html->type = \Zend\Mime\Mime::TYPE_HTML;
$html->disposition = \Zend\Mime\Mime::DISPOSITION_INLINE;
$html->encoding = \Zend\Mime\Mime::ENCODING_QUOTEDPRINTABLE;
$html->charset = 'iso-8859-1';

$body = new \Zend\Mime\Message();
$body->addPart($html);

$message = new \Zend\Mail\Message();
$message->setBody($body);
$message->addTo('myemail@com.com', 'User1');
$message->addFrom('myemail@com.com', 'User2');
$message->setSubject('Test');
Run Code Online (Sandbox Code Playgroud)

生成的电子邮件是:

MIME版本:1.0

内容类型:text/html; 字符集= ISO-8859-1

Content-Transfer-Encoding:quoted-printable

内容 - 处置:内联

来自:XYZ

上个月日志文件的报告= 0A = 09 = 09 = 09 = 0A = 09 =

=> 09 = 09 = 0A = 09 = 09 = 09 测试 = 0A = 09 = 09 = 09 = 0A = 09 = 09 = 09

L>

use*_*990 9

事实证明,我在\ Zend\Mail\Header组件中找到了一个问题.

我使用基于Linux的机器来托管我的php机器,这意味着电子邮件中的每个标题行都应该只附加"\ r \n".对于Windows,它是"\ r \n".

\ Zend\Mail\Header文件中的常量EOL设置为"\ r \n",如果从Linux计算机发送,则所有标题都会出现在电子邮件中.

这里的最佳实践是使用PHP_EOL常量,该常量自动检测平台并使用CORRECT行结束代码.

解决这个问题:

您需要将\ Zend\Mail\Header EOL常量更新为等于PHP_EOL.此外,如果使用UTF-8,您必须确保它是您的消息上调用的最后一件事.必须在身体设定后进行.

我给ZF2 2.0团队打了一张机票来看看它

这是一个有效的例子:

    $html = '' //my html string here

    $m = new \Zend\Mail\Message();
    $m->addFrom('joe@me.com', 'Joe Schmo')
      ->addTo('ally@me.com', 'Ally Joe')
      ->setSubject('Test');

    $bodyPart = new \Zend\Mime\Message();

    $bodyMessage = new \Zend\Mime\Part($html);
    $bodyMessage->type = 'text/html';

    $bodyPart->setParts(array($bodyMessage));

    $m->setBody($bodyPart);
    $m->setEncoding('UTF-8');

             //send your message now
Run Code Online (Sandbox Code Playgroud)