Sendmail

Sendmail/procmail/Exchange 截斷郵件

  • June 28, 2012

一位同事在其中找到模式的啟蒙水平使我免於陷入新的瘋狂。我希望這裡的智囊團現在可以告訴我為什麼…

**場景:**我們有幾個帶有 procmail 設置的通用郵件 ID,用於根據原始收件人重新分發郵件。例如,發送到 generic_ID1 的郵件會發送到 staff1,staff2;發送到 generic_ID2 的郵件會發送給 staff3、staff4;等等…

GENERIC_ID1_RECIPIENTS="staff1@domain,staff2@domain"

:0
* ^TO.*generic_ID1
! $GENERIC_ID1_RECIPIENTS

**問題:**郵件被截斷,似乎是隨機的。最終發現的模式表明,當句子以句點在第 76 列和硬輸入結束時出現:不是在第 75 或 77 列;而是在第 76 列。不在第 76 列,在同一行有更多文本。這段時間之後的任何文本都失去了。

附錄:我們剛剛看到它在第 226 列再次出現(並複制了它)。我驚呆了。

我可以通過在重新發送之前複製消息來確認 procmail 接收到整個消息:

:0c                       # note: 'c'
* ^TO.*generic_ID1
! $GENERIC_ID1_RECIPIENTS

我相信 sendmail 可能會在重新投遞時截斷它,但我不確定如何診斷或證明​​這一點(我不是 sendmail 管理員,只是一個 procmail 使用者)。

這個問題是完全可以重現的。

**問題:**為什麼會發生這種情況,我該如何解決?

非常感謝。

編輯:更新標題和標籤。解決方案在評論中。

(從問題評論轉換)

這個等式實際上包含三個部分:sendmail、procmail 和 Exchange:

  • Exchange:在接受要投遞的郵件時,它似乎會重新格式化純文字消息,將其行編碼並換行為 75 個字元。
  • sendmail:在該郵件中遵循了一個舊的(但已知的)行為,一行上的句點被解釋為消息結束,然後被傳遞,有效地截斷了實際的郵件正文。
  • procmail:根據文件,它應該使用強制它忽略裸句的標誌來呼叫 sendmail。它沒有這樣做,也沒有遵守顯式的配置文件指令。短期解決方案:將 -oi -OIgnoreDots=T 傳遞給所有重新傳遞配方。長期的解決方案:升級我們站點的 procmail 安裝,它現在尊重配置設置並忽略空白期(不再需要傳遞的標誌)。

硬換行開始發揮作用,因為當 Exchange 對之前的純文字消息進行編碼時,它引入=20了可能允許句點自行換行並單獨留在一行中的方式。

引用自:https://unix.stackexchange.com/questions/38156