在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)
SwiftMailer 6
在 swiftmailer 6 中 Swift_Encoding class and ::newInstance() methods were removed.
\Swift_Encoding::getBase64Encoding()的原用法,看起来像
public static function getBase64Encoding()
{
return self::_lookup('mime.base64contentencoder');
}
private static function _lookup($key)
{
return Swift_DependencyContainer::getInstance()->lookup($key);
}
因此,您可以直接从Swift_DependencyContainer 调用mime.base64contentencoder。
$encoder = \Swift_DependencyContainer::getInstance()->lookup('mime.base64contentencoder');
$message = (new \Swift_Message("Email Template Test"))
->setEncoder($encoder);