ようこそゲストさん

Magical Diary, beta version

[Perl] メールアドレスのチェック・解析

2007/08/13 23:57 HIRATA Yasuyuki

メールアドレスが正しい形式であるか確認する

入力されたメールアドレスの形式を確認するため、

if(not $mail =~ /^[a-z0-9]+@[a-z0-9-]+(?:\.[a-z0-9-]+)+$/) {
  die "invalid address";
}

のようなコードを書くべきではない。メールアドレスというものはあなたが考えている以上に複雑で、このような単純なコードでチェックし切ることはできない。車輪の再発明をせず、次のように Email::Valid を利用しよう。これはDNSのMXレコードのチェックなども可能である。

use Email::Valid;
if(not Email::Valid->address(-address => $mail,
                             -mxcheck => 1,
                             -fqdn => 1) {
  die "invalid address";
}

RFC 822 (2822) 形式のアドレスをパースする

メールのヘッダ中に含まれるアドレスはさまざまな形式を取るため、これを自力で解析するのは骨が折れる。これもモジュールを利用することで車輪の再発明を避けることができる。以下は Email::Address を利用した例である。(同様のモジュールとしては Mail::Address があり、若干インターフェイスが異なる。)

use Email::Address;
my @addrs = Email::Address->parse(
  'HIRATA Yasuyuki <yasu@example.com>, ' .
  'yasu@example.net (HIRATA Yasuyuki), ' .
  '"sakura tan haahaa"@example.org' # *VALID* RFC 2822 address
);
foreach (@addrs) {
  print $_->address, "\n";
}


#  非公開コメント   

  • TB-URL(確認後に公開)  http://diary.asuka.net/029/tb/
© 2007 HIRATA Yasuyuki <yasu@asuka.net>, all rights reserved