將所有傳入電子郵件重新導向到 Python 腳本

將所有傳入電子郵件重新導向到 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 postfixapt-get remove exim4,所以我準備開始全新安裝其中一個(哪個將允許此特定任務的最短解決方案?)

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

答案1

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

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

人們可能知道,早在 1990 年代末到 2001 年,我就是 procmail 的上游維護者。

所以其他一些解決方案可能是可取的;這取決於郵件傳輸代理程式 (MTA)。另一個選擇是使用 MTA 傳送到本機檔案或 IMAP,然後讓您的程式解析該檔案或 IMAP。這樣做的好處是可以繼續接受電子郵件並將其保存在某個地方;當您的程式有錯誤或無法運行時會發生什麼?比即時郵件投遞時的問題少...

進出口銀行

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

後綴

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 的另一個選項是使用 MILTER,例如MIME德芳並在那裡執行任何必要的業務邏輯。 (其他各種 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"

答案2

這似乎是一個很常見的問題......我發現這已經得到了回答,這就是我的建議。 Procmail 是一個本地遞送代理..我認為意味著某些東西已經從網路接收到郵件並將其交給 procmail 進行本地傳遞或其他過濾。在這種情況下,postfix 就是那個東西。在生產中運行 postfix 後,它是一個可靠的工具,對於自訂郵件處理非常靈活。

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

答案3

我喜歡使用 Postfix 和 Dovecot 的郵箱堆疊。安裝完這些後,您可以執行以下操作以在收到發送到特定位址的郵件時執行腳本:

  1. 在目錄中建立腳本(即mail_processor.py/usr/lib/dovecot/sieve-execute/

    #!/usr/bin/python3
    from sys import stdin
    with open('/var/log/mail_processor.log', 'a') as logfile:
        for line in stdin:
            print(line.rstrip(), file=logfile)
    
    • 確保您的腳本和目標檔案具有正確的權限:

      $ chmod +rx /usr/lib/dovecot/sieve-execute/mail_processor.py
      $ chmod 0777 /var/log/mail_processor.log
      
  2. 啟用sieve_extprograms插件:

    • 使用以下內容修改 的\etc\dovecot\conf.d\90-sieve.conf插件部分:

      sieve_extensions = +vnd.dovecot.execute
      sieve_plugins = sieve_extprograms
      sieve_execute_bin_dir = /usr/lib/dovecot/sieve-execute
      
    • 重新加載鴿舍:

      $ service dovecot restart
      
  3. 建立篩過濾器(即在 Roundcube 中 goto settings-> filters-> actions-> edit filter set):

    require ["vnd.dovecot.execute"];
    # rule:[mail processing]
    if true
    {
        execute :pipe "mail_processor.py";
    }
    

現在,使用此篩選器傳遞到任何郵箱的所有郵件都將透過管道進行mail_processor.py操作。

Pigeonhole Sieve:Extprograms 插件以供參考

相關內容