メールが送信できない原因と対処方法

メールが送信できない原因と対処方法

メールが送信できない原因と対処方法を解説

メールサーバを運用していると、「メールが送信できない」というトラブルは非常によく発生します。

SMTPサーバの設定ミス、DNS設定の問題、認証エラー、ネットワーク障害など、原因は多岐にわたります。

また、エラーメッセージによって原因の切り分け方法も異なります。

重要なのは、闇雲に設定を変更するのではなく、SMTP通信の流れに沿って原因を切り分けることです。

本記事ではメールが送信できない場合の代表的な原因と対処方法について解説します。

まず確認すべきこと

メール送信障害が発生した場合、まず以下を確認します。

  • エラーメッセージ
  • SMTPログ
  • メールキュー
  • ネットワーク疎通
  • DNS設定

原因調査の第一歩になります。

SMTP通信の流れを理解する

SMTP通信は以下の流れで行われます。

メール作成
    ↓
SMTPサーバ接続
    ↓
認証
    ↓
DNS問い合わせ
    ↓
配送先接続
    ↓
メール送信

どこで失敗しているかを特定することが重要です。

メールキューを確認する

まずメールがキューに残っていないか確認します。

# mailq

または
# postqueue -p

大量のメールが残っている場合は配送障害の可能性があります。

ログを確認する

Postfixではログが重要な調査材料になります。

# tail -f /var/log/maillog

または
# journalctl -u postfix -f

エラーメッセージを確認しましょう。

原因1 SMTPサーバが起動していない

意外と多い原因です。

まずサービス状態を確認します。

# systemctl status postfix

停止している場合は起動します。
# systemctl start postfix

原因2 SMTPポートへ接続できない

SMTPサーバが起動していてもポートが開いていない場合があります。

確認します。

# ss -antp | grep :25

SMTPサービスが待ち受けていることを確認します。

原因3 firewalldによる遮断

ファイアウォールでSMTP通信が遮断されている場合があります。

# firewall-cmd --list-services

SMTPが許可されているか確認します。
# firewall-cmd --add-service=smtp

原因4 DNS設定ミス

配送先メールサーバを解決できない場合です。

確認します。

# dig MX gmail.com

正常に結果が返るか確認します。

原因5 DNSサーバへ接続できない

DNSサーバ自体へ接続できない場合があります。

確認します。

# cat /etc/resolv.conf

設定されたDNSサーバへ疎通確認を行います。

原因6 MXレコードが存在しない

配送先ドメインにMXレコードが存在しない場合があります。

# dig MX example.com

メール配送先が見つからず失敗することがあります。

原因7 SMTP認証エラー

ユーザー名やパスワードの誤りです。

よくあるエラーです。

535 Authentication failed

認証情報を確認します。

原因8 アカウントロック

認証失敗を繰り返した場合です。

Fail2banなどによってIPアドレスが遮断されていることがあります。

ログを確認しましょう。

原因9 TLS設定エラー

暗号化通信で失敗するケースです。

例えば次のようなエラーです。

TLS handshake failed

証明書設定を確認します。

原因10 証明書期限切れ

SSL/TLS証明書の期限が切れている場合です。

確認します。

# openssl x509 -in server.crt -text

有効期限を確認できます。

原因11 Host not found

配送先ホスト名を解決できない場合です。

Host not found

DNS設定を確認します。

原因12 Connection timed out

配送先SMTPサーバへ接続できない場合です。

Connection timed out

ネットワーク障害やファイアウォールが原因のことがあります。

原因13 Relay access denied

リレー送信が許可されていない場合です。

Relay access denied

SMTP認証やrelay設定を確認します。

原因14 User unknown

宛先メールアドレスが存在しない場合です。

550 User unknown

宛先アドレスを確認します。

原因15 Mailbox full

受信者のメールボックス容量不足です。

552 Mailbox full

送信側では解決できません。

原因16 ブラックリスト登録

送信元IPアドレスがブラックリストへ登録されている場合があります。

GmailやMicrosoft 365への配送に影響します。

IP評価を確認しましょう。

原因17 PTRレコード未設定

逆引きDNSが未設定の場合です。

メール自体は送信できても受信側で評価が下がります。

Gmail配送で問題になることがあります。

原因18 SPF未設定

送信元認証が設定されていない場合です。

# dig TXT example.com

SPFレコードを確認します。

原因19 DKIM未設定

DKIM署名が無い場合です。

迷惑メール判定の要因になることがあります。

メールヘッダを確認します。

原因20 DMARC未設定

DMARCポリシーが存在しない場合です。

受信側評価に影響することがあります。

TXTレコードを確認しましょう。

ネットワーク疎通確認方法

SMTP接続を確認します。

# telnet smtp.example.com 25

または
# nc -zv smtp.example.com 25

接続できればポートは開いています。

SMTP応答を確認する

正常な場合は次のような応答が返ります。

220 mail.example.com ESMTP

SMTPサーバが応答していることを意味します。

よく使う確認コマンド

Postfix状態確認です。
# systemctl status postfix

メールキュー確認です。
#mailq

SMTP接続確認です。
# telnet localhost 25

MX確認です。
# dig MX example.com

逆引き確認です。
# dig -x 203.0.113.10

実務での切り分け手順

以下の順番で確認すると効率的です。

  1. ログ確認
  2. メールキュー確認
  3. SMTPサービス確認
  4. ネットワーク確認
  5. DNS確認
  6. 認証確認
  7. 配送先確認

この流れで多くの問題を特定できます。

まとめ

メール送信できない原因はSMTPサーバ停止、DNS障害、認証エラー、ネットワーク障害など様々です。

まずはログとメールキューを確認し、SMTP通信のどこで失敗しているかを特定することが重要です。

また、MXレコードやPTRレコード、SPF、DKIM、DMARCなどDNS設定も重要な確認項目です。

SMTPトラブル対応では、段階的な切り分けを行うことで効率的に原因を特定できます。