さくらインターネットの共有サーバ上で PHP の mb_send_mail() を使っていたら、ステータス 500 の Internal Server Error が出るようになりました。
メール自体は送れますが、その直後のプログラムは実行されずにエラーが発生します。
今回はこの原因の調査をしてみました。
エラーログの確認
共有サーバもエラーログの参照は提供されていますが、それほど詳細なログの入手はできません。
そこで独自にログをファイルに吐いたり、PHP 以外に参考になるログを探して解決に至りました。
さくらインターネットに問い合わせても、アプリ依存だと解決も難しいでしょうしね・・・。
エラーの原因
いくつか参照したファイルの中で、原因究明の材料となったのが dead.letter です。
dead.letter は sendmail のエラーが書き込まれるファイルなので、メール送信時の状況を検証してみました。
原因は、メールヘッダに定義する From や Reply_To に存在しないメールアカウントを使用していたこと。
まだ正式なメールアドレスを決めていたなかったので、取り急ぎダミーのアドレスを From や Reply_To に代用していたのですが、それが今回のエラーの原因になったようです。