Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

背景

ガラケー全盛期、日本では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 を継承している必要があります。

都度、これを書くのがめんどくさく感じたのでパッケージ化しましたので、めんどくさいと感じる人はお使いください。

https://github.com/tecpresso/laravel-allow-non-rfc-compliant-email-patch

仕様

  • とりあえず@が入っていればメールが送れる
  • Laravel 5.5 で動作確認済み(sendmail)
  • 実際に送れるかどうかはMTAによる。

アプデしました

1年以上たち @ucan-lab さんに記事をいただいたにも関わらずノーメンテ状態でしたので
Laravel6に入るまで対応しました。(まだ6触ってないんですけど・・・)
更新内容はpackage.jsonの調整と.travis.ymlの調整だけですみました。

mikkame
兼業フリーランス
yyphp
PHPerが毎週集まり、ざっくばらんに情報交換する雑談コミュニティ
https://yyphp.connpass.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away