メールが送信できるようになった
メールサーバーの管理者の方と話せるということで、再調査に行ってきた。
原因特定
SMTPサーバーからは、「SMTP server response: 451 See http://pobox.com/~djb/docs/smtplf.html.」が返されていた。
http://pobox.com/~djb/docs/smtplf.htmlを見ると、http://cr.yp.to/docs/smtplf.htmlにリダイレクトされていた。
内容を読むと、改行コードがCRとLFではなく、LFだけの行があるために、エラーとしているらしい。
発生原因不明
サーバー管理者の方からヒアリングしたが、SMTPサーバーの設定は変更していないし、パッチを適用したのは、随分前とのこと。
こちらのプログラムも、1年以上はいじっていない状態なので、なぜ突然メール送信できなくなったのか、原因が不明。
対策
メール本文にLFだけの行があることまでは調べられたので、LFだけの行を CR+LFに置き換えるようにプログラムを修正することになった。
PHPMailerを呼び出す前のメール本文には改行がないが、PHPMailer内のmail()を呼び出す直前に確認すると、1バイト追加されて改行されていたので、PHPMailer内で改行コードが追加されていることがわかった。
PHPMailer内を順番に調べると、以下のようになっていたので、それぞれ変更した。
- 改行コードを一律LFにするようになっている==>一律 CR+LF にするように変更
- 最後にLFを追加するようになっている==>最後に CR+LF を追加するように変更
変更した結果、メールを送信できるようになって、エラーは発生しなくなった。
今回のエラーは、bare LFという問題らしい。
RFCで改行コードはCR+LFと決まっているのに、LFだけのメールを送ろうとした場合に発生するというのは、規約違反だという考えからは納得できる。
現在のSMTPサーバーでは、LFをCR+LFに置き換えて対処してくれる場合もあるようなので、今回のSMTPサーバーもエラーにしないでくれれば、気づかなかった。
なぜ突然発生するようになったのかだけ、未だに不明なのが気になる。