Edited at

あるドメインを持つメールアドレスにメールが「届かない」場合の原因調査


TL;DR

ドメインが icloud.com のメールアドレスにメール送信できず、他のドメインのメールアドレスにはメール送信できるとすれば、

それは おそらく そのサーバーのIPアドレスが icloud.com にブロックされていることが原因である。 

それ以外のドメインにメールが「届かない」際は、ドメイン独自の基準で迷惑メールフォルダに振り分けられていることを疑う。

これらが本当の原因なのかどうかは、以下の方法で調べる。


本編: 一部のメールに送信できない原因の調査


1. maillogで、以前失敗したと思しきメールの送信ログを確認


パターン1: stat=Sent

$ tail /var/log/maillog    # または tail /var/log/maillog-{past-date}

Jan 10 04:40:11 ip-00-0-0-000 sendmail[23621]: {message-id}: to=hogehoge@hotmail.com, ctladdr={user} (501/501), delay=00:00:36, xdelay=00:00:00, mailer=relay, pri=30072, relay=[127.0.0.1] [127.0.0.1], dsn=2.0.0, stat=Sent ({message-id} Message accepted for delivery)

→ 該当メールアドレスへのメール送信はできている。

この状態でメールボックスにメールが届かないとすれば、迷惑メールフォルダに振り分けられている可能性があるので、確認が必要。

cf. SendGrid よくある質問 – 迷惑メールフォルダに入らないためのTips編


パターン2: stat=Service unavailable

$ tail /var/log/maillog    # または tail /var/log/maillog-{past-date}

Jan 8 16:33:01 ip-00-0-0-000 sendmail[14009]: {message-id}: to=<hogehoge@icloud.com>, ctladdr=<{user}@ip-00-0-0-000> (501/501), delay=01:29:52, xdelay=00:09:03, mailer=esmtp, pri=210319, relay=mx5.mail.icloud.com. [17.172.34.69], dsn=5.0.0, stat=Service unavailable
Jan 8 16:33:01 ip-00-0-0-000 sendmail[14009]: {message-id}: {message-id}: DSN: Service unavailable

エラーコード5.0.0で、Service unavailableというエラー文言が出ている。

この文言だと、具体的に何が問題なのか分からない。次の項目へ進む。


2. sendmailコマンドでメール試送信

省略可。

$ sendmail hogehoge@icloud.com

To: hogehoge@icloud.com
From: fuga@piyo.co.jp
Subject: foooooo

baaaaaaaaaar
.


3. maillog の再確認

2.を省略した場合省略。

$ tail /var/log/maillog

Jan 10 12:30:00 ip-00-0-0-000 sendmail[14009]: {message-id}: to=<hogehoge@icloud.com>, ctladdr=<fuga@ip-00-0-0-000> (501/501), delay=01:29:52, xdelay=00:09:03, mailer=esmtp, pri=210319, relay=mx5.mail.icloud.com. [17.172.34.69], dsn=5.0.0, stat=Service unavailable
Jan 10 12:30:00 ip-00-0-0-000 sendmail[14009]: {message-id}: {message-id}: DSN: Service unavailable

同様のエラー文言が出ており、当時のエラーを再現したことが確認できた。


4. /var/spool/mail/{user} の確認

メールを送信 or 試送信したユーザのメールスプール(システムからのメール)を見る。

$ less /var/spool/mail/{user}  # {message-id}で検索するとよさそう

From MAILER-DAEMON@ip-00-0-0-000 Thu Jan 10 02:51:49 2019
Return-Path: <MAILER-DAEMON@ip-00-0-0-000>
Received: from localhost (localhost)
by ip-00-0-0-000 (0.00.0/0.00.0) id {message-id};
Thu, 10 Jan 2019 02:51:49 GMT
Date: Thu, 10 Jan 2019 02:51:49 GMT
From: Mail Delivery Subsystem <MAILER-DAEMON@ip-00-0-0-000>
Message-Id: <201901100251.{message-id}@ip-00-0-0-000>
To: <{user}@ip-00-0-0-000>
MIME-Version: 1.0
Content-Type: multipart/report; report-type=delivery-status;
boundary="{message-id}.0000000000/ip-00-0-0-000"
Subject: Returned mail: see transcript for details
Auto-Submitted: auto-generated (failure)

This is a MIME-encapsulated message

--{message-id}.0000000000/ip-00-0-0-000

The original message was received at Thu, 10 Jan 2019 02:40:31 GMT
from localhost [127.0.0.1]
----- The following addresses had permanent fatal errors -----
<hogehoge@icloud.com>
(reason: 550 5.7.0 Blocked - see https://support.proofpoint.com/dnsbl-lookup.cgi?ip={YOUR_IP_ADDRESS})

----- Transcript of session follows -----
... while talking to mx3.mail.icloud.com.:
<<< 550 5.7.0 Blocked - see https://support.proofpoint.com/dnsbl-lookup.cgi?ip={YOUR_IP_ADDRESS}
# 省略…
554 5.0.0 Service unavailable
# 省略…

/var/log/maillogを見ただけでは5.0.0 Service unavailableというエラー文言しか見えなかったが、/var/spool/mail/{user}を見たところ、この場合

550 5.7.0 Blocked

というエラーが出ていたということがわかる。

長いエラー文言中に記載の

https://support.proofpoint.com/dnsbl-lookup.cgi?ip={YOUR_IP_ADDRESS}

のようなURLをブラウザで開くと、{YOUR_IP_ADDRESS}がブロックされているかどうか確認できる。

スクリーンショット 2019-01-10 14.56.58.png


その他Tips


/var/log/maillog が更新されなくなった

maillogを誤って上書きしてしまうと、それ以降のmaillogが記録されなくなる。

これは、

$ /etc/init.d/rsyslog restart

を実行すると直る。 rsyslog がなければ以下。

/etc/init.d/syslog restart