[PHP] Swift Mailer のログを出力

2019-12-06PHPMail

Swift Mailer でメール送信時のログをとる (ロギング) 方法。

Swift Mailer にはいくつかのプラグインが同梱されていて、ロギングにはプラグインを使う。
プラグインの格納場所
/ vendor フォルダの中.../swiftmailer/lib/classes/Swift/Plugins

ロギング用プラグインは 2 種類ある。

Swift_Plugins_Loggers_ArrayLogger
処理中のログを配列に格納していく。処理終了後、 dump すると全部のログが表示される。

Swift_Plugins_Loggers_EchoLogger
ログが発生した時点で、随時出力されていく。(最後に dump するとかできない。)


ログ出力コード

ログファイルに出力したい場合とかは ArrayLogger を使う。
Echo Logger は、リアルタイムでログが出力されていくので、デバッグのときとか。

dump() は ArrayLogger のときに使える。 Echo Logger で dump() しても何も出力されない。

$mail = new Swift_Mailer(
  new Swift_SmtpTransport('localhost', 25)
);
// ArrayLogger
$logger = new Swift_Plugins_Loggers_ArrayLogger();
$mail->registerPlugin(new Swift_Plugins_LoggerPlugin($logger));
// Echo Logger
$logger = new Swift_Plugins_Loggers_EchoLogger();
$mail->registerPlugin(new Swift_Plugins_LoggerPlugin($logger));
$message = new Swift_Message('Subject');
$message->setFrom(['sender@test.com']);
$message->setTo(['receiver@test.com']);
$message->setBody('テスト送信です。');
echo $mail->send($message);
echo '
送った'; // ArrayLogger のログを出力( Echo Logger は処理中にログが画面に出力される ) echo $logger->dump();
Echo Logger の出力例

++ Starting Swift_SmtpTransport
<< 220 ip-0-0-0-0 ESMTP Sendmail 8.14.4/8.14.4; Thu, 1 Dec 2019 00:00:00 -0800
>> EHLO [0.1.2.3]
<< 250-ip-0-0-0-0 Hello localhost [127.0.0.1], pleased to meet you 250-ENHANCEDSTATUSCODES 250-PIPELINING 250-8BITMIME 250-SIZE 250-DSN 250-ETRN 250-DELIVERBY 250 HELP
++ Swift_SmtpTransport started
>> MAIL FROM:
>> RCPT TO:
>> DATA
<< 250 2.1.0 ... Sender ok
<< 250 2.1.5 ... Recipient ok
<< 354 Enter mail, end with "." on a line by itself
>> .
<< 250 2.0.0 xB5I0lOdf8974 Message accepted for delivery
1
送った++ Stopping Swift_SmtpTransport
>> QUIT
<< 221 2.0.0 ip-0-0-0-0 closing connection
++ Swift_SmtpTransport stopped

Posted by Agopeanuts