perl Mail::Sendmail はRFC違反の携帯メールアドレスに送信出来ない
メール送信に便利な Mail::Sendmail
大変便利なモジュールだけど、RFCに違反しているメールアドレスでは内部のエラーチェックに引っかかり送信出来ない。
例えばこんなメールアドレスには送信出来ない。
例)read_rfc822.@docomo.ne.jp
元ソースの正規表現部分
# regex for e-mail addresses where full=$1, user=$2, domain=$3 # see pod documentation about this regex my $word_rx = '[\x21\x23-\x27\x2A-\x2B\x2D\x2F\w\x3D\x3F]+'; my $user_rx = $word_rx # valid chars .'(?:\.' . $word_rx . ')*' # possibly more words preceded by a dot ; my $dom_rx = '\w[-\w]*(?:\.\w[-\w]*)*'; # less valid chars in domain names my $ip_rx = '\[\d{1,3}(?:\.\d{1,3}){3}\]'; $address_rx = '((' . $user_rx . ')\@(' . $dom_rx . '|' . $ip_rx . '))'; ; # v. 0.61
@EXPORT_OK に $address_rx が設定されているので、$Mail::Sendmail::address_rx の正規表現を変更すればエラーチェックに引っかからないようになる。
my $word_rx = '[\x21\x23-\x27\x2A-\x2B\x2D\x2F\w\x3D\x3F\.]+'; # \.を追記する my $user_rx = $word_rx . '(?:\.' . $word_rx . ')*' ; my $dom_rx = '\w[-\w]*(?:\.\w[-\w]*)*'; # less valid chars in domain names my $ip_rx = '\[\d{1,3}(?:\.\d{1,3}){3}\]'; my $address_rx = '((' . $user_rx . ')\@(' . $dom_rx . '|' . $ip_rx . '))'; $Mail::Sendmail::address_rx= $address_rx;
正規表現を無効にした場合、当然の事ながらその前にメールアドレスの正当性をチェックしておく必要があると思う。(携帯メールアドレスを有効にするなら Email::Valid::Loose 等)
モダンなperlモジュール
メール送信系のモジュールは山ほどあるので何がいいか悩むところ。Mail::Sendmail のエントリーだけど、 Email::Sender がモダンなモジュールとして紹介されているのでリンクを載せておく。
気になる点は Moose に依存しているという事。
-
前の記事
手書き文字出力 WordPressプラグイン wp-tegaki を試してみる 2011.03.03
-
次の記事
Mojolicious::Liteな perl CGI をレンサバにアップロードするだけで動かす。 2011.03.09