正在SwiftMailer中检索SMTP会话


Retrieving SMTP conversation in SwiftMailer

我正在使用SwiftMailer发送电子邮件,我的网站在尝试发送电子邮件时突然出现超时问题。

我需要提取"SMTP对话",以便我的主机可以调试它。

有什么代码可以给我这个吗?

include('SwiftMailer/swift_required.php');
$transport = Swift_SmtpTransport::newInstance('smtp.example.com', 587);
$transport->setUsername('username');
$transport->setPassword('password');
$swift = Swift_Mailer::newInstance($transport);
// Create a message
$message = new Swift_Message($subject);
$message->setFrom($from);
$message->setBody($message, $content_type, SITE_CHARSET);
$message->setTo($to);
try {
    $swift->send($message);
} catch (Swift_TransportException $e) {
    // Log array for further inspection
}

您可能需要查看SwiftMailer Logger插件,该插件将允许您记录客户端和SMTP服务器之间的所有交互。

有两种类型的记录器可用:

  • ArrayLogger-(在数组中保留一组日志消息。数组内容可以清除或转储到屏幕上)
  • EchoLogger(将输出实时打印到屏幕上。非常简单的调试输出非常方便)

您可以使用以下任一项注册插件:

$logger = new Swift_Plugins_Loggers_ArrayLogger();
$swift->registerPlugin(new Swift_Plugins_LoggerPlugin($logger));

$logger = new Swift_Plugins_Loggers_EchoLogger();
$swift->registerPlugin(new Swift_Plugins_LoggerPlugin($logger));

只要确保你已经安装了插件,并且你的类自动加载器可以根据需要访问所需的类。

有关更多详细信息,请参阅文档。

Laravel示例将对话转储到日志:

$content = 'Test';
$title = 'Test now()= ' . date("Y-m-d",time());                
$logger = new 'Swift_Plugins_Loggers_ArrayLogger();
Mail::getSwiftMailer()->registerPlugin(new 'Swift_Plugins_LoggerPlugin($logger));
Mail::send('emails.send', ['title' => $title, 'content' => $content], function ($message){
 $message->from('fromuser@mydomain.com');
 $message->to('touser@mydomain.com');
});
Log::info($logger->dump());

并在''resources''emails 上发送.blade.php

<html>
<head></head>
<body style="background: orange; color: white">
<h1>{{$title}}</h1>
<p>{{$content}}</p>
AGARCIA - 2018
</body>
</html>