SMTP認証サポート

デフォルトのPHP mail()関数を使用する代わりに、外部SMTPサーバーを通じてDrupalからメールを送信できるようにします。

smtp
130,823 sites
111
drupal.org
Drupal 8 Drupal 9 Drupal 10 Drupal 11

インストール

Drupal 11, 10, 9 v8.x-1.4
composer require 'drupal/smtp:8.x-1.4'
Drupal 8 v8.x-1.2
composer require 'drupal/smtp:8.x-1.2'

概要

SMTP Authentication Supportモジュールは、デフォルトのPHP mail()関数を使用する代わりに、選択したSMTPサーバーに直接メールを送信できるようにします。これは、送信メールに認証付きSMTPが必要なサイトや、PHP mail()が信頼性に欠けるか利用できない環境でホストされているサイトにとって不可欠です。

このモジュールはPHPMailerライブラリと統合し、SSL/TLS暗号化、認証、HTMLメール、ファイル添付、バックアップSMTPサーバーをサポートする堅牢なメール配信機能を提供します。管理インターフェースまたはsettings.phpを通じて環境固有のデプロイメント用に設定できます。

主な機能には、接続テスト、開発環境向けのメール転送、設定可能なログレベル、バッチ操作用のSMTPキープアライブ、自動TLSネゴシエーションがあります。また、Drupal 7からの移行サポートを提供し、高度なメールルーティングシナリオ向けにMail Systemモジュールと統合します。

Features

  • オプションの認証付きで外部SMTPサーバーを通じてすべてのサイトメールを送信
  • 自動TLSネゴシエーション付きSSLおよびTLS暗号化プロトコルのサポート
  • フェイルオーバーシナリオ用のバックアップSMTPサーバー設定
  • 自動プレーンテキスト変換付きHTMLメールサポート
  • SMTP経由で送信されるメールのファイル添付処理
  • すべての送信メールをテストアドレスにリダイレクトするメール転送機能
  • SMTPサーバー接続を確認する組み込み接続テスト
  • トラブルシューティング用の設定可能なログレベル(EmergencyからDebugまで)
  • バッチメール操作用の永続的な接続を維持するSMTPキープアライブオプション
  • settings.phpオーバーライドによる環境固有の設定
  • 詳細なSMTPサーバー応答ログ付きデバッグモード
  • 高度なメールルーティング用のMail Systemモジュールとの統合
  • Drupal 7 SMTPモジュール設定からの移行パス
  • SMTP操作用の設定可能なタイムアウト設定
  • SMTPハンドシェイク用のカスタムホスト名とHELO文字列設定

Use Cases

Gmail経由でメールを送信

送信メール用にGmailのサーバーを使用するようにSMTPを設定します。smtp.gmail.comをサーバーとして、ポート587とTLSプロトコル、およびGmailの認証情報を使用します。注意: Gmailは新しいアカウントにOAuth2を要求しますが、これは現在このモジュールでサポートされていません。サポートされているアカウントでは、「安全性の低いアプリのアクセス」を有効にするか、アプリパスワードを使用する必要がある場合があります。

Office 365 / Exchange Onlineとの統合

MicrosoftのOffice 365 SMTPサーバー経由でメールを送信します。smtp.office365.comをサーバーとして、ポート587とTLS、およびOffice 365のメールとパスワードを使用します。注意: 送信元表示名フィールドはOffice 365で無視される場合があります。

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

転送アドレス機能を使用して、テスト中にすべての送信メールを開発者のアドレスにリダイレクトします。これにより、メール機能のテストを可能にしながら、実際のユーザーへの誤送信を防ぎます。

大量メール送信

バッチメール(ニュースレター、通知)を送信する際にSMTPキープアライブ機能を有効にして、永続的な接続を維持し、繰り返しの接続オーバーヘッドを回避してパフォーマンスを向上させます。

安全な認証情報管理

データベースではなく環境変数を使用してsettings.phpにSMTP認証情報を保存します。これにより、機密性の高いパスワードを設定エクスポートから除外し、環境ごとに異なる認証情報を使用できます。

GoDaddy共有ホスティング

ファイアウォール制限のあるGoDaddy共有ホスティング環境では、localhostをSMTPサーバーとして、ポート25、暗号化なし、認証なしで使用して、GoDaddyのローカルメールリレーを利用します。

接続テストと診断

デプロイ前にテストタブを使用してSMTP接続を確認します。接続の問題をトラブルシューティングするために、デバッグモードを有効にして詳細なSMTPサーバー応答を確認します。

Tips

  • セキュリティ向上のために環境変数を使用してsettings.phpにSMTP認証情報を保存します: $config['smtp.settings']['smtp_password'] = getenv('SMTP_PASSWORD');
  • 実際のユーザーへのメール送信を防ぐために、開発環境では転送アドレス機能を使用します
  • バッチメール送信時にパフォーマンスを向上させるためにキープアライブを有効にします
  • 本番環境ではログレベルをErrorに、トラブルシューティング時のみDebugに設定します
  • バックアップサーバーは、認証が失敗した場合ではなく、プライマリサーバーのホスト名が解決できない場合にのみ試行されます
  • 最新のメールプロバイダーではAuto TLSを有効にし、暗号化なしの単純なリレーサーバーでは無効にします
  • 本番稼働前にテストタブを使用してSMTP設定をテストします
  • ステータスレポートでSMTP接続ステータスとPHPMailerバージョン情報を確認します

Technical Details

Admin Pages 2
SMTP Authentication Support /admin/config/system/smtp

SMTPモジュールのメイン設定ページ。SMTPサーバー設定、認証情報、メールオプション、デバッグ機能を設定します。すべての設定は、環境固有の設定のためにsettings.phpでオーバーライドできます。

SMTPテスト /admin/config/system/smtp/test

SMTP設定が正しく機能していることを確認するためにテストメールを送信します。本番環境にデプロイする前に設定を検証するのに便利です。

権限 1
SMTP Authentication Supportモジュールを管理

ユーザーがSMTP設定を構成し、デバッグ情報を表示し、テストメールを送信できるようにします。この権限は、機密性の高いメールサーバーの認証情報へのアクセスを提供するため、信頼できる管理者に制限する必要があります。

Hooks 6
hook_mail

設定ページからテストメールを送信するために使用されるsmtp-testメールキーを定義するためにhook_mail()を実装します。

hook_modules_installed

mailsystemモジュールがインストールされたときにSMTPメールシステムを無効にします。mailsystemがメールルーティングを引き継ぐためです。

hook_migration_plugins_alter

適切なDrupal 7移行サポートのために、d7_system_mail移行にSmtpMailSystemからSMTPMailSystemへのマッピングを追加します。

hook_help

設定とヘルプトピックへのリンクを含むSMTPモジュールのヘルプテキストを提供します。

hook_requirements

PHPMailerライブラリの存在、バージョン互換性、SMTP接続ステータスを含むランタイム中のSMTP要件をチェックします。

hook_uninstall

モジュールがアンインストールされたときにSMTP設定をクリーンアップし、以前のメールシステムを復元します。

Troubleshooting 8
PHPMailerライブラリがないか、バージョンが間違っている

「composer require phpmailer/phpmailer:6.6.3」を実行して正しいバージョンをインストールします。ステータスレポートにPHPMailerのバージョンと場所が表示されます。

SSL/TLSオプションが設定フォームに表示されない

PHPのopenssl拡張機能がインストールされていないか、有効になっていません。opensslをインストールしてWebサーバーを再起動してください。

Gmailでの認証エラー

Gmailはほとんどのアカウントでoauth2を要求します。2FAが有効な場合はアプリパスワードを使用するか、代わりにトランザクションメールサービスの使用を検討してください。

メールが送信されないがエラーも表示されない

SMTP設定でデバッグモードを有効にし、ログレベルをDebugに設定します。テストメールを送信し、最近のログメッセージで詳細なSMTPサーバー応答を確認します。

GoDaddyホスティングでの接続タイムアウト

GoDaddy共有ホスティングは外部SMTP接続をブロックすることが多いです。localhostサーバーとポート25、暗号化なし、認証なしで使用して、GoDaddyのローカルメールリレーを利用します。

デバッグ有効時にフォームとAJAXが壊れる

SMTPデバッグはHTTP応答を中断します。手動のテストメールでのみデバッグを有効にし、その後すぐに無効にしてください。

フォームで設定が無効に見える

settings.phpで設定がオーバーライドされています。フォームはそのようなフィールドの説明に「(オーバーライド済み)」プレフィックスを表示します。

SMTPが有効なのにメールがまだPHP mail()を使用している

Mail Systemモジュールがインストールされているか確認してください - それがメールルーティングを引き継ぎます。代わりにMail System設定でSMTPを送信者として設定してください。

Security Notes 6
  • SMTPパスワードはDrupal設定にプレーンテキストで保存されます - 本番環境では環境変数を使用したsettings.phpオーバーライドを使用してください
  • 「administer smtp module」権限は信頼できる管理者のみに制限する必要があります
  • 本番サイトには専用のトランザクションメールサービス(SendGrid、Mailgun、Amazon SES)の使用を検討してください
  • 転送中の認証情報を保護するために、可能な限りTLS暗号化を有効にしてください
  • 詳細なサーバー通信が公開されるため、本番環境ではデバッグを有効にしないでください
  • 認証情報を保存する場合は、settings.phpのファイル権限を制限してください(444または400)