最近、fml4.0 を使った ML でメールが良く返ってくるようになっている。事例の一つとして、送信者が aol.com のメールアドレスだった場合に、google や hotmail 等から拒否されてしまう。原因としては、この ML では from: ヘッダーが、投稿されたメールのそのままで配信してしまうところにありそうだ。
そこで、方針としては、From: ヘッダーを書き換えて、元の From: ヘッダーの中身をダブルクォートでくくって、その後ろに<>(不等号カッコ)で MailingList のメールアドレスを書く形式にするものを考えた。
グーグル先生で調べてみると、From: を書き換える例は色々あるのだが、大抵は、From: ヘッダーは ML のアドレスにして、元々の From: ヘッダーは、本文に書く、というものだ。本文は BASE64 エンコードされていたりするので、From: を本文に追加するのは結構厄介そうだし、なんとなくかっこ悪いので、避けたい所。
ただ、元の From: をダブルクォートで括る場合、もともとダブルクォートでくくられているとまずい。ダブルクォートをエスケープするか、さくっと削除してしまうのがいいのか。2バイト系の文字の2バイト目がダブルクォートになる可能性があると面倒。Shift-JIS や JIS、EUC だと大丈夫そうだが。さらに、From: が MIME encode されていたらどうするか。
ということで、とりあえず簡単なやり方からためしていこうと思う。ML のディレクトリの cf ファイルの最後に
$SMTP_OPEN_HOOK = q% my($fromStr); $fromStr = $Envelope{'h:from:'}; $fromStr =~ s/"//g; $Envelope{'fh:from:'} = " \"".$fromStr." \"<".$MAIL_LIST.">"; $Envelope{'fh:reply-to:'} = $MAIL_LIST; %;
を追加して makefml config してみた。はてさてどうなるか。といか、From: を変えたらエラーで返ってくるメールが減るだろうか。