
mail()でメールが送信できるかどうかの確認手順 †mail()がそもそも実行できるか? †PHP CGI SAPIやPHP CLI SAPIで下記のようにコマンドを実行すれば,mail()が内部で作成しているメッセージテキストを標準出力に出力することができます. $ echo '<?php mail( "foo@example.com", "test", "body", "From: bar@example.com"); ?>' | php -d sendmail_path="cat -" (2行を続けて書いて実行します) mail()は内部でsendmailコマンドを起動しています.これを入力を標準入力にしたcatに変更する(-dオプション)ことで標準出力にヘッダー+本文のメッセージ全体を表示することが出来るようになります. 下記は出力例です. To: foo@example.com Subject: test From: bar@example.com body mail()がそもそも実行できない †PHPのビルドされた環境により,作成されたPHPでmail()が使用できない場合があります. mail()が使用できないPHPが作成される条件として,ビルド時に/usr/sbin/sendmail,/usr/lib/sendmailがなければmail()が使えないPHPがビルドされます*1. mail()とsendmailコマンドの切り分け †mail()は最終的には内部でphp.iniのsendmail_pathの値と等価のコマンドラインでコマンドを実行します. デフォルトでは「/usr/sbin/sendmail -t -i」なので,下記のようにすることとほぼ等価です. $ /usr/sbin/sendmail -t -i <第5引数を指定した場合,それがここに来る> To: <第1引数> Subject: <第2引数> <第4引数> 第3引数 上記のようにコマンドを入力,メッセージを作成し,[Ctrl][D]で終了させるとコマンドsendmailは(正常に設定されていれば)内部queueにメールを蓄積し,メールを送信します. つまり,
などが考えられます. もしメールのqueueに溜まっているならroot権限があればmailqコマンドでqueueの状態が確認できるので,実行して確認してもいいでしょう. |