
我運行自己的郵件伺服器,但我收到了某個人的「垃圾郵件」。為了阻止此人再向我發送任何電子郵件,我想退回收到的電子郵件(基於他的電子郵件地址)。但我還是希望這封郵件能被送達,因為它可能會成為網路騷擾的「證據」。
我的想法是將傳入的電子郵件發送到兩個帳戶(在 virt-user-table 中)。一種接受電子郵件,另一種則透過發回一封發送失敗的電子郵件來退回電子郵件。
這可以做到嗎?我該如何在 Postfix 中進行設定?
先感謝您。
答案1
基本上您不希望郵件在這裡被退回,但對於某些寄件者,您的伺服器仍應產生其他訊息。
您可以編寫一個腳本來建立一條訊息好像退回(例如建立「假退回」),並安排一些事情,以便來自該寄件者的消息觸發該腳本,另外才能正常出貨。
一種方法是設定always_bcc
某個別名,而該別名的目標應該是腳本路徑以管道為前綴,因此腳本將運行並提供要解析的訊息。該訊息將出現在 stdin 中。然後,該腳本可以解析訊息,檢查寄件者地址,然後成功退出而不執行任何操作,或建立假退回郵件。由於這只是郵件的額外接收者,因此不會改變標準的郵件接收路徑;郵件仍然會被遞送到最初的目的地。但要確保腳本總是成功存在(例如,永遠不會因任何非零錯誤代碼而失敗),否則發送者將要有真正的彈跳,相當神秘的彈跳。
添加/etc/aliases
:
bcc_script: |/usr/local/bin/bcc_script.py
(不要忘記newaliases
編輯此文件後運行)。
添加/etc/postfix/main.cf
:
always_bcc = bcc_script
將會/usr/local/bin/bcc_script.py
像這樣開始:
#!/bin/env python3
import sys, email
try:
msg = email.message_from_bytes(sys.stdin.read())
if msg['From'] != '[email protected]':
sys.exit(0)
# creating of the fake bounce here
...
except Exception:
pass
# do nothing, fail silently to avoid bounces if the code above throws runtime error
請注意,我沒有測試此程式碼,它可能不會立即工作。您可以在互聯網上找到其他範例。