php-使用SwiftMailer为text / html和text / plain使用附件
作者:互联网
我正在使用swiftmailer
发送电子邮件,我希望拥有相同的附件:
* HTML版本(text / html)作为内嵌图片(cid)
*文本版本(文本/纯文本)作为附件
我正在Ubuntu上使用Mozilla Thunderbird 45.3.0测试电子邮件.
我一直在玩-> setBody,-> addPart,-> embed和-> attach方法,
但我总是破坏其中一个版本(即以纯文本格式接收电子邮件,或者将消息视为HTML或Text格式).
我的测试代码看起来像(当然带有有效的SMTP地址和文件路径):
function swiftMail() {
require_once './vendor/swiftmailer/swiftmailer/lib/swift_required.php';
//Create the Transport
$transport = Swift_SmtpTransport::newInstance('smtp.mail.com', 25);
//Create the Mailer using your created Transport
$mailer = Swift_Mailer::newInstance($transport);
// Create the message
$message = Swift_Message::newInstance()
// Give the message a subject
->setSubject('SwiftMailer test // ' . uniqid('', true))
// Set the From address with an associative array
->setFrom(array('first.name@mail.com' => 'Me'))
// Set the To addresses with an associative array
->setTo(array('first.name@mail.com' => 'Me'));
// attach the image as attachment
$message->attach(Swift_Attachment::fromPath('./path/to/file.png')->setFilename('cool_image.png'));
// set the email's body as plain text
$message->setBody('My amazing body in plain text', 'text/plain');
// add the email's HTML part to the message
$message->addPart(
'<!doctype html>' .
'<html>' .
' <head><meta charset="UTF-8"></head>' .
' <body>' .
' Here is an image <br />'.
' <img src="' . $message->embed(Swift_Image::fromPath('./path/to/file.png')->setFilename('inline_cool_image.png')) . '" alt="Inline Image" /><br />' .
' Rest of message' .
' </body>' .
'</html>',
'text/html' // Mark the content-type as HTML
);
// send the message
if (!$mailer->send($message, $failures))
{
echo "Failures:";
print_r($failures);
}
}
以下代码产生两个附件(可能很好),只有纯文本版本可用(这不好).
有没有办法将附件用作嵌入式HTML图像源和纯文本电子邮件中的标准附件?
解决方法:
我遇到了完全相同的问题,并且能够通过使用addPart()而非setBody()添加纯文本部分来解决此问题.
$message->addPart('My amazing body in plain text', 'text/plain');
根据您的示例,它将是:
function swiftMail() {
require_once './vendor/swiftmailer/swiftmailer/lib/swift_required.php';
//Create the Transport
$transport = Swift_SmtpTransport::newInstance('smtp.mail.com', 25);
//Create the Mailer using your created Transport
$mailer = Swift_Mailer::newInstance($transport);
// Create the message
$message = Swift_Message::newInstance()
// Give the message a subject
->setSubject('SwiftMailer test // ' . uniqid('', true))
// Set the From address with an associative array
->setFrom(array('first.name@mail.com' => 'Me'))
// Set the To addresses with an associative array
->setTo(array('first.name@mail.com' => 'Me'));
// attach the image as attachment
$message->attach(Swift_Attachment::fromPath('./path/to/file.png')->setFilename('cool_image.png'));
// set the email's body as plain text
$message->addPart('My amazing body in plain text', 'text/plain');
// add the email's HTML part to the message
$message->addPart(
'<!doctype html>' .
'<html>' .
' <head><meta charset="UTF-8"></head>' .
' <body>' .
' Here is an image <br />'.
' <img src="' . $message->embed(Swift_Image::fromPath('./path/to/file.png')->setFilename('inline_cool_image.png')) . '" alt="Inline Image" /><br />' .
' Rest of message' .
' </body>' .
'</html>',
'text/html' // Mark the content-type as HTML
);
// send the message
if (!$mailer->send($message, $failures))
{
echo "Failures:";
print_r($failures);
}
}
已在macOS和Gmail网络界面上使用SwiftMailer版本5.4.4,Thunderbird 45.5.0进行了测试.
标签:email,php,swiftmailer 来源: https://codeday.me/bug/20191026/1937593.html