PHPMailer SMTP

PHPMailerライブラリを使用して、SMTP経由でメールを送信するDrupalモジュールです。

phpmailer_smtp
10,863 sites
28
drupal.org

インストール

Drupal 11, 10 v2.4.0
composer require 'drupal/phpmailer_smtp:^2.4'
Drupal 9, 8 v2.2.6
composer require 'drupal/phpmailer_smtp:^2.2'

概要

PHPMailer SMTPは、DrupalのメールシステムをSMTP経由での送信に置き換えるモジュールです。PHPのmail()関数の代わりに、広く使用されているPHPMailerライブラリを使用することで、信頼性の高いメール配信を実現します。

このモジュールは、Gmail、Office 365、Amazon SES、独自のSMTPサーバーなど、様々なSMTPプロバイダーに対応しています。SSL/TLS暗号化、STARTTLS、OAuth2認証をサポートし、セキュアなメール送信が可能です。

HTMLメールの送信、ファイル添付、バックアップSMTPサーバーの設定、詳細なデバッグ出力など、企業利用に必要な機能を備えています。Mail Systemモジュールと連携することで、モジュールごとに異なるメール送信方法を設定することも可能です。

Features

  • SMTP経由でのメール送信 - PHPMailerライブラリを使用して、設定したSMTPサーバー経由でメールを送信します
  • SSL/TLS/STARTTLS暗号化対応 - セキュアな接続でメールを送信できます。ポート25(非暗号化)、465(SSL/TLS)、587(STARTTLS)に対応
  • OAuth2認証サポート - 基本認証(ユーザー名/パスワード)に加え、プラグインによるOAuth2認証に対応しています
  • バックアップSMTPサーバー - プライマリサーバーが失敗した場合に自動的にバックアップサーバーを使用します
  • HTMLメール対応 - Content-Typeヘッダーを尊重してHTMLメールを送信可能。Twigテンプレートでカスタマイズできます
  • ファイル添付機能 - filesまたはattachmentsパラメータでファイルを添付できます
  • テストメール送信機能 - 設定画面から直接テストメールを送信して設定を確認できます
  • 詳細なデバッグ出力 - SMTPサーバーとの通信内容を画面表示またはログに記録できます
  • デバッグメールのリルート - 開発環境で実際のユーザーにメールを送信しないよう、すべてのメールを特定のアドレスにリルートできます
  • SMTP接続のKeep-Alive - 大量のメール送信時にパフォーマンスを向上させるため、SMTP接続を維持できます
  • Reply-Toアドレスの自動設定 - Google Mail使用時に必要なReply-Toアドレスを自動的に設定します
  • エンベロープ送信者のカスタマイズ - SMTP MAIL FROM:コマンドで使用するアドレスを細かく制御できます

Use Cases

Google Mail(Gmail)でのメール送信

Gmailを使用してメールを送信する場合の設定例:SMTPサーバーにsmtp.gmail.com、ポートに465、セキュアプロトコルにSSL、ユーザー名にGmailアドレス、パスワードにアプリパスワード(2段階認証使用時)を設定します。高度な設定で「常にReply-Toアドレスを設定」を有効にすることで、返信先が正しく設定されます。Gmailには送信制限があるため、大量送信には注意が必要です。

企業のSMTPリレーサーバー経由での送信

社内のSMTPリレーサーバーを使用する場合、通常はポート25または587を使用し、認証が不要な場合はユーザー名とパスワードを空欄にします。ファイアウォールで外部SMTPがブロックされている環境で、内部リレーサーバーを使用するケースに適しています。

開発環境でのメールテスト

開発環境で本番ユーザーに誤ってメールを送信しないよう、settings.phpに $conf['system.maintenance']['phpmailer_smtp_debug_email'] = 'developer@example.com'; を追加することで、すべてのメールを指定したアドレスにリルートできます。

HTMLニュースレターの送信

HTMLメールを送信するには、Format設定でメール形式を「HTML」に設定します。カスタムテンプレートを使用する場合は、phpmailer-smtp--mymodule.html.twig のようなテンプレートファイルを作成してデザインをカスタマイズできます。

大量メール送信のパフォーマンス最適化

大量のメールを送信する場合は、「接続を維持」オプションを有効にすることで、メールごとに新しいSMTP接続を確立するオーバーヘッドを削減し、パフォーマンスを向上させることができます。

OAuth2認証(Microsoft 365/Azure)でのメール送信

PHPMailer OAuth2モジュールを追加でインストールし、Azure Active Directoryの認証情報を設定することで、OAuth2による安全な認証でMicrosoft 365経由でメールを送信できます。基本認証が無効化された環境で必要となります。

Tips

  • SSL/TLS使用時はポート465、STARTTLS使用時はポート587を使用するのが一般的です。RFC 8314ではポート465が推奨されています。
  • settings.phpでSMTPパスワードを設定することで、データベースに平文パスワードを保存せずに済みます:$config['phpmailer_smtp.settings']['smtp_password'] = 'your_password';
  • Mail Systemモジュールで、特定のモジュールのみPHPMailer SMTPを使用するよう設定できます。例えば、Webformのメールのみ外部SMTPで送信するといった使い分けが可能です。
  • HTMLメールのテンプレートをカスタマイズするには、テーマのtemplatesフォルダにphpmailer-smtp.html.twigをコピーして編集してください。
  • トランザクションメール(パスワードリセット等)とマーケティングメールで異なるSMTPサーバーを使用したい場合は、複数のメールシステムモジュールを組み合わせてください。

Technical Details

Admin Pages 2
PHPMailer SMTP transport settings /admin/config/system/phpmailer-smtp

SMTPサーバーの接続設定、認証情報、詳細オプションを設定する画面です。テストメールの送信もここから行えます。

PHPMailer SMTP message format /admin/config/system/phpmailer-smtp/format

メールの形式(プレーンテキスト/HTML)を設定する画面です。

権限 1
PHPMailer SMTP設定の管理

PHPMailer SMTPモジュールの設定画面にアクセスできます。SMTPサーバーの認証情報を含むため、信頼できる管理者にのみ付与してください。

Hooks 1
hook_phpmailer_oauth2_info_alter

PHPMailer OAuth2プラグイン定義を変更するためのフック

Troubleshooting 6
SMTP -> ERROR: Failed to connect to server: Connection timed out (110) / SMTP Error: Could not connect to SMTP host.

メールサーバーに到達できません。ホスティングプロバイダーがファイアウォールでポートをブロックしている可能性があります。プロバイダーに連絡して、指定したSMTPサーバーへの送信接続を許可するよう依頼してください。

SSL証明書エラーが発生する

高度なSSL設定で「ピアを検証」「ピア名を検証」を無効にするか、「自己署名を許可」を有効にしてください。ただし、これらはセキュリティリスクがあるため、本来はSSL証明書を修正するか、別のSMTPサーバーを使用することを推奨します。

PHPMailerライブラリが見つからない

composer updateを実行してPHPMailerライブラリをインストールしてください。Composerが使用できない場合は、Ludwigモジュールを使用してライブラリを管理できます。

Google Mailで送信者が上書きされる

高度なSMTP設定で「常にReply-Toアドレスを設定」を有効にしてください。Google Mailは元の送信者を上書きするため、この設定により返信先が正しく保持されます。

メール送信の詳細なエラー情報が見たい

高度なSMTP設定でデバッグレベルを「サーバー応答」または「完全な通信」に設定し、「デバッグ出力をDrupalログに記録」を有効にしてください。レポート > 最近のログメッセージでSMTP通信の詳細を確認できます。

PHPMailer 7.0.0以上が必要というエラー

composer update phpmailer/phpmailerを実行して、PHPMailerライブラリを最新バージョンに更新してください。

Security Notes 4
  • SMTPパスワードはデータベースに保存されます。「パスワードを非表示にする」オプションを有効にすると、管理画面での平文表示を防げますが、データベースには依然として保存されます。より安全な方法として、settings.phpでの設定オーバーライドを検討してください。
  • 「administer phpmailer smtp settings」パーミッションはSMTPサーバーの認証情報へのアクセスを許可するため、信頼できる管理者にのみ付与してください。
  • 高度なSSL設定で検証を無効にすると、中間者攻撃のリスクが高まります。本番環境では適切に設定されたSSL証明書を使用し、検証を有効にしてください。
  • デバッグ出力にはメール本文が含まれる場合があり、パスワードリセットメールなどの機密情報が記録される可能性があります。本番環境ではデバッグを無効にしてください。