EC-CUBE4 .env

EC-CUBE4系のメール送信は、ルートディレクトリに設置されている.envのMAILER_DSNで設定します(4.0/4.1では名称がMAILER_URLです。記事末尾で触れます)。

設置したのに会員登録や注文のメールが届かない、という場合にまず確認するのがこの値です。

「エラーは出ないのにメールが来ない」初期値に注意

.envのMAILER_DSNは、app/config/eccube/packages/mailer.yamlを経由してメール送信機能(Symfony Mailer)に渡されます。

注意したいのは、未設定時のフォールバックが null://null(送信処理は成功扱いになるが、実際にはどこにも送らない設定)であることです(EC-CUBE 4.3.1の実機で確認)。

この状態ではエラーログに何も出ません。そのため「エラーは無いのにメールだけ来ない」という一見不可解な状態になります。設置直後にメールが届かないときは、真っ先に.envのMAILER_DSNが実在する送信先になっているかを確認してください。

送信方法別のMAILER_DSNの書き方

SMTPサーバーを指定する

契約しているサーバーやメールサービスのSMTPを指定するのが一般的です。

MAILER_DSN=smtp://ユーザー名:パスワード@ホスト名:587

詰まりやすいのは次の3点です。

  • Gmailは通常のログインパスワードでは認証できません。Googleアカウントでアプリパスワードを発行して指定します
  • パスワードに@や#などの記号が含まれる場合はURLエンコードが必要です。そのまま書くとDSNの区切り文字として解釈され、認証に失敗します
  • ポート番号は省略しないでください

サーバーのsendmailを使う

外部SMTPを使わない場合は、サーバーのsendmailを指定できます。

MAILER_DSN=sendmail://default

旧記事にあるgmail://構文は4.2以降では使えません

4.0/4.1時代の情報にある gmail://username:password@localhost?auth_mode=oauth のような書き方は、4.2以降のSymfony Mailerでは動きません。Gmail専用のトランスポートは標準では同梱されていないため(4.3.1のcomposer構成で確認)、GmailもSMTP形式で指定してください。

変更後の反映とテスト

MAILER_DSNは実行時に読み込まれるため、書き換え後のキャッシュクリアは不要です。保存したら問い合わせフォームなどでテスト送信し、実際に届くかを確認してください。

「送信できていないのか、送信できているのに受信側で弾かれているのか」の切り分けは、ログの見方から順を追って次の記事にまとめています。

EC-CUBEでメールが届かないときの原因の切り分け手順

設定が正しいのに届かない場合

ログにエラーが無いのに届かない場合、送信はできていて、受信側で拒否または迷惑メールに振り分けられています。特にGmailは、SPF・DKIMなどの送信ドメイン認証を満たさないメールの受信を制限しており、.env側をいくら直しても解決しません。DNS側の設定が必要です。

GmailにEC-CUBEのメールが届かない・迷惑メールになる時の対策

EC-CUBE 4.0/4.1(MAILER_URL)の場合

4.0/4.1では設定キーの名称がMAILER_URLで、送信機能はSwiftMailerです。SMTPの指定は同様ですが、sendmailは MAILER_URL=sendmail://localhost と書きます。

エックスサーバーではこのsendmail指定でメールが送信できることを確認しています。初期値の MAILER_URL=smtp://localhost のままではレンタルサーバーで動作しないことが多く、タイムアウトまで長時間待たされた末に送信されない、という症状になります。

日本発!ECオープンプラットフォーム「EC-CUBE」 EC-CUBEゴールドパートナー EC-CUBEは株式会社イーシーキューブの商標です

EC-CUBEに関するお問い合わせ


    [重要]現在公式にセキュリティサポートが切れていないPHPは8.1以上、MySQLは8.0以上で、対応しているEC-CUBEバージョンは4.2以上です。古いEC-CUBEを使っている方は適切なタイミングでバージョンアップをご検討ください。

    EC-CUBEバージョンアップ