EC-CUBEから送信したメールが届かない、または遅延する場合の原因と対処法を解説します。src/Eccube/Service/MailService.phpの実装を基に、トラブルシューティングのポイントを説明します。
EC-CUBEのメール送信の仕組み
EC-CUBE 4系ではSymfony\Component\Mailer\MailerInterfaceを使用してメール送信を行います。
// src/Eccube/Service/MailService.php:124-130
$message = (new Email())
->subject("[".$this->BaseInfo->getShopName()."] ".$MailTemplate->getMailSubject())
->from(new Address($this->BaseInfo->getEmail01(), $this->BaseInfo->getShopName()))
->to($this->convertRFCViolatingEmail($Customer->getEmail()))
->bcc($this->BaseInfo->getEmail01())
->replyTo($this->BaseInfo->getEmail03())
->returnPath($this->BaseInfo->getEmail04());
メールアドレス設定(dtb_base_info)
| カラム | 用途 | 管理画面の項目名 |
|---|---|---|
| email01 | From, BCC | 送信元メールアドレス |
| email03 | Reply-To | 返信先メールアドレス |
| email04 | Return-Path | エラー通知先メールアドレス |
よくある原因と対処法
1. サイトのドメインとFrom(email01)のドメインが異なる
ドメインが異なるとメールが届く可能性が下がります。ドメインを合わせることで多少届きやすくなります。
2. MAILER_DSNの設定ミス
# .env
# Gmail SMTPの場合(アプリパスワード必須)
MAILER_DSN=smtp://username:app_password@smtp.gmail.com:587
# SendGridの場合
MAILER_DSN=smtp://apikey:SG.xxxxx@smtp.sendgrid.net:587
# さくらレンタルサーバーの場合
MAILER_DSN=smtp://username:password@初期ドメイン.sakura.ne.jp:587
3. SPF/DKIM/DMARCの未設定
2024年2月以降、GmailはSPF/DKIM/DMARC認証が必須です。DNSに以下を設定してください。
# SPFレコードの例
v=spf1 include:_spf.google.com include:spf.sendgrid.net ~all
# DMARCレコードの例
v=DMARC1; p=none; rua=mailto:dmarc@example.com
4. エラーが出ている場合はTransportExceptionの確認
メール送信エラーがある場合はTransportExceptionInterfaceでcatchされ、ログに出力されます。
// src/Eccube/Service/MailService.php:159-164
try {
$this->mailer->send($message);
log_info("仮会員登録メール送信完了");
} catch (TransportExceptionInterface $e) {
log_critical($e->getMessage());
}
エラー時はvar/log/prod/front.logまたはadmin.logを確認してください。
デバッグ設定
開発環境でメール送信をデバッグするには、.envで以下を設定します。
# MailCatcherやMailHog等のローカルSMTPサーバーを使用
MAILER_DSN=smtp://localhost:1025
まとめ
メール不達の多くはMAILER_DSN設定とDNS認証設定で解決します。
EC-CUBEに関するお問い合わせ
[重要]現在公式にセキュリティサポートが切れていないPHPは8.1以上、MySQLは8.0以上で、対応しているEC-CUBEバージョンは4.2以上です。古いEC-CUBEを使っている方は適切なタイミングでバージョンアップをご検討ください。
EC-CUBEゴールドパートナー