快速邮件递送状态
有谁知道 SwiftMailer 发送函数是否返回交付状态?我希望能够知道电子邮件已送达或未送达。这可能吗?
谢谢
有谁知道 SwiftMailer 发送函数是否返回交付状态?我希望能够知道电子邮件已送达或未送达。这可能吗?
谢谢
SwiftMailer 支持至少三层检查,这些检查将报告几种类型的交付失败。
1) 始终检查 SwiftMailer 的 send() 或 batchSend() 命令的返回代码是否为非零。从文档中:
//Send the message
$numSent = $mailer->send($message);
printf("Sent %d messages\n", $numSent);
/* Note that often that only the boolean equivalent of the
return value is of concern (zero indicates FALSE)
if ($mailer->send($message))
{
echo "Sent\n";
}
else
{
echo "Failed\n";
}
2) 使用按引用失败功能了解特定地址是否被拒绝或无法完成:
//Pass a variable name to the send() method
if (!$mailer->send($message, $failures))
{
echo "Failures:";
print_r($failures);
}
/*
Failures:
Array (
0 => receiver@bad-domain.org,
1 => other-receiver@bad-domain.org
)
*/
3)在某些情况下,您可能还希望启用返回回执,以确认电子邮件阅读器显示消息。它们通常被用户或其电子邮件应用程序禁用或忽略,但如果您收到收据,则具有高度的确认性。另请注意,这可能会在发送后多天发生,因此它不是像上面两个那样的实时同步测试。
$message->setReadReceiptTo('your@address.tld');
但是,由于 SMTP 传递中涉及如此多的变量和系统层,因此通常不可能绝对确定邮件已传递。您能做的最好的事情就是确保使用上面的前两个检查。如果您使用自己的服务器进行SMTP服务,那么您还需要像Marc B提到的那样监视日志和队列。
另一个例子强调需要熟悉您正在使用的任何底层电子邮件系统。我刚刚开始使用John Hobbs在Amazon Web Services SES上使用Swift_AWSTransport。SES 能够返回 XML 响应,其中包含通过它发送的每条消息的诊断信息。虽然 SwiftMailer 本身并不了解如何使用 XML 响应,但我发现它对于解决交付问题非常宝贵。我之所以提到它,是因为我发现在某些情况下,上面的检查#1和#2对SwiftMailer来说会成功,但SES不喜欢我的消息格式。因此,我正在研究将解析该XML作为额外的检查。
相当老的帖子,但截至Swiftmailer 4 +,除了从方法调用中获取状态。如果您想调试邮件程序并查看传输过程中发生的情况,则可以使用记录器插件,甚至可以创建自己的插件。https://swiftmailer.symfony.com/docs/plugins.htmlresult
send
$mailer = \Swift_Mailer::newInstance(
\Swift_SmtpTransport::newInstance('tls://smtp.gmail.com', 465)
);
$logger = new \Swift_Plugins_Loggers_ArrayLogger;
//$logger = new \Swift_Plugins_Loggers_EchoLogger; //echo messages in real-time
$mailer->registerPlugin(new \Swift_Plugins_LoggerPlugin($logger));
foreach ($recipients as $recipient) {
//...
$mailer->send(/*...*/);
}
echo $logger->dump(); //not needed if using EchoLogger plugin
这将为每个调用输出传输消息,如下所示send
++ Starting Swift_SmtpTransport
<< 220 smtp.gmail.com ESMTP x12sm4143221vkc.19 - gsmtp
>> EHLO server.example.com
<< 250-smtp.gmail.com at your service, [192.168.1.1] 250-SIZE 35882577 250-8BITMIME 250-AUTH LOGIN PLAIN XOAUTH2 PLAIN-CLIENTTOKEN OAUTHBEARER XOAUTH 250-ENHANCEDSTATUSCODES 250-PIPELINING 250-CHUNKING 250 SMTPUTF8
>> AUTH LOGIN
<< 334 AbcDefGhIjKlMnop
>> AbcDefGhIjKlMnop==
<< 334 AbcDefGhIjKlMnop
>> AbcDefGhIjKlMnop==
<< 235 2.7.0 Accepted
++ Swift_SmtpTransport started
>> MAIL FROM:
<< 250 2.1.0 OK x12sm4143221vkc.19 - gsmtp
>> RCPT TO:<recipient@example.com>
<< 250 2.1.5 OK x12sm4143221vkc.19 - gsmtp
>> DATA
<< 354 Go ahead x12sm4143221vkc.19 - gsmtp
>> .
<< 250 2.0.0 OK 1468948643 x12sm4143221vkc.19 - gsmtp