Email
什麼實用程序可以根據 To: 和 Cc: 在電子郵件中添加 Deliver_to 行?
**TLDR:**我需要一個實用程序來讀取電子郵件並查看收件人:和抄送:欄位以從已知地址列表中查找電子郵件地址。如果它找到一個,我希望它輸出帶有額外
deliver_to: <address>
信封行的電子郵件。背景
我的 ISP 將所有公司郵件發送到“域郵箱”/“Catch all”郵箱,但不會在任何地方記錄信封收件人。我們有一個交換伺服器從該郵箱接收(使用所謂的“POP3 連接器”)並將它們分發到使用者郵箱。密件抄送的郵件和來自郵寄列表的郵件被遞送到預設郵箱。我正在更換交換,這是剩下的唯一一塊。我可以使用 getmail 檢索郵件,
MultidropPOP3Retriever
但 getmail 期望找到一個包含我的 ISP 未提供的收件人電子郵件地址(例如,delivered_to: xxx@yyy.com)的信封行。所以我必須盡我所能,從 To:/CC: 中恢復它。
事實證明,我的答案在廣泛的 getmail 文件中。我需要使用 getmail 呼叫的內容
MultiGuesser
。但是,因為在我的情況下,我的 ISP 在信封標題中添加了這樣的一行:
for <xxx@DOMAIN.com>
並且由於 MultiGuesser 並不完美(例如,如果收件人是密件抄送,它就無法正確猜測)我終於實現了添加
delivered_to
行的原始想法。我保留了 MultiGuesser,以防我的 ISP 停止添加這條有用的線路。該實用程序是一個使用的 bash 腳本formail
(由 dirkt 在他的回答中建議)。它並不快,因為它會為它處理的每封郵件創建臨時文件,但它工作正常。#!/bin/bash # Reads email from stdin and prints it to stdout with a twist: # If it finds a line like " for <xxx@yyyy.zz>" in the envelope # it will assume it refers to the receipient and will add a "Delivered-To" # envelope line that will make getmail happy. -- Nick Demou 2018 # bash options for safety in case of errors set -euf -o pipefail # read stdin to temp file cat - > /tmp/deliver.to.$$ logger -p mail.info "getmail, filtering via temp file /tmp/deliver.to.$$" formail -X "" < /tmp/deliver.to.$$ > /tmp/deliver.to.$$.env # logger -p mail.info "getmail, extracted envelope/headers to /tmp/deliver.to.$$.env" ID=`grep 'SMTP id ' /tmp/deliver.to.$$.env 2>/dev/null| head -1|sed -e 's/^ *//'` || ID=UNKNOWN # logger -p mail.info "getmail, extracted ID $ID" ADDR=`grep '^ *for <.*@domain\.com>' /tmp/deliver.to.$$.env 2>/dev/null|head -1|sed -e 's/^.*<\([^>]*\)>.*$/\1/'` || ADDR=UNKNOWN # logger -p mail.info "getmail, extracted delivery address $ADDR" if echo $ADDR | grep -q '^[^@]*@domain.com *$' ; then cat /tmp/deliver.to.$$ | formail -A "Delivered-To: $ADDR" else cat /tmp/deliver.to.$$ fi logger -p mail.info "getmail filtered mail for $ADDR, $ID" rm /tmp/deliver.to.$$ rm /tmp/deliver.to.$$.env
我的
getmailrc
包含一個像這樣的過濾器,它呼叫上面的腳本:[filter-1] type = Filter_external path = /opt/envelope-add-delivered-to.sh