phpでメール送信に失敗する

phpのmail関数でメールが送れない場合の対処方法のメモ.

まずmail関数(またはmb_send_mail関数)の戻り値を確認を確認する

  • 戻り値がtrueならSMTPサーバ*1にメールを渡しているので,SMTPサーバ側の問題.
  • 戻り値がfalseならPHP側の問題.

以下,PHP側が問題の場合の対処方法.

phpinfo で sendmail_path の値を確認する

sendmail_path が,たとえば

 /usr/sbin/sendmail -t -i 

となっているなら,/usr/sbin/sendmail がサーバ上にあるか確認.

コマンドラインでメールが送信できるか確認.

 echo "test" | /usr/sbin/sendmail -t -i [メールアドレス]

を実行し,メールが届かない場合は,SMTPサーバ側の問題.

mail関数が使えるかどうかを確認する

phpinfoで調べたsendmail_pathが次のような値になっている場合,phpにmail関数が組み込まれていない可能性がある.

  -t -i 

mb_send_mail関数は内部で mail関数を呼び出すので,とにかくmail関数が無い場合はメールが送信できない.

mail関数が利用可能かどうかは以下のコードを実行して,利用可能な関数の一覧を取得して調べる.

<?
$funcs = get_defined_functions();

foreach ($funcs[&#39;internal&#39;] as $val) {
  echo "$val";
}
?>

一覧に mailという関数名が無ければ,mail関数,およびmb_send_mail関数は利用できない.この場合は,phpの再コンパイルが必要.

  • /usr/sbin/sendmail が利用可能な状態にしてから
  • 再度 ./configure からやり直せば

mail関数が有効になり,メールが送れるようになる.

*1:メールサーバ