2007年11月20日 12:00 [Edit]

ドコモもauはとりあえず"da..me."@を受け取れるようにしとくべし

けだし同感なのだけど、これでもメアドを再設定しない人をどうするかという問題は残る。

ドコモもauもいいかげんにメールアドレス設定の仕様を直せ。
とりあえずドコモの携帯で確認したが、2007年11月現在のいまも、***.@docomo.ne.jpとか**....***@docomo.ne.jpといったメールアドレスの設定/取得は可能なままである。

というわけで、解決策を考えてみた。


実はRFC2822の規定では、da.me..@docomo.ne.jpというメールアドレスはNGだが、意外なことに"da.me.."@docomo.ne.jpであればOKなのだ。@の前の部分が""でくくられている場合、RFC2822はそれを特別扱いすることになっているので、こんなトリックが使える。

ちなみに、RFC2822に準拠しているかどうかは、こうやってチェックできる。

perlfaq9 - Networking ($Revision: 8539 $) - search.cpan.org
If you want to just check part a to see that the address is valid according to the mail header standard with a simple regular expression, you can have problems, because there are deliverable addresses that aren't RFC-2822 (the latest mail header standard) compliant, and addresses that aren't deliverable which, are compliant. However, the following will match valid RFC-2822 addresses that do not have comments, folding whitespace, or any other obsolete or non-essential elements. This just matches the address itself:
    my $atom       = qr{[a-zA-Z0-9_!#\$\%&'*+/=?\^`{}~|\-]+};
    my $dot_atom   = qr{$atom(?:\.$atom)*};
    my $quoted     = qr{"(?:\\[^\r\n]|[^\\"])*"};
    my $local      = qr{(?:$dot_atom|$quoted)};
    my $domain_lit = qr{\[(?:\\\S|[\x21-\x5a\x5e-\x7e])*\]};
    my $domain     = qr{(?:$dot_atom|$domain_lit)};
    my $addr_spec  = qr{$local\@$domain};
Just match an address against /^${addr_spec}$/ to see if it follows the RFC2822 specification.

ちなみに、これをまとめると、

という正規表現になる。ここではコピペしやすいように、textareaタグの中に入れてある。以下、それをJavaScriptで簡易チェック。

はRF2822非準拠

ということは、RFC2822準拠のmail addressにしか送付できないMailerでも、"da.me.."@docomo.ne.jpであれば送付できるわけである。もちろん、そのままでは通常のMTA(正確にはlocal agent)は配送してくれないのだが、"da.me.."@docomo.ne.jpda.me..@docomo.ne.jpに配送するようなlocal agentは簡単に実現できる。例えば、vpopmailであれば、$VPOPMAIL/domains/example.com/.qmail-default

#| /usr/local/vpopmail/bin/vdelivermail '' bounce-no-mailbox
| /path/to/unquote

と書き換えた上で、/path/to/unquoteを以下のようにすればよい。

#!/usr/local/bin/perl
use strict;
use warnings;
use File::Basename;
my $DEBUG        = 0;
my $name         = basename($0);
my $dir          = '/path/to/your/logdir';
my $log          = "$dir/$name.log";
my $vdelivermail = '/usr/local/vpopmail/bin/vdelivermail';

my $mail = do { local $/; <> };

if ($DEBUG){
    local $\ = "\n";
    open my $fh, '>>', $log or die "$log:$!";
    print $fh '='x72;
    print $fh "$_=$ENV{$_}" for sort keys %ENV;
    print $fh '-'x72;
    print $fh $mail;
    close $fh;
}
{
    my $default = $ENV{DEFAULT};
    if ($default =~ m/\A\"(.*)\"\z/){
        my $newdef = $1;
        $ENV{$_} =~ s/$default/$newdef/eg for keys %ENV;
    }
    # | /usr/local/vpopmail/bin/vdelivermail '' bounce-no-mailbox
    open my $fh, '|-'
      or exec $vdelivermail, '', 'bounce-no-mailbox'
      or die "$vdelivermail:$!";
    print $fh $mail;
    close $fh
}
__END__

で、通常のMUAが"da.me.."@docomo.ne.jpをどう扱うかだが、Mac OS X v10.4 の Mail.app は、文句はいうもののきちんと送付してくれた。

ドコモならびにAUにおかれては、RFC2822準拠をユーザーに促すと同時に、上のような対策をとってみたらいかがだろうか。

Dan the Postmaster of Too Many MXes

追記:

お困りですか?というわけでTB。ちなみにusername+whatever@gmail.comはRFC準拠です。


この記事へのトラックバックURL

この記事へのトラックバック
404 Blog Not Found:ドコモもauはとりあえず"da..me."@を受け取れるようにしとくべし
404 Blog Not Found:ドコモもauはとりあえず&quot;da..me.&quot;@を受け取れるようにしとくべし【】at 2012年01月23日 07:58
【話題の話題日々更新中♪】にようこそまずは新着情報をチェック ⇒ ★新着トピックス一覧★では、今回のピックアップ情報をどうぞ!忙しいあなたのダイエットに『Bella』!送料無料!おまけ付き!ミニサンプル他、サンプル色々プレゼント!オードムーゲ 薬用ローション2本組...
au ポイント関連ニュース【話題の話題日々更新中♪】at 2007年12月27日 14:49
メールアドレスに「..」(ドットの連続)があるauユーザーの友人宛にau携帯からメールを送信しました。自分のPC用アドレス宛にも届くようにしていたのでそのメールを見ると、Toに入れた友人のアドレスは、@の前がダブルクォートで囲まれていました。送信時のアドレスには、ダ
[Mail] RFC違反のメールアドレス【Scrapcode@はてなダイアリー】at 2007年11月30日 18:56
Web屋のネタ帳さんところの、この記事から端を発している(いやその前か...
DoCoMoとKDDIはいつでもRFC準拠にできる状況っぽいですよ...後は頭の固い(悪い?)エロイ人の決断次第...【ここギコ!】at 2007年11月28日 13:21
ドコモとAUだけではなく、ドコモとAUに悩まされているメール管理者にも今一度思い出して欲しいのが、以下の言葉。 Jon Postel - WikiquoteIn general, an implementation must be conservative in its sending behavior, and liberal in its receiving behavior. [一般的に...
送り手は控えめに、受け手はおおらかに【404 Blog Not Found】at 2007年11月26日 15:16
2007年5月某日。筆者の知人が関わっているWebサイトのサポート窓口宛に、次...
ドコモもauもいいかげんにメールアドレス設定の仕様を直せ。の続きと補足【Web屋のネタ帳】at 2007年11月26日 10:18
au メールアドレスのケータイ電話についての情報を紹介しています。携帯電話の情報は、日々進化しています。今回はau メールアドレスのニュースです。このau メールアドレスの情報があなたにとってお役に立てることができればうれしく思います。では、早速、「au メールアド....
au メールアドレス【auケータイ新機種情報】at 2007年11月20日 20:33
404 Blog Not Found:ドコモもauはとりあえず&quot;da....
蔓延る【イニっ記 4.0】at 2007年11月20日 13:25
この記事へのコメント
一般にはRFC2822に厳密に準拠したメールアドレスを正規表現で表すことはできません。
コンテキストに依存した"状態"が存在するためです。
ある種の拡張が行われている正規表現実装なら可能かもしれません。
実用機には簡易チェックでOKだと思いますが、なんで言語の標準ライブラリに用意しておいてくれないのだろう...

参考URL
http://www.tt.rim.or.jp/~canada/comp/cgi/tech/mailaddrmatch/
Posted by 通りすがりさん at 2007年11月21日 23:34
このページ、IEだといきなりエラーダイアログが出てきて止まりますよ。
Posted by 通りすがり at 2007年11月21日 00:11