メールアドレスの@の前がドットな対応
こんにちは、本日が誕生日の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を来月まで続けてます。