メールアドレスの@の前がドットな対応

こんにちは、本日が誕生日のTakum!です。歳の話にはしません。

さて、とあるお客様のメールの登録が弾かれて困りました。

お客様のメールアドレスは、ドコモ携帯の

hogehoge.@docomo.ne.jp

というものでした。



アットマークの前の末尾、ドットって許されたんだっけか…と思いながらも、Laravelでくみ上げたシステムに流すと、確かに「正しいメールアドレス形式ではない」というエラーになりました。チェックロジックのソースコードはこんな感じです。

// 入力チェック
$request->validate([
    'email' => 'required|string|email|max:255', //|unique:users
    'password' => 'required|string|min:6|confirmed',
    'agree' => 'accepted|required',
]);

Laravelドキュメントのバリデーションのページを見ても、
email
フィールドがメールアドレスとして正しいことをバリデートします。
としか書かれていませんのでまいりました。ドットアットなメールアドレスが良いのか悪いのかは別として、実際にそういうアドレスを使っている方がいるわけですから、通さなくてはなりません。
Qiitaのページを参照して、正規表現でチェックするようにしました。

// 入力チェック
$request->validate([
    'email' => 'required|string|regex:/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/|max:255', //|unique:users
    'password' => 'required|string|min:6|confirmed',
    'agree' => 'accepted|required',
]);

すると次はSwiftmailerからエラーメッセージが。

Swift_RfcComplianceException
Access in mailbox given [hogehoge.@docomo.ne.jp] does not comply with RFC 2822, 3.6.2.
ですよねー。そんなメールアドレスあっちゃいけないんですよねー。
でも、メール送らなきゃならないんです。
Swiftmailerさんごめんね。
例外を投げている
vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/MailboxHeader.php
/**
 * Throws an Exception if the address passed does not comply with RFC 2822.
 *
 * @param string $address
 *
 * @throws Swift_RfcComplianceException If invalid.
 */
private function assertValidAddress($address)
{
    if (!$this->emailValidator->isValid($address, new RFCValidation())) {
        // throw new Swift_RfcComplianceException(
        //     'Address in mailbox given ['.$address.'] does not comply with RFC 2822, 3.6.2.'
        // );
    }
}

コメントアウトしちゃいました。

これでメールを投げることができるようになりました。

テストするため、自分のdocomoのメールアドレスをドットアットに変更しようとしたら…
※メールアドレスの入力に誤りがあります。 ・「.」をアドレス内で連続利用したり、アドレスの最後に設定することはできません。
今はさすがに、RFC2822に準拠しているんですね。

ちなみに、gmailでテストをしたら、末尾のドットが含まれていないメールアドレスに届きました。
hogehoge.@gmail.com → hogehoge@gmail.com に届く

ちょっとした裏技として使えることがあるかもしれません。


とりあえず、こういう綱渡りPOCを来月まで続けてます。


このブログの人気の投稿

MS Azure Information Protection を入れたら右クリックの「分類して保護する」がうざい