「受信者:」と「参照:」に基づいて電子メールに「delivered_to」行を追加できるユーティリティは何ですか?

「受信者:」と「参照:」に基づいて電子メールに「delivered_to」行を追加できるユーティリティは何ですか?

要約:電子メールを読み、「受信者:」フィールドと「参照:」フィールドを確認して、既知のアドレス一覧から電子メールアドレスを見つけるユーティリティが必要です。 1つを見つけたら、deliver_to: <address>追加の封筒行を含む電子メールを出力したいと思います。

背景

私のISPは、すべての会社のメールを「ドメインメールボックス」/「すべてキャプチャ」メールボックスに送信しますが、封筒の受信者をどこにも記録しません。我々は、このメールボックスからデータを受信し(いわゆる「POP3コネクタ」を使用して)、それをユーザーのメールボックスに配布する交換サーバーを持っています。隠し参照メッセージとメーリングリストのメッセージは、メインメールボックスに転送されます。スワップを交換するのにこの部分だけが残りましたね。 getmailを使用してメッセージを取得できますが、MultidropPOP3Retrievergetmailは受信者のEメールアドレスを含む封筒行を見つけることを期待しています(例:Deliver_to:[Eメール保護])私のISPはそれを提供していません。だからTo:/CC:から回復するために最善を尽くす必要があります。

ベストアンサー1

私の答えは広範囲のgetmailドキュメントにあることがわかりました。 getmailが呼び出すものを使用する必要がありますMultiGuesser

しかし、私の場合、ISPは封筒ヘッダに次の行を追加しました。

for <[email protected]>

MultiGuesserは完璧ではないため(たとえば、受信者がBCCであるかどうかを正確に推測することはできません)、最終的に行を追加する元のdelivered_toアイデアを実装しました。私のISPがこの便利な行の追加を中断した場合に備えて、MultiGuesserを維持します。このユーティリティはformail(dirktが答えで提案した)bashスクリプトです。処理するすべてのメッセージに対して一時ファイルを生成するため、高速ではありませんが、うまく機能します。

#!/bin/bash
# Reads email from stdin and prints it to stdout with a twist:
# If it finds a line like " for <[email protected]>" 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

おすすめ記事