さくらのメールボックスと思われる SMTP から PHPMailer でメールを送信する際にハマったのでメモしておきます。
TL;DR
- さくらで STARTTLS を使うには独自ドメインではなく初期ドメインを利用します。
ハマった内容
ある案件で以下のような SMTP 情報が共有されました。
サーバー名: dokuji.example.com
ポート番号: 587
ユーザー名: foo@example.com
パスワード: foobar
ということで早速、動作確認済みの PHPMailer の SMTP 情報を書き換えるとエラーが発生してメールが送信できませんでした。
Message could not be sent. Mailer Error: SMTP Error: Could not connect to SMTP host.
PHPMailer にはデバッグ機能があるので以下を追加してログを確認します。
$mail->SMTPDebug = 2;
すると以下のログが表示されました。
2018-02-27 02:15:19 SERVER -> CLIENT: 220 www***.sakura.ne.jp ESMTP Sendmail 8.14.5/8.14.5; Tue, 27 Feb 2018 11:15:16 +0900 (JST)<br>
2018-02-27 02:15:19 CLIENT -> SERVER: EHLO localhost<br>
2018-02-27 02:15:19 SERVER -> CLIENT: 250-www***.sakura.ne.jp Hello ***.ne.jp [*.*.*.*], pleased to meet /* 略 */<br>
2018-02-27 02:15:19 CLIENT -> SERVER: STARTTLS<br>
2018-02-27 02:15:19 SERVER -> CLIENT: 220 2.0.0 Ready to start TLS<br>
SMTP Error: Could not connect to SMTP host.<br>
STARTTLS で弾かれているような感じがしますが、対応していないというわけでもなさそうです。
一旦以下を追加して TLS を無効にします。
$mail->SMTPSecure = false;
$mail->SMTPAutoTLS = false;
これでテストすると問題なく送信ができました。
のですが、流石に平文でのメール送信はどうかと思うのでなんとか STARTTLS で送信したいところです。
Stack Overflow や PHPMailer のトラブルシューティングなど調べましたがそれっぽい情報は見つかりません。
https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting
色々調べている と答えは、なんてことはなくさくらの公式ドキュメントにありました。
https://help.sakura.ad.jp/hc/ja/articles/206206021--%E3%81%95%E3%81%8F%E3%82%89%E3%81%AE%E3%83%A1%E3%83%BC%E3%83%AB%E3%83%9C%E3%83%83%E3%82%AF%E3%82%B9-%E5%9F%BA%E6%9C%AC%E4%BB%95%E6%A7%98
(STARTTLS)
※ 初期ドメインのみ
( ゚д゚)
ということで初期ドメインを指定すればいいようです。
PHPMailer のログでサーバーが初期ドメイン名を返しているのでこれをそのまま HOST へ指定すると問題なく送信できました。
$mail->Host = 'www***.sakura.ne.jp';