「SAVACAN」担当のMKです。
今回はSisimaiというバウンスメールを解析するツールの動作を個人的に確認してみましたので、インストール方法と解析手順を紹介します。
バウンスメールとは、メール送信に失敗して送信者の元に戻ってくるメールのことです。
今回のブログではこのバウンスメールを解析して、失敗の原因を確認してみたいと思います。
Sisimaiとはどのようなツールか
Sisimaiは戻ってきたバウンスメールデータを解析して、失敗した理由を特定するライブラリです。
全ての失敗原因を検出できるわけではありませんが、主だった34種の原因を検出可能です。
解析結果はjson形式で出力されます。
・検出可能なエラー34種
https://libsisimai.org/ja/reason/
SisimaiにはPerl版とRuby版があり、それぞれ下記のバージョン要件となります。
Perl版:Perl 5.26.0以上
Ruby版:Ruby 2.4.0以上
・Sisimai公式サイト
https://libsisimai.org/ja/
Perl版をインストールしてみる
以下の環境でのインストールをしています。
OS:Almalinux 8.10
Perl:5.26.3
インストール手順は以下になります。
dnf install -y perl-CPAN perl-Digest-MD5 jq
git clone https://github.com/sisimai/p5-sisimai.git
cd ./p5-sisimai
make install-from-local
今回は解析結果のjsonデータを目視で確認します。
jqはjsonデータを整形して目視で確認しやすくするコマンドラインツールです。
これだけでインストール完了です。簡単ですね!
バウンスメールの解析
インストールが完了したら後はコマンドラインにて解析を実行していきます。
Sisimaiの使い方は以下の流れになります。
- 解析したいメールデータを格納したディレクトリを用意します(受信ディレクトリでOK)
- 解析コマンドの引数にてメールデータディレクトリのパスを指定します
- 解析結果のjsonデータをプログラムや目視で確認します
今回は以下の方法で動作確認をしました。
- vpopmailの受信ディレクトリをSisimaiで解析する
- 存在しない宛先にメールを送ったときのバウンスメールを解析する
- 解析結果は目視で確認する
上記の条件でSisimaiの解析コマンドを実行してみます。
perl -MSisimai -lE 'print Sisimai->dump($*.shift)' /home/vpopmail/domains/yourdomain/yourmailaddress/Maildir/cur/ | jq
実行内容ですが [$*.shift] の引数でメール格納パスを指定しています。
目視せずプログラムで解析する場合はコマンドライン末尾の “| jq” は不要です。
実行すると以下の解析結果が出ました。
[
{
"hardbounce": 1,
"diagnostictype": "SMTP",
"rhost": "送信元IPアドレス",
"recipient": "送信元メールアドレス",
"token": "8e2fcb4ea010f29a438fcf32dfc1907eb4bc148d",
"alias": "",
"feedbacktype": "",
"deliverystatus": "5.1.1",
"addresser": "受信メールアドレス",
"origin": "/home/vpopmail/domains/yourdomain/yourmailaddress/Maildir/cur/1726039137.145522.yourmaildomain,S=2113:2,",
"smtpcommand": "RCPT",
"subject": "test",
"lhost": "",
"catch": null,
"diagnosticcode": "<From:受信メールアドレス To:送信元メールアドレス> 送信元IPアドレス does not like recipient. Remote host said: The email account that you tried to reach does not exist. Please try double-checking the recipient's email address for typos or unnecessary spaces. For more information, go to https://support.google.com/mail/?p=NoSuchUser 41be03b00d2f7-7db1714c100si416261a12.579 - gsmtp Giving up on 送信元IPアドレス.",
"action": "failed",
"destination": "gmail.com",
"messageid": "0d4d5e63-0259-4123-8e3b-2c02cfb09457@yourmaildomain",
"timestamp": 1726039136,
"senderdomain": "yourmaildomain",
"smtpagent": "qmail",
"timezoneoffset": "+0900",
"replycode": 550,
"listid": "",
"reason": "userunknown"
}
]
失敗した原因の特定に必要なデータ(userunknown:宛先が存在しない or 宛先誤り)が出ていますね!
- replycode:550
- deliverystatus:5.1.1
- reason:userunknown
デフォルト設定ではvacationエラーを検出しませんが、必要な場合は引数にて’vacation’ => 1 を付けて実行する事で検出できます。
perl -MSisimai -lE 'print Sisimai->dump(shift, 'vacation' => 1)' /home/vpopmail/domains/mktest.midori-group.biz/mktest/Maildir/cur/ | jq
Sisimaiの引数の一覧と書き方はこちらから参照できます。
https://libsisimai.org/ja/usage/#stdin
Sisimaiのバウンス理由の一覧はこちらから参照できます。
https://libsisimai.org/ja/reason/
GUI管理ツールをご紹介
クックパッドが公開しているsisitoという管理ツールがあります。
https://techlife.cookpad.com/entry/2017/05/15/000000
バウンスの理由と比率をグラフィカルに描画してくれますので、業務上で技術者でない方が確認することもある場合は利用すると便利かと思います。
バウンスメールを解析する理由
最後にバウンスメールを解析する理由をお話しします。
配信システムなどでバウンスメールを放置すると届かないメールを毎回送り続ける事となり、以下のようなリスクがあります。これを防ぐためにバウンスメールを解析し、対策する必要があります。
- 送信先サーバー側からメール配信を拒否される可能性がある
- IPレピュテーション(IPアドレスの評価)が低下して拒否される可能性がある
- ブラックリストに登録されて拒否される可能性がある
バウンスメールでよくある有効な対策には以下のようなものがあります。
- ハードバウンス(永続的な理由が原因)となる宛先は送信リストから削除する
- ブラックリスト判定された場合、リスト管理者に解除申請を提出する
- SPF、DKIM、逆引きDNSなどのなりすまし対策を設定する
Sisimaiの解析結果を毎日目視で確認することは非効率ですが、cronで定期的にプログラムで解析結果をまとめる仕組みを作れば運用に導入できそうですね!
メール配信は一度拒否されると解消までの手続きなどで時間がかかってしまうことも多いので、拒否される前に悪いところを把握して対策を取りましょう!