【PHP】mb_send_mail()で処理結果がtrueで返ってくるのに、メールが送れない【sendmail】【Deferred: Connection refused by】


今のさくらVPSのサーバに変えてから、初のmb_send_mail()

phpをインストールした段階で、mbstringは抜かりなく使用できるようにしていたから、すんなりメールが届くはず!

 

・・・はず・・・だった。

 

なんでですかね。
PHPからmb_send_mail()を実行するとtrueが返ってくるのに、待っても待ってもメールが届かないわけですよ。

もちろん、エラーログを見てもなにも記述無し。

 

 

iptablesでメール用にportを開く

 

よく考えたら、サーバの設定時にメール用のportを開いていないなぁと思い当たる。

過去記事の【iptablesを設定する】に沿って、メール関連のportである「25」「110」を開く。

 

ファイルの場所。

sudo vi /etc/sysconfig/iptables

 

これを追記。

-A INPUT -p tcp --dport 110 -j ACCEPT
-A INPUT -p tcp --dport 25 -j ACCEPT

【説明】
110:POP(受信メール)の許可
25:SMTP(送信メール)の許可

 

設定ファイルの再読み込み。

sudo /sbin/service iptables restart
sudo /etc/init.d/httpd restart

 

だが、まだメールは届かない。

 

メールログを確認(maillog)

 

メールログの場所はここ。

sudo vi /var/log/maillog

 

ログの内容は、

~ stat=Deferred: Connection refused by [127.0.0.1] ※1

※1「Deferred: Connection refused by 【localhost】」=「遅延:【ローカルホストが】接続を拒否しました」

 

接続がrefuse(拒絶)されてるやんけ! ガ━━(゚д゚;)━━ン!!

一体何をしたら、ローカルさんから出禁食らうわけさ・・・?
ガクガク(((;゚Д゚)))ブルブル

 

 

sendmailの再起動

 

若干、頭が混乱したまま、「mb_send_mail()は内部処理でsendmail()を使用している」という事を思い出し、とりあえずsendmailのサービス再起動をかけてみる。

/etc/init.d/sendmail restart

Shutting down sendmail: [FAILED]
Starting sendmail:      [  OK  ]
Starting sm-client:     [  OK  ]

 

【結果】
動いた!!!

メールが送られてくるようになった!!(喜)

 

メールログを確認すると、もちろん「Sent」(送信完了)

~ stat=Sent (OK ~

 

 

結論

 

再起動時に、Shutting down sendmail:FAILEDってことは、たぶん今までsendmailがサービスとして立ち上がってなかったんでしょうね。(遠い目)

 

という事で、何事も再起動してみるもんだ。sendmailも、OSも、人生も。

 

ちなみに

 

わたしはダイレクトにsendmailのrestartをかけてしまったけど、そういうわけにもいかない環境の場合、まずはsendmailのサービス状況を確認するコマンドはこちら。

/etc/init.d/sendmail status

 

そして、chkconfigユーティリティで、サーバ起動時に自動でsendmailサービスが開始するよう設定。

設定:
chkconfig sendmail on

設定確認:
chkconfig --list