我只是想让我的多部分电子邮件用 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');
Run Code Online (Sandbox Code Playgroud)
据我从文档中看到(我不太清楚),Content-Transfer-Encoding标题是一个文本标题,所以我应该能够像上面那样设置它。在此之前,我运行了所有当前标题的输出,并且Content-Transfer-Encoding没有在那里列出,因此需要设置它。因此为什么在上面的代码中我试图设置它。
输出很好,我收到了电子邮件,它们可以工作,但是当我查看源代码时,它们没有被编码。我已尝试使用上述相同的代码,但更改$plaintext为base64_encode($plaintext),但刚刚收到编码的消息。怎么做的>
可以version 5.4设置编码器。否则Swift_Message将使用本机编码器对消息进行编码。
$message = \Swift_Message::newInstance("Email Template Test");
$message->setEncoder(\Swift_Encoding::getBase64Encoding());
//...
Run Code Online (Sandbox Code Playgroud)
此外,编码 和addPart. 其中MimePart不会继承原始消息的编码。为此,您需要手动创建MimePart并将其附加到原始消息。
$part = \Swift_MimePart::newInstance();
$part->setEncoder($message->getEncoder());
$part->setBody($htmlmail, 'text/html');
$message->attach($part);
Run Code Online (Sandbox Code Playgroud)
这也会自动添加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)
Run Code Online (Sandbox Code Playgroud)
在 swiftmailer 6 中,Swift_Encoding类和::newInstance()方法被删除。
的原始用法\Swift_Encoding::getBase64Encoding()看起来像
public static function getBase64Encoding()
{
return self::_lookup('mime.base64contentencoder');
}
private static function _lookup($key)
{
return Swift_DependencyContainer::getInstance()->lookup($key);
}
Run Code Online (Sandbox Code Playgroud)
因此,您可以mime.base64contentencoder直接从 theSwift_DependencyContainer调用。
$encoder = \Swift_DependencyContainer::getInstance()->lookup('mime.base64contentencoder');
$message = (new \Swift_Message("Email Template Test"))
->setEncoder($encoder);
Run Code Online (Sandbox Code Playgroud)