#背景
ガラケー全盛期、日本ではRFCに準拠しないメールアドレスを配布していました。
例えば次のようなメールアドレスです
-
example.-.@example.com
- @の前に.を置いてはならない
-
.example@example.com
- .から開始してはならない
-
ex..ample@example.com
- .が連続してはいけない
これからメールアドレスを作る場合、上記のようなメールアドレスは作れなくなったようですが
昔からRFC違反のメールアドレスを使っているユーザーはそのままです。
このRFC違反メールアドレスにLaravelからメールを送信しようとすると Swift_RfcComplianceException
という例外が発生します。
つまり、LaravelからRFC違反メールアドレスにはメールが送れないという事です。
しかし、それではリプレース案件や、中高年向けサービスで登録できないユーザーが一定数存在してしまう事になり、受託案件ではクレーム物です。
本題
Swiftmailerのコンテナに独自のバリデータを読み込ませる事ができたので紹介します。
\Swift::init(
function () {
\Swift_DependencyContainer::getInstance()
->register('email.validator')
->asSharedInstanceOf('クラスパス');
}
);
これでバリデータを変更出来るようでしたので、Laravelの場合、 AppServiceProvidorのbootメソッドら辺に登録するとなんとかなります。
なお、バリデータは Egulias\EmailValidator\EmailValidator
を継承している必要があります。
都度、これを書くのがめんどくさく感じたのでパッケージ化しましたので、めんどくさいと感じる人はお使いください。
仕様
- とりあえず@が入っていればメールが送れる
- Laravel 5.5 で動作確認済み(sendmail)
- 実際に送れるかどうかはMTAによる。
アプデしました
1年以上たち @ucan-lab さんに記事をいただいたにも関わらずノーメンテ状態でしたので
Laravel6に入るまで対応しました。(まだ6触ってないんですけど・・・)
更新内容はpackage.jsonの調整と.travis.ymlの調整だけですみました。