技術文章 · IT 指令工具箱

SMTP 421、450、451、550、554 退信:DNS、SPF、DKIM、DMARC 排錯

收到 SMTP 421、450、451、550、554 怎麼查?整理暫時性與永久錯誤、MX、PTR、SPF、DKIM、DMARC、mail queue 與 log 指令。

作者 Steve Chen · 發布  · 約 6 分鐘閱讀

IT 指令工具箱 — 廷皓技術專欄插圖

先保留完整 NDR/DSN,尤其是三位數回覆、enhanced status code、對方 hostname、時間與 Message-ID。4xx 通常可重試,5xx 通常要先修原因;不能只憑 550 三個數字下結論。

18 組範例Linux mail serverMicrosoft 365/ExchangeDNS查核日期:2026-08-11
動手前:不要為了讓信寄出就關閉 SPF/DKIM/DMARC、改成 open relay 或反覆大量重寄。郵件 log 與 header 含地址、內網與內容線索,分享前要遮罩。

DNS 與寄件身分

查 MX 與排序PowerShell

Resolve-DnsName example.com -Type MX | Sort-Object Preference

若 MX 指到不存在或錯誤區域,收信會失敗。

查 SPFPowerShell

Resolve-DnsName example.com -Type TXT | Where-Object Strings -Match 'v=spf1'

同一網域不應有多筆 SPF record。

查 DMARCPowerShell

Resolve-DnsName _dmarc.example.com -Type TXT

確認 policy、rua、alignment 與語法。

查 DKIM selectorPowerShell

Resolve-DnsName selector1._domainkey.example.com -Type CNAME

有些系統使用 TXT;selector 要從實際 header 或平台設定取得。

查寄件 IP PTRLinux/macOS

dig +short -x 203.0.113.25

PTR 由 IP 擁有者設定,不是在一般 forward zone 隨便加一筆。

確認 PTR 的正向 ALinux/macOS

dig +short A mail.example.com

常見做法是 forward-confirmed reverse DNS,但收件規則仍依各家。

查 DMARC 原始 TXTLinux/macOS

dig +short TXT _dmarc.example.com

引號分段要合併閱讀。

Queue 與伺服器 log

查看 Postfix queueLinux/Postfix

postqueue -p

先看 Queue ID、狀態、延遲與最後回覆,不要立刻 flush。

查看傳統 mail queueLinux

mailq

多數 Postfix 系統等同 postqueue -p。

查看近期 Postfix logsystemd Linux

journalctl -u postfix --since '2 hours ago' --no-pager

不同 distro 也可能寫 /var/log/mail.log 或 maillog。

依 Queue ID 找紀錄Linux

grep 'ABC123DEF' /var/log/mail.log

把 Queue ID 換成實際值;log 路徑依 distro。

篩選 deferred/bouncedLinux/Postfix

grep -Ei 'status=(deferred|bounced)' /var/log/mail.log | tail -n 100

先統計共同 destination 與回覆,不要盲目重寄。

檢查 Postfix 設定語法Linux/Postfix

postfix check

沒有輸出通常表示基本語法通過,仍要測 mail flow。

列出非預設 Postfix 參數Linux/Postfix

postconf -n

便於稽核 relay、TLS、mynetworks 與 transport maps。

TLS 與回覆判讀

讀取 SMTP banner 與 STARTTLSOpenSSL

openssl s_client -connect mail.example.com:25 -starttls smtp -servername mail.example.com -brief

TLS 失敗時記錄 verification 與協定版本。

查 SMTP enhanced status code 規格瀏覽器/文件

https://www.rfc-editor.org/rfc/rfc3463

例如 5.1.1、5.7.1 比單看 550 更能定位原因。

查 Microsoft 365 24 小時 traceExchange Online PowerShell

Get-MessageTraceV2 -StartDate (Get-Date).AddHours(-24) -EndDate (Get-Date) -SenderAddress [email protected]

需要 Exchange Online 權限與當版模組。

查看 Exchange Server queueExchange Management Shell

Get-Queue | Sort-Object MessageCount -Descending | Format-Table Identity,Status,MessageCount,NextHopDomain,LastError

LastError 是關鍵,不要只看 queue 數量。

怎麼確認有做對

  • 完整 NDR 的 SMTP code、enhanced code、remote host 與 Message-ID 都已保存。
  • SPF、DKIM、DMARC 與 PTR 從公網 resolver 查得到且符合實際寄送來源。
  • 修正後用一封測試信確認 queue、trace、header 與對方接收結果。

常見錯誤

  • 看到 550 就一直重寄。
  • SPF 一口氣加入過多 include,沒看 DNS lookup 上限。
  • 只修 SPF,忽略 DKIM alignment、DMARC 或寄件 IP 信譽。
  • 把暫時性 4xx 當成永久拒收,或把所有 5xx 都當垃圾信。

常見問題

421、450、451 要立刻人工重寄嗎?

通常是暫時性錯誤,MTA 會依 queue policy 重試。先看 retry schedule、queue 成長、對方 rate limit 與 DNS/網路,避免手動重送造成更嚴重限速。

550 5.7.1 一定是 SPF 嗎?

不一定。可能是 relay denied、政策、反垃圾信、DMARC、權限或 connector;要讀完整 enhanced status 與對方附帶文字。

延伸閱讀

版本與官方文件

參數會隨工具版本與作業系統實作改變。正式環境先用 --help、-h 或系統內建說明確認,再以當版官方文件為準。

常見問題

421、450、451 要立刻人工重寄嗎?

通常是暫時性錯誤,MTA 會依 queue policy 重試。先看 retry schedule、queue 成長、對方 rate limit 與 DNS/網路,避免手動重送造成更嚴重限速。

550 5.7.1 一定是 SPF 嗎?

不一定。可能是 relay denied、政策、反垃圾信、DMARC、權限或 connector;要讀完整 enhanced status 與對方附帶文字。

聯絡廷皓討論 看更多文章