Linux

我可以使用什麼命令在 sendmail 日誌中搜尋涉及特定收件人的所有郵件詳細資訊。

  • September 10, 2013

CENTOS 5.x | 發送郵件

有時我需要搜尋 sendmail 傳遞日誌以找出失去郵件的情況。這通常涉及兩個(或更多)步驟:

第 1 步:在 /var/log/maillog 中搜尋使用者的電子郵件地址。例如grep -i “someuser@recipientdomain.com” /var/log/maillog

這通常會返回如下內容:

 Jan 11 07:43:34 server-example sendmail[12732]: p937blksdh3: to=<someuser@recipientdomain.com>, delay=00:00:00, xdelay=00:00:00, mailer=esmtp, pri=102537, relay=mta.recipientdomain.com. [12.34.56.78], dsn=5.7.1, stat=Service unavailable

第 2 步:然後我將獲取唯一的消息名稱(在本例中為 p937blksdh3)並進行搜尋。例如:grep -i p937blksdh3 /var/log/maillog

我想將第 1 步和第 2 步組合成一個單行程式碼,並讓它自動對其他 ID 執行相同的搜尋。所以在一個命令中,我想執行以下操作:

  1. 在 sendmail 郵件日誌中搜尋特定字元串。
  2. 確定電子郵件的消息 ID(在上面的範例中,這是 p937blksdh3)。(我猜會使用**awk ‘{print $}’**嗎?)
  3. 搜尋相同的日誌,但搜尋消息 ID(基本上是grep -i p937blksdh3 /var/log/maillog在上面的範例中)
  4. 輸出步驟 3 的結果。對其他消息 ID 重複此操作。

你可以做類似的事情。

for i in `grep -i "someuser@recipientdomain.com" /var/log/maillog | awk '{print $5}'`; do grep -i $i /var/log/maillog; done

這將為您正在尋找的使用者找到該行,然後選擇該行的第 5 項(由空格 iirc 分隔)。然後對於該列表中的每個消息 ID,然後將 grep 查找包含消息 ID 的行。

如果要刪除消息 ID 末尾的 :,可以執行類似 for i in 的操作grep -i "someuser@recipientdomain.com" /var/log/maillog | awk '{print $5}' | sed 's/\://;做 grep -i $i /var/log/maillog; 完畢

希望有幫助。

引用自:https://serverfault.com/questions/364685