人生100年!生涯エンジニア人生!

楽しいエンジニア人生!

長年苦しめられてきた、ドコモメールの駄目な仕様が、iOS14のお陰で予定より早く消えそうで嬉しい!

iOS14の仕様変更

iOS14の仕様変更で、ドコモメールの駄目な仕様に設定されているとメール送信できないことになりました。

ドコモのアナウンスです。
service.smt.docomo.ne.jp

auのアナウンスです。
www.au.com

この駄目な仕様は「2連続のドット「..」が含まれていたり、アットマーク前にドット「.@」が含まれているメールアドレス」のことで、これはRFC5321で決めたことに違反しております。

RFC5321の4.1.2. Command Argument Syntaxに仕様が記載されていますが、難解なので..や.@のメールアドレスはRFC違反だと思ってください。

RFC 5321 - Simple Mail Transfer Protocol

歴史的な経緯

RFC違反のメールアドレスは、ドコモのiモードメール(現在のドコモメール)が発祥の地で、迷惑メールの多いドコモでは、RFC違反のメールアドレスにはパソコンからのメールが届かないということで、それが迷惑メールが来ないメールアドレスとして広まってしまいました。

それだけで終わると思われた、RFC違反のメールアドレスは、auに伝播します。

2006年6月6日に、auはメールアドレスの文字数を30文字に拡張すると同時に、RFC違反仕様が盛り込まれてしまいました。

k-tai.watch.impress.co.jp

なぜ、auは盛り込んでしまったのか?今となっては推測でしかないですが、2006年10月24日から番号ポータビリティ(通称MNP)が開始されたからとも言われております。
MNP後はMNPする前のキャリアメールは使用できなくなるので、携帯電話会社を乗り換えた後も、ドメインは異なっていても同じローカルパート(@の左側)を使用したいという需要に答えたのではないか?と推測します。

k-tai.watch.impress.co.jp

その後、ドコモが2009年4月1日から、RFC違反メールアドレスを新規登録をやめる方針に切り替わりました。

www.nttdocomo.co.jp

ドコモのメールアドレス変更のページには以下の記載があります。

また、2009年4月1日以降、「.」は「..」などのように連続で使用することや@マークの直前で使用することはできなくなりました。

この変更は2009年9月1日から始まるSPモードのためかと推測されます。

www.nttdocomo.co.jp

この対応で、RFC違反メールアドレスが減ると思われましたが、意外としぶとく残りました。
ガラケー同士はもちろん、携帯電話会社提供のメールアプリはRFC違反のメールアドレスが使えてしまうからです。
そして、iOS13までのメールアプリとメッセージアプリも、RFC違反のメールアドレスが使えていました。

このため、ドコモ同士や携帯電話会社間ならRFC違反のメールアドレスの送受信は可能なのです。
2020年の今ままで、11年間もRFC違反のメールアドレスは残ってしまったのです。

まとめ

今回iOS14の仕様変更で、RFC違反のメールアドレスが設定されているとメール送信ができないことは、大変喜ばしいことです。

アプリが対応してくれればRFC違反のメールアドレスはガラケーのみになるし、2026年3月31日にドコモのiモードが終了するので、このときにRFC違反のメールアドレスがこの世から消え去るのです!
メルマガ配信をしていた自分としては、本当に早く消えて去ってほしいと心から願うのでした。

おまけ

GmailRFC違反のメールアドレスを送信してみましょう!

macOSにDefaultで入っているPostfixを有効にして、Gmailにリレーするように設定をして試してみます。

% echo 'Test mail' | mail -s test test..@example.com
2020-11-16 00:15:31.961215+0900 0x1ff82a   Info        0x0                  67732  0    smtp: A44B369D557: to=<test..@example.com>, relay=smtp.gmail.com[64.233.189.108]:587, delay=1.3, delays=0.02/0.02/1.1/0.17, dsn=5.1.3, status=bounced (host smtp.gmail.com[64.233.189.108] said: 553-5.1.3 The recipient address <test..@example.com> is not a valid RFC-5321 553 5.1.3 address. o132sm15287203pfg.100 - gsmtp (in reply to RCPT TO command))

not a valid RFC-5321 と返答があることが確認できますね。

なお、コマンドラインで送信するとき、かなり気を付けないといけなくて、ちょっとしたことで危険な事になりかねないのです。

これは大丈夫ですがバッククォートを含んだメールアドレスをコマンドラインで送信すると、バッククォートの中を実行した結果が反映されてしまいます。
下の例だと、macOSで動かしているのでOSの名前Darwinに変換されています。
ちなみに、バッククオートが入ったメールアドレスはRFC違反ではないです。

% echo 'Test mail' | mail -s test test`uname`@example.com
2020-11-16 00:12:37.105535+0900 0x1fe590   Info        0x0                  66990  0    smtp: 82F9369D4E7: to=<testDarwin@example.com>, relay=smtp.gmail.com[64.233.189.109]:587, delay=2.6, delays=0/0/1.7/0.92, dsn=2.0.0, status=sent (250 2.0.0 OK  1605453157 gx24sm15347740pjb.38 - gsmtp)

同様に、ハイフンが入ったメールアドレスはRFC違反ではないですが、オプションと誤認します。

% echo 'Test mail' | mail -s test '-test@example.com'
mail: illegal option -- t
Usage: mail [-EiInv] [-s subject] [-c cc-addr] [-b bcc-addr] [-F] to-addr ...
       mail [-EHiInNv] [-F] -f [name]
       mail [-EHiInNv] [-F] [-u user]
       mail -e [-f name]
       mail -H