SMTP日誌是郵件伺服器(Postfix)的通訊記錄,內容涵蓋信件如何進來、如何排入佇列、投遞到哪裡,以及認證與退信的原因。它是排查「信寄不出去/對方沒收到/被退信/有人偷用帳號寄信」時第一個要看的地方。收信端(IMAP/POP3)的記錄請看「IMAP日誌」。
什麼時候會用到這一頁:
- 使用者說「我寄的信對方沒收到」
- 使用者收到退信(bounce),想知道退信原因
- 懷疑某個帳號被盜用大量寄信(帳號被當跳板)
- 要確認外部寄來的信有沒有進到伺服器,或在哪一步被拒
- 要追查某封信的完整旅程(用佇列編號串起所有相關記錄)
記錄的內容
這一頁讀取的是 /var/log/mail.log。常見的記錄類型包括:
- 連線與交談:來源 IP 連入、
EHLO、STARTTLS等 SMTP 交談過程;連線階段就被拒的信件會出現NOQUEUE(代表信還沒進佇列就被擋下) - 認證:SASL 認證成功或失敗。失敗通常代表密碼錯誤、用戶端設定錯誤,或有人正在嘗試猜密碼
- 佇列:信件進入佇列(會配到一個佇列編號 queue id)、被取出投遞、投遞成功
- 投遞結果:最終結果會出現
status=字樣。status=sent表示已交付對方;status=deferred是暫時失敗(會重試,信件會留在「郵件伺服器 / 儲列管理」);status=bounced是最終失敗(已退信給寄件者) - 退信與延遲:無法投遞的回報、暫時性延遲與重試
列表與查詢
「記錄」分頁上方只有一層選擇器:「選擇日誌檔案」,列出 mail.log 以及輪替後的舊檔(含 .gz 壓縮檔),切換時自動選取第一個檔案。
- 表格只有「日誌內容」一欄,一列就是一行日誌
- 預設順序:由新到舊,可切換排序方向
- 每頁筆數:預設 50 筆
- 搜尋:即時全文檢索,符合的關鍵字會反白
- 搜尋語法:
關鍵字1,關鍵字2為 OR(任一命中)、關鍵字1+關鍵字2為 AND(兩者都命中);逗號與加號不要混用,混用時整串會被當成一個關鍵字原樣比對 - 郵件量大時
mail.log成長很快,請務必用關鍵字縮小範圍再逐頁看 - 沒有資料時顯示「暫無 SMTP 日誌資料」
實際最好用的關鍵字:
| 想查什麼 | 搜尋什麼 | 說明 |
|---|---|---|
| 某個寄件者的所有活動 | jerry@mymail.ms |
完整 Email 比只搜帳號精準 |
| 某個收件者的信 | sales@yourcompany.com |
可確認信是否曾嘗試投遞給這個人 |
| 某一封信的完整旅程 | 佇列編號(例如 4A1B2C3D4E) |
同一封信的所有記錄都帶同一個 queue id,最可靠 |
| 投遞成功或失敗 | status=sent、status=deferred、status=bounced |
判斷「到底送出沒」最直接 |
| 認證失敗 | SASL、authentication failed |
查密碼錯誤或被暴力嘗試 |
| 特定來源 IP | 203.0.113.8 |
查某台機器與本機的所有往來 |
| 某個網域 | @yourcompany.com |
查與某公司之間的所有郵件 |
組合範例:
- 只看某人的寄信失敗:
jerry@mymail.ms+status=(兩個條件都要命中) - 看兩種結果:
status=bounced,status=deferred
匯出與刪除
日誌檔案選擇器旁有兩個共用按鈕:
- 匯出:把目前選取的日誌檔下載。純文字以純文字下載、
.gz維持壓縮格式;檔名會自動加上下載時間戳,不會覆蓋舊檔。要提供給原廠或對方管理者排查時,匯出這個檔案最方便 - 刪除:輪替舊檔整檔刪除(確認視窗「確定要刪除日誌檔案「:file」嗎?」);現役檔只清空內容、保留檔案(確認視窗「此為目前正在寫入的日誌,刪除將僅清空其內容(檔案保留)。確定要清空「:file」嗎?」)
- 成功顯示「日誌檔案「:file」內容已清空」或「日誌檔案「:file」已刪除」;失敗顯示「刪除日誌檔案失敗」
- 刪除日誌的動作本身也會寫入「操作日誌」
⚠️ 清空現役的 mail.log 會讓「最近這段時間的信件去向」再也查不到。若只是空間不夠,請改用輪替設定(縮短保留份數或開啟壓縮)。
設定(輪替)
「設定」分頁的輪替參數適用於 SMTP 日誌:
- 記錄週期:每週(預設)或每天
- 保留天數/保留週數:依週期決定單位
- 單檔大小上限(MB):超過就提前輪替
- 壓縮 rotate 檔:舊檔以 gzip 壓縮
調整後按「儲存設定」,成功顯示「logrotate 設定已儲存」,失敗顯示「logrotate 設定儲存失敗」。
空間使用
「空間使用」分頁會列出這支日誌相關檔案(含輪替檔與壓縮檔)的檔名、最後修改時間與空間占用,並顯示「總計(N 個檔案)」,清單依時間倒序。沒有檔案時顯示「目前沒有日誌檔。」;讀取失敗時顯示「讀取失敗」。
常見情境與判讀
- 「對方沒收到」:先用收件者位址搜尋,找到帶 queue id 的那一行,再用 queue id 搜尋整段旅程。看到
status=sent代表本機已成功交給對方伺服器——責任已經轉到對方,請對方管理者查他們的日誌;看到status=deferred代表還在重試,可到「郵件伺服器 / 儲列管理」確認;看到status=bounced代表最終失敗,日誌中會帶退信原因 - 「收到退信,但看不懂原因」:用寄件者位址或 queue id 搜尋,找
status=bounced那一行與其後的說明。常見原因是對方信箱不存在、對方信箱已滿、被對方判為垃圾信 - 「懷疑帳號被盜用寄信」:用該帳號搜尋,短時間內出現大量不同收件者就是警訊。請立即請該使用者改密碼,並檢查「郵件伺服器 / 收發信對象管制」與「防火牆設定 / 自動防禦設定」
- 「外來的信完全沒進來」:搜尋寄件者或主旨關鍵字;若完全沒有記錄,代表連線根本沒到(問題可能在對方、DNS 或上游防火牆),而不是本機拒收
- 「一直被同一個 IP 嘗試認證」:搜尋
SASL或authentication failed,再用該 IP 搜尋。若同一個 IP 大量失敗,表示自動防禦即將(或已經)把它封鎖,可到「防火牆設定 / 自動防禦設定」的「已封鎖清單」查看
注意事項
- 郵件量大的站台
mail.log成長很快,建議開啟壓縮並確認單檔大小上限,避免單一檔案過大而拖慢查詢 - SMTP 日誌同時是「防火牆設定 / 自動防禦設定」中 SMTP 防禦項目的判斷來源:時間窗內登入失敗達次數門檻時,來源 IP 會被自動封鎖;要查看或解除封鎖請到該頁的「已封鎖清單」
- 這一頁只記錄寄信(SMTP)的過程;若信件已投遞成功但使用者仍說沒收到,請改看「IMAP日誌」確認用戶端是否成功收信
- 這一頁不含信件內容。要查看信件本文與附件,請用「郵件記錄器」或「郵件過濾器」的紀錄區
- 若信停在佇列沒有結果,請搭配「郵件伺服器 / 儲列管理」處理(重新發送或刪除)