我只是想让我的多部分电子邮件用base64编码并通过swiftmail发送。这是我到目前为止的代码:
$message = Swift_Message::newInstance("Email Template Test")
->setBoundary($boundary)
->setFrom(array('no-reply@domain.net' => 'Mailer Service'))
->setTo(array("a@d.com","a@b.com"))
->setBody($plaintext)
->addPart($htmlmail,"text/html");
$headers = $message->getHeaders();
$headers->addTextHeader('Content-Transfer-Encoding','base64');
$contenttype = $message->getHeaders()->get('Content-Type');
$contenttype->setValue('multipart/alternative');
从文档中我可以看到(我不太清楚),Content-Transfer-Encoding
标题是文本标题,所以我应该能够像上面那样设置它。在此之前,我运行了所有当前标头的输出,并且Content-Transfer-Encoding
未在其中列出,因此需要进行设置。因此,为什么在上面的代码中我试图设置它。
输出很好,我收到电子邮件,它们有效,但是当我查看来源时,它们没有被编码。我尝试使用相同的上述代码,但将$plaintext
更改为base64_encode($plaintext)
,但只收到了编码消息。怎么做>
答案 0 :(得分:2)
在version 5.4
中,您可以设置编码器。否则Swift_Message
将使用本机编码器对消息进行编码。
$message = \Swift_Message::newInstance("Email Template Test");
$message->setEncoder(\Swift_Encoding::getBase64Encoding());
//...
此外,还有bug (as of version 4 and 5)个编码和addPart
。 MimePart
不会从原始消息继承编码的位置。
为此,您需要手动创建MimePart
并将其附加到原始消息。
$part = \Swift_MimePart::newInstance();
$part->setEncoder($message->getEncoder());
$part->setBody($htmlmail, 'text/html');
$message->attach($part);
这也会自动添加Content-Type: multipart/alternative; boundary=****
,边界charset
和Content-Transfer-Encoding: base64
标题信息。
结果:
var_dump($message->toString());
string 'Message-ID: <2f48c04910b97f730834e92f268d3410@example.com>
Date: Thu, 14 Jan 2016 20:45:30 +0000
Subject: Email Template Test
From: Mailer Service <no-reply@domain.net>
To: a@d.com, a@b.com
MIME-Version: 1.0
Content-Type: multipart/alternative;
boundary="_=_swift_v4_1452804330_b0a47ad936ba98d2f513294958a235d0_=_"
--_=_swift_v4_1452804330_b0a47ad936ba98d2f513294958a235d0_=_
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: base64
VGhpcyBpcyBhbiBodG1sIG1lc3NhZ2U=
--_=_swift_v4_1452804330_b0a47ad936ba98d2f513294958a235d0_=_
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: base64
VGhpcyBpcyBhIHRleHQgbWVzc2FnZQ==
--_=_swift_v4_1452804330_b0a47ad936ba98d2f513294958a235d0_=_--
' (length=751)
答案 1 :(得分:0)
我只是想最近自己做一次,
\Swift_Encoding::getBase64Encoding()
显然已被删除,所以我不得不像这样使用Swift_DependencyContainer:
$message->setEncoder(\Swift_DependencyContainer::getInstance()->lookup('mime.base64contentencoder'));
现在swiftmailer将使用base64作为内容传输编码。