WEB制作お手伝いいただける方募集中 / お問い合わせください!

【PHPMailer + AWS EC2】SMTPを使わずにポートを587に変更して送信したいけど出来なかったのでSMTP送信する

サーバーをAWSに移管する際に、phpでメール送信が失敗してしまいました。

メールログを見ると、受信側メールサーバにアクセスできていないようです。

connect to メールサーバー[ip]:25

ステータスも受信側が先送りにされています。

status=deferred

環境

AWS EC2
Amazon Linux
Postfix
PHPMailer

PHPMailerは使っていますが、SMTPサーバーを利用せずに使用しておりました。

メールが送信できない原因

AWS EC2はポート25経由でメールを送信するのを制限している

EC2ではポート25のトラフィックを制限していました。

ポート25を使いたい場合は「制限解除申請」を申し込む必要があります。

ポートを変更すれば送信できる

メールログにあった通り、ポート25で送信していました。

このポートを587に変更してあげれば届くかも。

connect to メールサーバー[ip]:25

ポート変更の方法を考える

どうにかSMTP送信を使わずにできる方法を調べてみたのですが、(あまりコード変更したくなかったため)このふた通りしかなさそうです。

(1)SMTP送信にする

PHPMailerでportを指定できますが、これはSMTP送信の時に利用するものなので現状では利用できません。

なので、SMTP送信に変えてしまうという方法が考えられます。

これを使います↓(もっと沢山指定する内容あります)

$mail->isSMTP();

(2)ポート25を使えるようにAWSに制限解除申請を送る

コードを編集せずに解決できそうな方法です。

申請待ちの時間がありますが、コード直すよりは簡単かもしれません。

結果PHPMailerのSMTP送信にする

Amazonへの解除申請も良かったのですが、今回は(1)SMTP認証にしました。

理由としては、迷惑メールになりにくいということでしょうか。

暗号化できるのもメリットなので、この際に改修しようかなぁと。

公式にドキュメントあります

https://github.com/PHPMailer/PHPMailer/blob/master/examples/smtp.phps

最後に

PHPMailerのSMTP送信は検索すると沢山出てきます。AWSのポート25の制限も多くはないですが出てきました。

ただ、絶対SMTPを使って送信しなければいけないのかという、理由がなかなか見つからないので記事に残しました。

できないことも知りたかったりしますよね。では。