Debian

僅在 debian 上設置郵件伺服器以將它們重定向到解析器腳本

  • October 30, 2017

我有一個在 Debian 上執行的伺服器(example.com),它沒有配置為接收電子郵件(或者至少我從來沒有這樣做過)。據我了解,我只需要創建一個指向 example.com 的 MX DNS 條目即可接收電子郵件。

現在,一旦我收到電子郵件,我希望將標頭 + 正文通過管道傳輸到一個腳本(可能是 Go),該腳本將解析內容並將其添加到數據庫中)。

我聽說我可以使用 procmail,但這就是我所需要的嗎?我不需要設置一些東西來接收來自 MX 路由的電子郵件嗎?

PS:看起來 postfix 正在我的伺服器上執行(在執行 ps aux 之後),是我的 MDA 嗎?是我必須配置的東西來添加一些 procmail 魔法嗎?

如果 Postfix 配置正確,它將知道如何開箱即用地執行 Procmail。只需創建一個簡單的.procmailrc文件並向自己發送一條消息。詳細指南,例如http://www.iki.fi/era/mail/procmail-debug.html,但在花時間回答這個問題之前一定要通讀到底;最後一段建議你不要。

為此,您絕對不需要 Procmail;我相信您可以將 Postfix 配置為直接寫入您的 Go 程序。但除非您的程序具有極強的抗故障能力,否則 Procmail 提供了一個安全腳手架,至少在開發過程中它可用作安全網。

要將使用者帳戶的每條郵件消息的副本you@example.com作為標準輸入傳送到goprogram,帳戶所有者/home/you/.procmailrc只需要

# If goprogram is in a nonstandard directory,
# add it to PATH
PATH=$HOME/go/bin:$PATH

:0c
| goprogram

顯然,請確保您具有執行權限goprogram並且您PATH包含安裝它的目錄。(您顯然可以通過管道傳輸/path/to/goprogram並留下一個PATH單獨的,但如果事情變得不平凡,您希望避免在.procmailrc每個二進製文件中使用硬編碼路徑亂扔垃圾。就像在 shell 中一樣,Procmail 的預設值PATH列出了許多標準的系統範圍的位置,例如/bin:/usr/bin:/usr/local/bin等.)

c標誌使 Procmail 將其視為次要目的地,因此每封郵件也將被寫入預設收件箱/var/mail/you(或者現在可能是Maildir使用者主目錄中的一個)。一旦您確信您goprogram不會失去郵件(測試磁碟已滿、記憶體不足等),您就可以取出c並最終直​​接從 Postfix 中執行它,master.cf並擺脫 Procmail 和 Unix 使用者帳戶you,轉而使用一個虛擬使用者。

從技術上講,Postfix 是您的 MTA 和 MSA;它知道如何使用 Procmail(或 Maildrop,或一堆其他替代品)作為 MDA。為了擁有 MX 記錄,您需要在 MX 指向的主機上有一個 MTA。一個正確配置的 Postfix 只需要被告知它應該接受哪些域名的入站流量(基本上myoriginrelay_domains,但應該準備好用作主要 MX

如果您不熟悉該領域的很多內容,您可能應該完全避免執行自己的郵件伺服器。例如,Amazon SES 允許您輕鬆地在每條傳入消息上執行您自己的腳本,而不必擔心穩定、安全的電子郵件服務的巨大管理負擔和高學習曲線。

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