2026年8月28日
2026年8月28日
Postfixログを解析してメール送信問題を調査
はじめに
Postfixはメール送信処理の各段階を詳細にログに記録しており、メールが届かない・遅延するといった問題の多くはログを正しく読むだけで原因を絞り込めます。しかし、出力されるログは1通のメールに対して複数行に分かれ、queue IDで紐付ける形になっているため、慣れていないと「どこを見ればよいか」がわかりにくいものです。
本記事ではDebian/Ubuntu系の /var/log/mail.log、RHEL系の /var/log/maillog を例に、Postfixのログから送信失敗の原因を特定する具体的な手順を紹介します。SMTP応答コード、deferred キューの確認、reject されたメールの抽出など、現場でよく使うコマンドをまとめています。
最終的にgrep・mailq・postcatといった標準ツールだけで、宛先サーバーからの拒否理由やDNS・認証エラーまで切り分けられるようになることを目指します。
症状・背景
- 送信したメールが特定のドメイン宛だけ届かない
- mailqに大量のメッセージが滞留している
- 「Connection refused」「Helo command rejected」などの応答が返ってくる
- DKIM・SPF・DMARCの不一致で迷惑メール扱いになる
手順・設定方法
ステップ1: ログファイルの場所とリアルタイム監視
まずはログを追跡できる状態にします。
# Debian/Ubuntuの場合のメールログ
sudo tail -f /var/log/mail.log
# RHEL/CentOS/AlmaLinuxの場合のメールログ
sudo tail -f /var/log/maillog
# systemd-journaldで取得する場合はサービス名で絞り込み
sudo journalctl -u postfix -f
ステップ2: 特定メールをqueue IDで追跡
1通のメール処理は同じqueue IDで複数行に分かれて記録されます。
# まず宛先や送信者でqueue IDを特定する
sudo grep "to=<user@example.com>" /var/log/mail.log | tail -n 5
# 取得したqueue ID(例: A1B2C3D4E5)で関連ログを全部抽出
sudo grep "A1B2C3D4E5" /var/log/mail.log
# 直近1時間で deferred になったメールだけ列挙
sudo grep "status=deferred" /var/log/mail.log | tail -n 20
ステップ3: キュー滞留・拒否メールの確認
配送できずに残っているメールやrejectされたメールを確認します。
# 現在キューに残っているメールの一覧
mailq
# キューに残っているメール本文とヘッダの確認
sudo postcat -vq A1B2C3D4E5
# rejectされたメール(受信側拒否)を抽出
sudo grep "NOQUEUE: reject" /var/log/mail.log | tail -n 20
# 5xx系の永久エラーのみを抽出
sudo grep -E "status=bounced|said: 5[0-9]{2}" /var/log/mail.log
ステップ4: DNS・認証関連のエラー切り分け
SPF/DKIMやDNS解決の失敗が原因のことも多いため個別に確認します。
# 送信ドメインのSPFレコード確認
dig +short TXT example.com | grep spf
# 受信側MXの逆引きが正しく引けるか確認
dig -x 203.0.113.10 +short
# OpenDKIMでの署名状況を確認
sudo grep opendkim /var/log/mail.log | tail -n 10
# キューを強制的に再処理(一時的なDNS障害の復旧時など)
sudo postqueue -f
注意事項
- ログを直接編集してはいけません。原因調査前にlogrotateで古いログが失われないよう注意します
- mailq に多数のメールが滞留している場合、IPがブラックリスト登録されている可能性があるためMXToolboxなどで確認します
postsuper -d ALLはキュー内全メールを削除する破壊的操作なので、本当に不要なメールだけ対象を指定して実行します- 個人情報を含むメール本文をログから抽出した場合は、共有時にマスキングを行います
まとめ
1. ログファイルの位置確認: Debian系は /var/log/mail.log、RHEL系は /var/log/maillog を tail -f で追跡
2. queue IDで横串検索: 1通のメールは複数行に分散するためqueue IDで grep するのが基本
3. mailqとpostcat: 滞留メールは mailq で一覧化し、postcat -vq で中身を確認
4. 拒否理由はSMTP応答: said: 5xx の応答コードから受信側の拒否理由を読み解く
5. DNS・DKIMも忘れずに: 配送可能でも SPF/DKIM 失敗で迷惑メール扱いになるケースは多い
関連記事: