22
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Laravel 5.5+ でRFC違反のメールを送信できるようにするパッチを作成しました

Last updated at Posted at 2018-06-22

#背景

ガラケー全盛期、日本では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の調整だけですみました。

22
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
22
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?