Python

將所有傳入的電子郵件重定向到 Python 腳本

  • September 12, 2021

我想*@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 postfixand apt-get remove exim4,所以我準備開始重新安裝其中一個(哪個允許這個特定任務的最短解決方案?)

*@example.com將所有傳入電子郵件定向到 Python 腳本的主要步驟是什麼 ?(包括:告訴 MTA 接受來自伺服器外部、來自整個網際網路等的電子郵件)

procmailPhilip Guenther認為有問題(在這種情況下很可能沒有用,因為.forward文件或等效文件可以將郵件直接發送到您的程序,從而跳過不必要的複雜性procmail)。

執行摘要:刪除procmail埠;該程式碼不安全,不應用作任何進一步工作的基礎。

正如人們可能知道的那樣,我在 1990 年代後期至 2001 年期間是 procmail 的上游維護者。

所以其他一些解決方案可能是可取的;這取決於郵件傳輸代理 (MTA)。另一種選擇是使用 MTA 傳遞到本地文件或 IMAP,然後讓您的程序解析該文件或 IMAP。這具有繼續接受電子郵件並將其保存在某處的好處;當您的程序有錯誤或無法執行時會發生什麼?與實時郵件傳遞相比,問題更少……

進出口

可能要麼複製 Sendmail.forward方法,要麼找出如何在 Eximese 中正確執行此操作。(我中止了,因為要花很多時間來探勘 Exim 文件。)elspy如果您想以 MILTER 方式進行 at-SMTP-time 掃描…

後綴

https://serverfault.com/questions/258469/how-to-configure-postfix-to-pipe-all-incoming-email-to-a-script#258491

天哪,這似乎又長又復雜。

發送郵件

在此處設置一個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"

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