メールアドレスの@の前がドットな対応
こんにちは、本日が誕生日のTakum!です。歳の話にはしません。
さて、とあるお客様のメールの登録が弾かれて困りました。
お客様のメールアドレスは、ドコモ携帯の
hogehoge.@docomo.ne.jp
というものでした。
アットマークの前の末尾、ドットって許されたんだっけか…と思いながらも、Laravelでくみ上げたシステムに流すと、確かに「正しいメールアドレス形式ではない」というエラーになりました。チェックロジックのソースコードはこんな感じです。
Laravelドキュメントのバリデーションのページを見ても、
Qiitaのページを参照して、正規表現でチェックするようにしました。
すると次はSwiftmailerからエラーメッセージが。
でも、メール送らなきゃならないんです。
Swiftmailerさんごめんね。
例外を投げている
vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/MailboxHeader.php
コメントアウトしちゃいました。
これでメールを投げることができるようになりました。
テストするため、自分のdocomoのメールアドレスをドットアットに変更しようとしたら…
ちなみに、gmailでテストをしたら、末尾のドットが含まれていないメールアドレスに届きました。
hogehoge.@gmail.com → hogehoge@gmail.com に届く
ちょっとした裏技として使えることがあるかもしれません。
とりあえず、こういう綱渡りPOCを来月まで続けてます。
さて、とあるお客様のメールの登録が弾かれて困りました。
お客様のメールアドレスは、ドコモ携帯の
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ドキュメントのバリデーションのページを見ても、
フィールドがメールアドレスとして正しいことをバリデートします。
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を来月まで続けてます。