4

Zend 框架更改了 Zend_Mail 对象,因此它不再具有用于创建 HTML 电子邮件的 setBodyHtml() 方法。

有谁知道如何使用 ZF2 Mail 组件创建 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');

生成的电子邮件是:

MIME 版本:1.0

内容类型:文本/html;字符集=iso-8859-1

内容传输编码:quoted-printable

内容处置:内联

来自:XYZ

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

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

升>

4

4 回答 4

9

事实证明,我在 \Zend\Mail\Header 组件中发现了一个问题。

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

\Zend\Mail\Header 文件中的常量 EOL 设置为“\r\n”,如果从 linux 机器发送,所有的标题都会出现在电子邮件中。

这里的最佳实践是使用 PHP_EOL 常量,它会自动检测平台并使用正确的行尾代码。

要解决这个问题:

您需要更新您的 \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
于 2012-10-17T19:08:14.950 回答
3
use Zend\Mail;
use Zend\Mime\Message as MimeMessage;
use Zend\Mime\Part as MimePart;

    $body = 'email body';
    $htmlPart = new MimePart($body);
    $htmlPart->type = "text/html";

    $textPart = new MimePart($body);
    $textPart->type = "text/plain";

    $body = new MimeMessage();
    $body->setParts(array($textPart, $htmlPart));

    $message = new Mail\Message();
    $message->setFrom($from);
    $message->addTo($to);
    $message->addReplyTo($reply);
    if ($cc)
        $message->addCc($cc);
    if ($bcc)
        $message->addBcc($bcc);
    $message->setSender($sender);
    $message->setSubject($subject);
    $message->setEncoding("UTF-8");
    $message->setBody($body);
    $message->getHeaders()->get('content-type')->setType('multipart/alternative');

    $transport = new Mail\Transport\Sendmail();
    $transport->send($message);

我希望这对你有帮助

于 2013-05-13T11:17:00.127 回答
0

我建议阅读这个博客

基本上你不再有一个setBodyHtml()你只有一个setBody()。这是由于现代电子邮件阅读器的工作方式。每个读者都可以选择同时显示两者。现在大多数电子邮件都是以 HTML 格式发送的。但是您仍然可以将 HTML 电子邮件视为纯文本,因为 HTML 部分只是由相应的程序“翻译”。

在 ZF2 中,要支持 HTML 电子邮件和纯文本电子邮件,您只需添加两种 mime 类型。当需要纯文本时,电子邮件程序将处理此问题。至少这是我如何理解 ZF2 和提到的博客中的当前事物。

于 2012-10-17T07:48:21.387 回答
0

请参阅以下帖子:https ://stackoverflow.com/a/34267509/5448467

WasabiMail 是一个邮件模块,能够以方便的方式处理 html 电子邮件模板。

于 2015-12-14T13:19:07.920 回答