Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何使用swiftmailer获取电子邮件队列ID?_Php_Swiftmailer - Fatal编程技术网

Php 如何使用swiftmailer获取电子邮件队列ID?

Php 如何使用swiftmailer获取电子邮件队列ID?,php,swiftmailer,Php,Swiftmailer,当我使用telnet smtp发送电子邮件时,服务器会在发送电子邮件时回答我250 2.0.0确定:排队为7A821440123E。所以我需要获得ID7A821440123E来跟踪邮件日志中的电子邮件。 是否可以通过Swiftmailer实现这一点?Swiftmailer基于事件,因此其他开发人员可以轻松地对其进行扩展。每次调用Swift\u Transport上的send方法时,都会发送相应的事件。您可以使用已经开发的监听器(插件),也可以编写自己的监听器(插件),这将更加定制 现有插件 Sw

当我使用telnet smtp发送电子邮件时,服务器会在发送电子邮件时回答我
250 2.0.0确定:排队为7A821440123E
。所以我需要获得ID
7A821440123E
来跟踪邮件日志中的电子邮件。
是否可以通过Swiftmailer实现这一点?

Swiftmailer基于事件,因此其他开发人员可以轻松地对其进行扩展。每次调用
Swift\u Transport
上的
send
方法时,都会发送相应的事件。您可以使用已经开发的监听器(插件),也可以编写自己的监听器(插件),这将更加定制

现有插件 SwiftMailer已经提供了一些可以用来解决问题的工具

只需使用。它将记录
Swift\u Transport
实现中的所有命令调用

例子 输出 然后在mailer实例中注册你的插件

$mailer->registerPlugin(new FindEmailIdResponse());
根据协议,不需要第三方插件来获取Message-ID。 邮件ID由SwiftMailer设置,否则SMTP服务器将自己创建一个。 因此,您只需要:

$message = \Swift_Message::newInstance($subject, $body);
...
$messageID = $message->getId();

换句话说,Swift Mailer似乎没有提供现成的信息,您需要自己从服务器响应中解析它。虽然库必须进行一些基本的解析,但它只对250状态代码感兴趣。太糟糕了,你不能直接访问确切的日志行。但它不是相同的ID,是吗?如果你检查源代码,你会看到Swift生成的ID以“@something”(例如“@Swift.generated”或“@example.com”)结尾,但每次我检查SMTP日志时,我都会发现简单的十六进制字符串,如问题中所示。(还有两个已删除的答案,它们的状态与您相同,当您有足够的代表时,您可以看到它们。)我正在使用mailcatcher作为虚拟SMTP服务器来测试我的邮件服务,并且我可以确认SwiftMailer生成的ID是mailcatcher SMTP报告的ID。我将尝试用现实世界的SMTP重现您所说的。我最近与两三家提供商合作,没有一家会使用Swift生成的ID。此外,几年前我曾维护一台Postfix服务器,它大量使用十六进制队列ID:您可以使用ID跟踪、重新发送、删除。。。使用postqueue命令,并且在该上下文中,ID需要是唯一的。10年后我不能确定,但我怀疑身份证就是被报告的那个。无论如何,为了得到一个明确的答案,我们需要深入研究SMTP RFC,看看他们对队列ID说了什么(或没有说什么)。你说的是一个不同于OP的ID!OP要求的是队列ID,通常看起来像7A821440123E。您所说的是消息ID(即电子邮件中的标题),通常看起来像电子邮件地址,例如
class FindEmailIdResponse implements Swift_Events_ResponseListener
{
    /**
     * {@inheritdoc}
     */
    public function responseReceived(Swift_Events_ResponseEvent $evt)
    {
        if (strpos($evt->getResponse(), 'queued') !== false) {
             // do whatever you want with the response or event
        }
    }
}
$mailer->registerPlugin(new FindEmailIdResponse());
$message = \Swift_Message::newInstance($subject, $body);
...
$messageID = $message->getId();