smtp local送信できない件
お客様の専用サーバ(OSはCentOS 6系)から送信できない件で、いろいろ調べてみて解決した流れを書きたいと思います。
最初のエラーメッセージ
PHPのSwiftmailerを使って、下記のエラーメッセージが出ておりました。
1 | PHP Warning: stream_socket_client(): unable to connect to localhost:25 (Permission denied) |
要は、権限がないため、locahhostの25ポートへの接続が失敗したということです。
iptablesをoffにしてみた
最初に思いついたのは、iptablesが動いているから、そちらをoffしてやってみたいと思います。
1 | service iptables stop |
ポート25が空いてるかを確認してみた
上記で解決出来なかったため、まずポート25が空いてるかを確認してみたいと思います。
1 | netstat -tulpn | grep 25 |
25ポートが空いています。。
また、外部サービスでも、外から25ポートにアクセスできることを確認できました。
mailコマンドで送信を試してみた
localでmailコマンドを直接実行して、送信できるかを確認してみたいと思います。
mailxがインストールされていないから、まずインストールします。
1 | yum install mailx |
結局、mailコマンドでは、直接送信は出来ています。。
telnetで接続してみた
localでtelnetで25ポートを接続してみたいと思います。
1 2 | yum install telnet* telnet localhost smtp |
接続はできます。。。
送信ユーザを作ってみた
もうどうなっているのがわからないですが、ひらめきに「送信ユーザはどうなっているか」を思いつきました。
ふつうは、localhostからsmtpで送信するのに、送信ユーザの指定は必要ありませんが、一応作ってみました。
でも、Swiftmailerからは送信できませんでした。
単純なPHPテストスクリプトを作った
それではPHPのmail関数を作って送信してみました。
送信に失敗したものに、maillogに思わずなメッセージが残ってました。
1 | fatal: chdir /var/spool/postfix: Permission denied |
SELinuxをoffに
上記なメッセージを手がかりに、原因がようやくわかりました。
SELinuxのウェブページからの送信を防止する機能があります。それが作動しており、送信を邪魔しているということです。
ウェブ送信を許す設定にしました。
1 | setsebool -P httpd_can_sendmail=on |
それでも送信が出来なかったため、SELinux自体をoffにしました。
1 2 3 4 | vi /etc/selinux/config SELINUX=enforcingをSELINUX=disabledに変更 reboot #サーバーの再起動が必要 |
これで解決です!
追記
テストサーバではdomainがないため、postfixには設定できずに、お客様の今持っているドメインを設定してしまいました。
それで、お客様の今持っているドメインへの送信はlocalへの送信に認識され、xxxのユーザが存在しないから、550 Unknown userになってしまいました。
Author Profile
スターフィールド編集部
SHARE