使用 SWIFTMAIL 发送 base64 电子邮件

Chu*_*d37 5 php swiftmailer

我只是想让我的多部分电子邮件用 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没有在那里列出,因此需要设置它。因此为什么在上面的代码中我试图设置它。

输出很好,我收到了电子邮件,它们可以工作,但是当我查看源代码时,它们没有被编码。我已尝试使用上述相同的代码,但更改$plaintextbase64_encode($plaintext),但刚刚收到编码的消息。怎么做的>

fyr*_*rye 4

可以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=****、边界charsetContent-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

在 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)