將所有傳入的電子郵件重定向到 Python 腳本
我想
*@example.com
使用在我的伺服器上執行的 Python 腳本來管理所有傳入的電子郵件,該腳本將執行各種工作。
- 我已經完成了 DNS MX 記錄
example.com
,將其指向我的伺服器:mx.example.com MX mailforwarder.example.com mailforwarder.example.com A 1.2.3.4
- 我已經對 postfix 和 exim 進行了很多試驗和錯誤,但沒有任何效果,所以我刪除了所有這些:
apt-get remove postfix
andapt-get remove exim4
,所以我準備開始重新安裝其中一個(哪個允許這個特定任務的最短解決方案?)
*@example.com
將所有傳入電子郵件定向到 Python 腳本的主要步驟是什麼 ?(包括:告訴 MTA 接受來自伺服器外部、來自整個網際網路等的電子郵件)
procmail
Philip Guenther認為有問題(在這種情況下很可能沒有用,因為.forward
文件或等效文件可以將郵件直接發送到您的程序,從而跳過不必要的複雜性procmail
)。執行摘要:刪除procmail埠;該程式碼不安全,不應用作任何進一步工作的基礎。
正如人們可能知道的那樣,我在 1990 年代後期至 2001 年期間是 procmail 的上游維護者。
所以其他一些解決方案可能是可取的;這取決於郵件傳輸代理 (MTA)。另一種選擇是使用 MTA 傳遞到本地文件或 IMAP,然後讓您的程序解析該文件或 IMAP。這具有繼續接受電子郵件並將其保存在某處的好處;當您的程序有錯誤或無法執行時會發生什麼?與實時郵件傳遞相比,問題更少……
進出口
可能要麼複製 Sendmail
.forward
方法,要麼找出如何在 Eximese 中正確執行此操作。(我中止了,因為要花很多時間來探勘 Exim 文件。)elspy
如果您想以 MILTER 方式進行 at-SMTP-time 掃描…後綴
天哪,這似乎又長又復雜。
發送郵件
在此處設置一個
mailertable
條目以將域(以及.domain
子域,如有必要)的所有郵件轉發給本地使用者jdoe
example.com local:jdoe .example.com local:jdoe
然後
.forward
為該使用者設置一個文件以執行必要的程式碼$ cat ~jdoe/.forward "|/etc/smrsh/process" $
這可能很簡單
$ cat /etc/smrsh/process #!/bin/sh cat >> /home/jdoe/allmails $
因為電子郵件是通過標準輸入輸入的(如果同時執行多個實例,這可能會很糟糕
process
;大概您的實際程式碼處理這種競爭條件或者是冪等的……對嗎?)。此方法也適用於複製 Sendmail 轉發語法的任何其他 MTA,假設您可以讓 MTA 將所有郵件重定向到特定使用者。這假設
mailertable
支持已啟用,confFORWARD_PATH
已設置,允許 Sendmail 執行程式碼(請smrsh(8)
注意,一些供應商可能會在不更新文件的情況下更改目錄(執行strings /the/path/to/smrsh | fgrep /
可能會有所幫助))並且像 selinux 這樣的東西也不會破壞。Sendmail 的另一個選擇是使用 MIMEDefang 之類的 MILTER,並在那裡執行任何必要的業務邏輯。(各種其他 MTA 支持 MILTER,或者有類似的東西。)
簡單郵件傳輸協議守護程序 (OpenBSD)
從外觀來看
smtpd.conf(5)
(針對 OpenBSD 6.4 更改進行了更新)action "mymda" mda "/path/to/your/command" user jdoe match from any for domain example.com action "mymda"