#!/usr/bin/perlう~ん、自分が使用しているメールアドレスを全て試して期待値通りの動作をしたが、正常系のサンプルが全然足りない。。。
use strict;
use utf8;
use Mail::SPF;
#存在するメールアドレスと正しいメールサーバーのアドレス
&test('foo@hogehoge.jp','aaa.bbb.ccc.ddd',0);
#存在しないメールアドレスと正しいメールサーバーのアドレス
&test('foo2@hogehoge.jp','aaa.bbb.ccc.ddd',0);
#存在するメールアドレスと正しくないメールサーバーのアドレス
&test('foo@hogehoge.jp','abc.abc.abc.abc',1);
#存在しないメールアドレスと正しくないメールサーバーのアドレス
&test('foo2@hogehoge.jp','abc.abc.abc.abc',1);
#記事に載せるの疲れたので略
sub test()
{
my ($from,$ip,$expectation) = @_;
my $ret = &checkSPF($from,$ip);
print "checkSPF test: from=$from,ip=$ip,result=$ret";
if ($ret == $expectation) {
print " -> OK";
} else {
print " -> NG";
}
print "\n";
}
sub checkSPF
{
my ($from,$ip) = @_;
#サーバーに問い合わせするためのオブジェクトを作成
my $spf_server = Mail::SPF::Server->new();
#リクエストメッセージの作成
my $request = Mail::SPF::Request->new(
versions => [1, 2], # SPFのv1,2でチェック
scope => 'mfrom', # identityでFromで送られてきたメールアドレスをチェックすることを宣言(他にhelo、praが指定できる)
identity => $from, #チェックするメールアドレス (scopeがheloの時はheloで告げられた文字列)
ip_address => $ip, #メールを送信して来たSMTPサーバーのIPアドレス
);
#サーバーにリクエストを送信
my $result = $spf_server->process($request);
#my $result_code = $result->code; # 'pass', 'fail', etc.
#my $local_exp = $result->local_explanation;
#my $authority_exp = $result->authority_explanation
#my $spf_header = $result->received_spf_header;
if ($result->is_code('pass')) {
return 0;
}
return 1;
}
1;
この記事にはトラックバック・コメントがありません。
コメントは投稿者の責任においてなされるものであり,サイト管理者は責任を負いません。