2010年3月にオープンソースソフトウェアとして公開して以来、多くのユーザ様・企業様にダウンロードし、 ご利用いただきましたbounceHammerは、2016年2月29日(月)を持ちまして製品ライフサイクルの終了(EOL: End Of Life) となりました。長きにわたりbounceHammerをご使用いただき誠に有り難う御座いました。 開発元では後継となるバウンスメール解析ライブラリとして、より高精度で高速なSisimai(シシマイ) を二条項BSDライセンスで公開しています。
2010/11/04
一般的にメールアドレスのクリーニングと言われていますが、配信した後のアドレス管理は重要です。 bounceHammerが解析した結果を配信対象であるメールアドレスと照合して、 配信できないものは除外する、この繰り返しを毎回メールを配信する前に行えば、 遅延の回避やサーバの負荷軽減につながり、合理的な配信態勢が維持できます。
ここではbounceHammerが解析した結果をYAMLファイルとして書き出して、 配信対象アドレスの取捨選択をする一例を紹介します。 例として宛先不明(userunknown)とフィルターによる拒否(filtered)、 そして不明なホスト(hostunknown)でバウンスした宛先を配信対象から除外します。どのエラー理由なら除外 すべきなどの決定については、 バウンスした宛先に再送できるかどうか? を参考にしてください。
先ずはじめに、配信側で照合する為のYAMLファイルを datadumper コマンドを使って作成します。
出力する形式はYAMLで、宛先不明(userunknown)とフィルターによる拒否(filtered)、 そして不明なホスト(hostunknown)の三種類の理由のいずれかでバウンスした記録だけを取り出します。
ここでは、とり出す記録を1週間以内にバウンスしたものに限定しています。 例えば毎週一回メール配信を行うとすれば、前回の配信から今回の配信までの間にバウンスした記録 だけを見る方が、全件照合するよりも合理的です。1週間以内にバウンスした記録は、 datadumperコマンドの--howrecent 1wオプションで直近の1週間分として取り出しています。
上記のコマンドで、/tmp/bounced.yamlファイルにバウンス記録を書出しました。
データ量が多くてディスクIOが気になる場合はmfs(Linuxではram disk, /dev/shmなど) にファイルを作るとよいでしょう。また、配信側プログラムでJSON形式で読み出したい 場合はdatadumperコマンドの出力フォーマットオプション--format jsonを使って、 あるいはCSVで欲しい場合は--format csvを使って、それぞれ望む形式でデータを 得てください。
様々な電子メール配信環境とプログラムがあるので、こうすればよい という明確な解答は記述できませんが、一般的な処理形態は、 取り出したYAMLファイルを読み出して、配信先アドレスと照合する流れです。
#!/usr/bin/perl use strict; use warnings; use JSON::Syck; # 取り出したバウンス記録を読込む my $Bounces = JSON::Syck::LoadFile("/tmp/bounced.yaml") || []; my @Users = 配信対象ユーザのメールアドレス(サイトのDBなどから取得); my $MailFrom = 'info@example.jp'; foreach my $user ( @Users ) { my $b = [ grep { $_->{recipient} eq $user && $_->{addresser} eq $MailFrom } @$Bounces ]; next if( scalar @$b ); # バウンス記録があれば配信しない 通常の配信処理...; }
上記はごく単純な照合例です。同じような仕組みで配信時ではなく配信直前にサイト側 データベースに対して配信不能フラグを立てるなどの処理でもよいでしょう。
工数などの理由で、配信プログラム側に照合機能を実装できない場合、 配信したくないメールアドレスをMTAが参照するデータベース形式に変換して、 MTAに配信の是非を任せる という方法もあります。
ここではawk, sedコマンドを使って、Sendmailのaccess_db形式に変換し、 配信ゲートウェイとなっているSendmailに削除させる方法を紹介します。
元の/etc/mail/accessが空である場合はaccess_origとしてコピーする必要はありませんが、 元の設定とバウンス記録を書き込んだ/tmp/access_tmpを結合する場合は、元のaccessの内容 が消えないように注意してください。
BOUNCEHAMMER.JP |
Copyright 2009-2016 Cubicroot Co. Ltd.
(Kyoto, Japan) All Rights Reserved.
Powered by Linode - Xen VPS Hosting.
Blue Retro Rusted Grunge Icons by Icons Etc.