Gravのformsでメールアドレスを空欄にしたときに出るエラーの回避方法

最初にメールフォームを導入したときも同様のエラーが出ていたのですが、今回何の気なしにGrav本体とプラグインをアップデートしたら、再発したのでメモしておきます。

エラー内容

Grav公式のサンプルを参考にメールフォームを作成しました。メールアドレスの入力は任意にするため、validateをrequired:falseに変更しました。メールアドレスを空欄にして送信テストすると、以下のようなエラーが出ます。

Address in mailbox given [] does not comply with RFC 2822, 3.6.2.

検索してみると、LaravelのSwiftMailerがアドレスチェックをしているようです。RFCに違反したメールアドレスを弾いたときに、このエラーが出ます。入力されたメールアドレスに内容確認メールを送信する仕様になっているため、空欄のまま送信するとエラーになるのだと思います。

エラーの回避方法

いっそのことメールアドレスの入力を必須にするか、もしくはMailboxHeader.php内のエラー処理箇所を、丸々コメントアウトすることで回避することができます。

/user/plugins/email/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/MailboxHeader.php

private function _assertValidAddress($address) {
  if (!preg_match('/^' . $this->getGrammar('addr-spec') . '$/D',
    $address)) {
    //throw new Swift_RfcComplianceException(
    //  'Address in mailbox given [' . $address .
    //  '] does not comply with RFC 2822, 3.6.2.'
    //  );
  }
}

上記のように修正すると、とりあえずメールアドレスが空欄の状態でも一応送信できるようになります。

参考URL