
PHPでメールが送れない(届かない)原因・調査方法
作成日時: | 2019年7月6日 |
更新日時: | 2020年7月30日 |
PHPでメールを送信しようとmb_send_mail関数を使ってみたが一向にメールが届かないので調査してみた。
PHP 5.4.16
sendmail
僕の場合sendmailがインストールされていなかったので、次のコマンドでインストールした。
sudo yum install sendmail
ここではmail_text.txtというメール文面を記述したファイルを用意したとする。
次のコマンドを実行する。
cat mail_text.txt | sendmail 送りたいメールアドレス
実行してみたが何も表示されないし、メールも届かなかった。
ログが/var/log/maillogにあるので見てみる。
ログの末尾に次のように書いてあった。
stat=Deferred: Connection refused by [127.0.0.1]
このエラー文面でググってみると次の記事がヒットした。
sendmailのインストールとあれこれ
この記事によるとsendmailが起動していない?ようなので、次のコマンドで確かめた。
sudo systemctl status sendmail
結果は
Active: inactive (dead)
つまりsendmailがアクティブになっていない。
次のコマンドでsendmailを起動した。
sudo systemctl start sendmail
もう一度sendmailコマンドを試してみる。
cat mail_text.txt | sendmail 送りたいメールアドレス
届いた!
PHPのメール送信プログラムもちゃんと動くようになった。
サーバープログラム(今回はsendmail)のログを見るのは、何か不具合があったときに必須だ。
エラーログの文章をググってみると何かしらの答えが見つかる。
検証した環境
CentOS 7.5PHP 5.4.16
まずメールサーバ(sendmail)が入っているか確認する
sendmailが入っていれば以下のコマンドが実行できるはず。sendmail
僕の場合sendmailがインストールされていなかったので、次のコマンドでインストールした。
sudo yum install sendmail
sendmailコマンドを実行してみる
まず適当なファイルにメールの文面を保存する。ここではmail_text.txtというメール文面を記述したファイルを用意したとする。
次のコマンドを実行する。
cat mail_text.txt | sendmail 送りたいメールアドレス
実行してみたが何も表示されないし、メールも届かなかった。
ログが/var/log/maillogにあるので見てみる。
ログの末尾に次のように書いてあった。
stat=Deferred: Connection refused by [127.0.0.1]
このエラー文面でググってみると次の記事がヒットした。
sendmailのインストールとあれこれ
この記事によるとsendmailが起動していない?ようなので、次のコマンドで確かめた。
sudo systemctl status sendmail
結果は
Active: inactive (dead)
つまりsendmailがアクティブになっていない。
次のコマンドでsendmailを起動した。
sudo systemctl start sendmail
もう一度sendmailコマンドを試してみる。
cat mail_text.txt | sendmail 送りたいメールアドレス
届いた!
PHPのメール送信プログラムもちゃんと動くようになった。
参考にしたサイト
PHP(mb_send_mail)でメールが送信できないまとめ
今回みたいにプログラミングでうまくいかないことを記事に書きつつ調べるのは良い方法だと思った。サーバープログラム(今回はsendmail)のログを見るのは、何か不具合があったときに必須だ。
エラーログの文章をググってみると何かしらの答えが見つかる。