CakePHP3 SMTP 連続送信 高速化

検証環境: CakePHP 3.4

CakePHP3でSMTPを利用したメール送信

CakePHP3フレームワークを使用してSMTPを使用してメールを送信するのは簡単です。以下のドキュメントにあるように、app.phpにSMTPの設定を記載するだけです。

公式ドキュメント メール

'EmailTransport' => [
    'default' => [
    'className' => 'Smtp',
        'host' => 'example.com',
        'port' => 25,
        'timeout' => 30,
        'username' => 'acount_name',
        'password' => 'xxxxxxxxx',
        'client' => null,
        'tls' => null,
    ],
],

デフォルトだと連続送信に難あり

デフォルト設定だと送信の度にSMTPの接続が切れます。処理速度への影響は環境次第で変わるでしょうが、少なくともボトルネットが発生します。接続を使いまわすにはどうするかというと、どうやら以下のオプションが使えるようです。

'keepAlive' => true,

29-43 File Mailer/Transport/SmtpTransport.php | CakePHP

こいつに関してドキュメントが見つけられなかったのですが、ソースを見る限り、送信後の接続切断を回避できるようです。’log’オプションを指定して実際に試してみましたが、接続が使いまわされていました。連続送信の宛先が多くなればなるほど速度向上が期待できるのではないでしょうか。

152-176 File Mailer/Transport/SmtpTransport.php | CakePHP

ちなみに

“keepAlive”の場合は念のためdisconnectを明示的に呼んであげた方が良いかと思います。一応クラスのdestructで接続は切られるようですが要らないなら開放しといた方が無難かと思いますので。

_disconnect Class Cake\Mailer\Transport\SmtpTransport | CakePHP

66-79 File Mailer/Transport/SmtpTransport.php | CakePHP

何かの折に役に立ちましたら幸いです。以上。