PHP+Postfixでのメール送信エラー「25: Permission denied」、「25: Connection timed out」の原因と解決方法

自宅のノートPCにインストールしたCentOS 6のPHP+Postfixで自分が使っているメールアドレス宛にメールを送るテストをしていたところ、dion(@h8.dion.ne.jp/現au one net)とニフティ(@nifty.com)のアドレスにはメールが送信できるが、Gmail(@gmail.com/Google)、PHS(@pdx.ne.jp/旧DDI Pocket)、スマートフォン(@wcm.ne.jp/旧ウィルコム)のアドレスにはメールが送信できないことが分かった。

プロバイダのSMTPサーバを経由すれば、送信できるようになったが、以下に、送信できるようになるまでのメモを残しておく。

■メール送信設定パターン1
・Postfix:初期設定変更なし(/etc/postfix/main.cfのrelayhostには何も指定しないまま)
・メール送信をするために、LinuxのコマンドラインでPHPのmail関数を使用。関数の引数として、「送信先メールアドレス」、「件名」、「本文」の3つを指定。

《Linuxコマンドラインでのmailコマンド実行例》
# php -r "mail('送信先メールアドレス','test','testbody');"

■メール送信パターン1の送信結果
●dion(h8.dion.ne.jp/現au one net)
→送信結果:成功
《参考:# /var/log/maillog》
Dec 13 11:48:17 test postfix/pickup[1338]: 74C8721DFE: uid=0 from=<root>
Dec 13 11:48:17 test postfix/cleanup[1415]: 74C8721DFE: message-id=<20141213024817.74C8721DFE@test.centos6>
Dec 13 11:48:17 test postfix/qmgr[1339]: 74C8721DFE: from=<root@test.centos6>, size=340, nrcpt=1 (queue active)
Dec 13 11:48:21 test postfix/smtp[1417]: 74C8721DFE: to=<私のメールアカウント@h8.dion.ne.jp>, relay=mx.h.dion.ne.jp[106.187.230.1]:25, delay=4.2, delays=0.18/0.1/0.16/3.8, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as D43C11D8000E)
Dec 13 11:48:21 test postfix/qmgr[1339]: 74C8721DFE: removed

●ニフティ(@nifty.com)
→送信結果:失敗

# /var/log/maillogに記録されていたメールログ
Dec 13 12:03:26 test postfix/pickup[1437]: 5609C21DFE: uid=0 from=<root>
Dec 13 12:03:26 test postfix/cleanup[1438]: 5609C21DFE: message-id=<20141213030326.5609C21DFE@test.centos6>
Dec 13 12:03:26 test postfix/qmgr[1339]: 5609C21DFE: from=<root@test.centos6>, size=344, nrcpt=1 (queue active)
Dec 13 12:03:26 test postfix/smtp[1440]: 5609C21DFE: to=<私のメールアカウント@nifty.com>, relay=smmx.nifty.com[210.131.4.177]:25, delay=0.45, delays=0.08/0.01/0.31/0.06, dsn=5.1.8, status=bounced (host smmx.nifty.com[210.131.4.177] said: 553 5.1.8 <root@test.centos6>... Domain of sender address root@test.centos6 does not exist (in reply to MAIL FROM command))
Dec 13 12:03:26 test postfix/cleanup[1438]: CA4A521E44: message-id=<20141213030326.CA4A521E44@test.centos6>
Dec 13 12:03:26 test postfix/qmgr[1339]: CA4A521E44: from=<>, size=2284, nrcpt=1 (queue active)
Dec 13 12:03:26 test postfix/bounce[1441]: 5609C21DFE: sender non-delivery notification: CA4A521E44
Dec 13 12:03:26 test postfix/qmgr[1339]: 5609C21DFE: removed
Dec 13 12:03:27 test postfix/local[1442]: CA4A521E44: to=<root@test.centos6>, relay=local, delay=0.28, delays=0.02/0.18/0/0.07, dsn=2.0.0, status=sent (delivered to mailbox)
Dec 13 12:03:27 test postfix/qmgr[1339]: CA4A521E44: removed

→送信できなかった原因として、「root@test.centos6>... Domain of sender address root@test.centos6 does not exist」という理由がメールログに記載されている。「test.centos6」というドメインは、確かに存在しない。ニフティのメールサーバ側では、送信者のメールアドレスのドメインの存在有無を確認していることが分かる。後述の「メール送信パターン2」のように、「Envelope From(エンベロープフロム)」により、実在するドメインのメールアドレスを指定することで、ニフティにはメールが送信できるようになる。

●Gmail(@gmail.com/Google)
→送信結果:失敗

# /var/log/maillogに記録されていたメールログ
Dec 13 12:23:32 test postfix/pickup[1449]: 5A83B21DFE: uid=0 from=<root>
Dec 13 12:23:32 test postfix/cleanup[1450]: 5A83B21DFE: message-id=<20141213032332.5A83B21DFE@test.centos6>
Dec 13 12:23:32 test postfix/qmgr[1339]: 5A83B21DFE: from=<root@test.centos6>, size=344, nrcpt=1 (queue active)
Dec 13 12:23:32 test postfix/smtp[1452]: connect to gmail-smtp-in.l.google.com[2404:6800:4008:c04::1a]:25: Permission denied
Dec 13 12:24:02 test postfix/smtp[1452]: connect to gmail-smtp-in.l.google.com[74.125.23.26]:25: Connection timed out
Dec 13 12:24:02 test postfix/smtp[1452]: connect to alt1.gmail-smtp-in.l.google.com[2607:f8b0:400e:c03::1b]:25: Permission denied
Dec 13 12:24:32 test postfix/smtp[1452]: connect to alt1.gmail-smtp-in.l.google.com[74.125.25.27]:25: Connection timed out
Dec 13 12:24:32 test postfix/smtp[1452]: connect to alt2.gmail-smtp-in.l.google.com[2607:f8b0:4003:c07::1a]:25: Permission denied
Dec 13 12:24:32 test postfix/smtp[1452]: 5A83B21DFE: to=<私のメールアカウント@gmail.com>, relay=none, delay=60, delays=0.13/0.01/60/0, dsn=4.4.1, status=deferred (connect to alt2.gmail-smtp-in.l.google.com[2607:f8b0:4003:c07::1a]:25: Permission denied)

→送信できなかった原因として、「connect to Gmailのメールサーバのホスト名[GmailのメールサーバのIPアドレス]:25: Permission denied」という理由がメールログに記載されている。Gmailのメールサーバにポート25番での接続ができなかった、という意味のようなので、プロバイダの迷惑メール対策「Outbound Port 25 Blocking (OP25B)」の制限に引っかかっているようだ。

●PHS(@pdx.ne.jp/旧DDI Pocket)
→送信結果:失敗

# /var/log/maillogに記録されていたメールログ
Dec 13 13:01:40 test postfix/pickup[1614]: ECD4E21EE5: uid=0 from=<root>
Dec 13 13:01:40 test postfix/cleanup[1615]: ECD4E21EE5: message-id=<20141213040140.ECD4E21EE5@test.centos6>
Dec 13 13:01:40 test postfix/qmgr[1339]: ECD4E21EE5: from=<root@test.centos6>, size=336, nrcpt=1 (queue active)
Dec 13 13:02:11 test postfix/smtp[1617]: connect to ymx1.softbank.ne.jp[117.46.11.79]:25: Connection timed out
Dec 13 13:02:41 test postfix/smtp[1617]: connect to ymx1.softbank.ne.jp[117.46.5.79]:25: Connection timed out
Dec 13 13:02:41 test postfix/smtp[1617]: ECD4E21EE5: to=<私のメールアカウント@pdx.ne.jp>, relay=none, delay=60, delays=0.1/0.01/60/0, dsn=4.4.1, status=deferred (connect to ymx1.softbank.ne.jp[117.46.5.79]:25: Connection timed out)

→送信できなかった原因は、同じく、プロバイダの迷惑メール対策「Outbound Port 25 Blocking (OP25B)」の制限か。

●スマートフォン(@wcm.ne.jp/旧ウィルコム)
→送信結果:失敗

# /var/log/maillogに記録されていたメールログ

Dec 13 13:12:58 test postfix/pickup[1623]: 6984A21F1A: uid=0 from=<root>
Dec 13 13:12:58 test postfix/cleanup[1624]: 6984A21F1A: message-id=<20141213041258.6984A21F1A@test.centos6>
Dec 13 13:12:58 test postfix/qmgr[1339]: 6984A21F1A: from=<root@test.centos6>, size=343, nrcpt=1 (queue active)
Dec 13 13:13:28 test postfix/smtp[1626]: connect to mail1.wcm.softbank.ne.jp[117.46.7.42]:25: Connection timed out
Dec 13 13:13:58 test postfix/smtp[1626]: connect to mail1.wcm.softbank.ne.jp[117.46.9.106]:25: Connection timed out
Dec 13 13:14:28 test postfix/smtp[1626]: connect to mail1.wcm.softbank.ne.jp[117.46.5.74]:25: Connection timed out
Dec 13 13:14:58 test postfix/smtp[1626]: connect to mail1.wcm.softbank.ne.jp[117.46.11.74]:25: Connection timed out
Dec 13 13:14:58 test postfix/smtp[1626]: 6984A21F1A: to=<私のメールアカウント@wcm.ne.jp>, relay=none, delay=120, delays=0.05/0.01/120/0, dsn=4.4.1, status=deferred (connect to mail1.wcm.softbank.ne.jp[117.46.11.74]:25: Connection timed out)
→送信できなかった原因は、同じく、プロバイダの迷惑メール対策「Outbound Port 25 Blocking (OP25B)」の制限か。

■メール送信設定パターン2
・Postfix:初期設定変更なし(/etc/postfix/main.cfのrelayhostには何も指定しないまま)
・メール送信をするために、LinuxのコマンドラインでPHPのmail関数を使用。関数の引数として、「送信先メールアドレス」、「件名」、「本文」、「null」、「-f私のメールアカウント@h8.dion.ne.jp」の5つを指定。(第5引数には、Envelope From(エンベロープフロム)として、「-f私のメールアカウント@h8.dion.ne.jp」と書く。「-f」と「私のメールアカウント」の間にスペース等を入れない。)

《Linuxコマンドラインでのmailコマンド実行例》
# php -r "mail('送信先メールアドレス','test','testbody',null,'-f私のメールアカウント@h8.dion.ne.jp');"

■メール送信パターン2の送信結果
●dion(h8.dion.ne.jp/現au one net)
→送信結果:成功

●ニフティ(@nifty.com)
→送信結果:成功

●Gmail(@gmail.com/Google)
→送信結果:失敗(送信先メールサーバからのエラーメッセージは、メール送信パターン1の時と同じ)

●PHS(@pdx.ne.jp/旧DDI Pocket)
→送信結果:失敗(送信先メールサーバからのエラーメッセージは、メール送信パターン1の時と同じ)

●スマートフォン(@wcm.ne.jp/旧ウィルコム)
→送信結果:失敗(送信先メールサーバからのエラーメッセージは、メール送信パターン1の時と同じ)

■メール送信設定パターン3
・Postfix:初期設定変更あり
 /etc/postfix/main.cfのrelayhostに、CentOS 6を稼働させている私の自宅のインターネット回線のプロバイダ「au one net」のメールサーバのIPアドレスを記載する。
 《例》
#relayhost = $mydomain
#relayhost = [gateway.my.domain]
#relayhost = [mailserver.isp.tld]
#relayhost = uucphost
#relayhost = [an.ip.add.ress]
relayhost= msa.h.dion.ne.jp
※このように、/etc/postfix/main.cfの「relayhost」にプロバイダ「au one net」のSMTPサーバを指定した。
※サーバ名(IPアドレス)は、au one netにはいくつかあるようなので、設定をする場合に、どのサーバ名で設定するべきかについては、プロバイダ契約者がau one netのホームページを見て考える必要がある。
・メール送信をするためのメール関数の使い方は、上述のパターン3と同じ。

■メール送信パターン3の送信結果
●dion(h8.dion.ne.jp/現au one net)
→送信結果:成功

●ニフティ(@nifty.com)
→送信結果:成功

●Gmail(@gmail.com/Google)
→送信結果:成功

●PHS(@pdx.ne.jp/旧DDI Pocket)
→送信結果:成功

●スマートフォン(@wcm.ne.jp/旧ウィルコム)
→送信結果:成功

自宅のノートPCのPHP+Postfixでメール送信テストをしたい場合には、プロバイダのメールサーバを指定するということを意識しようと思った。

前へ

PHPのスーパーグローバル変数「$_SERVER」でユーザエージェントとIPアドレスを取得するサンプル

次へ

媛彦温泉の「モザンビーク」で無料温泉入浴券付の「悠湯膳セット」を頂いた