【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を使って送信しなければいけないのかという、理由がなかなか見つからないので記事に残しました。
できないことも知りたかったりしますよね。では。