PHPMailer SMTP
PHPMailerライブラリを使用して、SMTP経由でメールを送信するDrupalモジュールです。
phpmailer_smtp
インストール
composer require 'drupal/phpmailer_smtp:^2.4'
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
/admin/config/system/phpmailer-smtp
SMTPサーバーの接続設定、認証情報、詳細オプションを設定する画面です。テストメールの送信もここから行えます。
/admin/config/system/phpmailer-smtp/format
メールの形式(プレーンテキスト/HTML)を設定する画面です。
権限 1
Hooks 1
hook_phpmailer_oauth2_info_alter
PHPMailer OAuth2プラグイン定義を変更するためのフック
Troubleshooting 6
メールサーバーに到達できません。ホスティングプロバイダーがファイアウォールでポートをブロックしている可能性があります。プロバイダーに連絡して、指定したSMTPサーバーへの送信接続を許可するよう依頼してください。
高度なSSL設定で「ピアを検証」「ピア名を検証」を無効にするか、「自己署名を許可」を有効にしてください。ただし、これらはセキュリティリスクがあるため、本来はSSL証明書を修正するか、別のSMTPサーバーを使用することを推奨します。
composer updateを実行してPHPMailerライブラリをインストールしてください。Composerが使用できない場合は、Ludwigモジュールを使用してライブラリを管理できます。
高度なSMTP設定で「常にReply-Toアドレスを設定」を有効にしてください。Google Mailは元の送信者を上書きするため、この設定により返信先が正しく保持されます。
高度なSMTP設定でデバッグレベルを「サーバー応答」または「完全な通信」に設定し、「デバッグ出力をDrupalログに記録」を有効にしてください。レポート > 最近のログメッセージでSMTP通信の詳細を確認できます。
composer update phpmailer/phpmailerを実行して、PHPMailerライブラリを最新バージョンに更新してください。
Security Notes 4
- SMTPパスワードはデータベースに保存されます。「パスワードを非表示にする」オプションを有効にすると、管理画面での平文表示を防げますが、データベースには依然として保存されます。より安全な方法として、settings.phpでの設定オーバーライドを検討してください。
- 「administer phpmailer smtp settings」パーミッションはSMTPサーバーの認証情報へのアクセスを許可するため、信頼できる管理者にのみ付与してください。
- 高度なSSL設定で検証を無効にすると、中間者攻撃のリスクが高まります。本番環境では適切に設定されたSSL証明書を使用し、検証を有効にしてください。
- デバッグ出力にはメール本文が含まれる場合があり、パスワードリセットメールなどの機密情報が記録される可能性があります。本番環境ではデバッグを無効にしてください。