やみとものプログラミング日記 やみとものプログラミング日記
TOP PHPでメールが送れない(届かない)原因・調査方法
PHPでメールが送れない(届かない)原因・調査方法

PHPでメールが送れない(届かない)原因・調査方法

PHP
作成日時: 2019年7月6日
更新日時: 2020年7月30日
PHPでメールを送信しようとmb_send_mail関数を使ってみたが一向にメールが届かないので調査してみた。

検証した環境

CentOS 7.5
PHP 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)のログを見るのは、何か不具合があったときに必須だ。
エラーログの文章をググってみると何かしらの答えが見つかる。