Drupal Symfony Mailer Lite
Symfony Mailerライブラリを活用し、SMTP、Sendmail、カスタムDSN設定など様々なトランスポート方式でHTMLおよびプレーンテキストメールを送信する軽量なメール送信モジュールです。
symfony_mailer_lite
インストール
composer require 'drupal/symfony_mailer_lite:^2.0'
概要
Drupal Symfony Mailer Liteは、非推奨となったSwiftmailerモジュールを置き換える、Drupal向けの最新のメール送信ソリューションです。Symfony Mailerコンポーネントを使用して、複数のトランスポートメカニズムをサポートする信頼性の高いメール配信を提供します。
このモジュールは、メールトランスポートの設定、メッセージフォーマットオプション、メール配信テストのためのクリーンな管理インターフェースを提供します。CssToInlineStylesライブラリを使用した自動CSSインライン化によるHTMLメール、Html2Textを使用したプレーンテキスト代替版の自動生成、メールコンテンツ内への画像埋め込みをサポートしています。
主な機能には、複数のトランスポート設定(SMTP、Sendmail、ネイティブPHP mail、DSN、テスト用Null)、Twigによるテーマ対応メールテンプレート、MimeMailモジュール互換のファイル添付サポート、柔軟なメールルーティングのためのMail Systemモジュールとのシームレスな統合が含まれます。
Features
- 複数のメールトランスポートオプション:TLS/SSLサポート付きSMTP、Sendmail、ネイティブPHP mail関数、カスタムDSN文字列、開発/テスト用Nullトランスポート
- 自動CSSインライン化付きHTMLメールサポート - 外部CSSスタイルシートをインラインスタイルに変換し、メールクライアントの互換性を向上
- Html2Textライブラリを使用してHTMLコンテンツからプレーンテキスト代替版を自動生成し、HTMLをサポートしないメールクライアントに対応
- 埋め込み画像サポート - セキュリティ検証付きの'image:path'構文を使用してメールに直接画像を埋め込み可能
- モジュール固有およびキー固有のテンプレートオーバーライドをサポートするTwigによるテーマ対応メールテンプレート
- ネイティブ形式とMimeMail添付形式の両方に対応したファイル添付サポート
- デフォルトトランスポートの設定とメッセージごとのトランスポート切り替えが可能な複数トランスポート管理
- トランスポート設定が正しく機能しているか確認するためのテストメール機能
- Swiftmailerモジュールからの移行サポート - インストール時に既存のSwiftmailer設定を自動インポート
- UTF-8、ISO-8859-x、アジア文字セットなど多数の文字エンコーディングをサポートする文字セット設定
- 柔軟なメールフォーマッターおよび送信者設定のためのMail Systemモジュールとの統合
Use Cases
SMTP経由でトランザクションメールを送信
メールプロバイダーの認証情報(SendGrid、Mailgun、Amazon SES、または独自のSMTPサーバーなど)でSMTPトランスポートを設定します。デフォルトとして設定し、Mail Systemで目的のモジュールにsymfony_mailer_liteを使用するよう設定します。すべての送信メールは、適切な認証とTLS暗号化を使用してSMTPサーバー経由で送信されます。
インラインCSSスタイリング付きHTMLメール
テーマにsymfony-mailer-lite-email--mymodule.html.twigとしてカスタムメールテンプレートを作成します。テーマのlibraries.ymlにCSSファイルを含むライブラリ定義を追加します。theme.info.ymlでライブラリを参照します。モジュールは自動的にライブラリからCSSを取得し、メールクライアントの互換性を最大化するためにインライン化します。
HTMLメールへの画像埋め込み
メール本文コンテンツで、特別な'image:'プレフィックスを使用して画像を参照します:<img src="image:/sites/default/files/logo.png">。モジュールは画像がpublicファイルディレクトリに存在することを検証し、CID添付として埋め込み、srcを適切なcid:参照に置き換えます。
メール無効化の開発環境
開発環境でNullトランスポートを追加し、デフォルトとして設定します。すべてのメールは処理されますが実際には送信されないため、実際のメッセージを送信せずにメール生成をテストできます。ログを確認してメール内容を検証します。
サードパーティのSymfony Mailerトランスポートを使用
Mailchimp Transactional、Postmark、またはSymfony Mailerパッケージを持つ他のプロバイダーの場合、Composer経由でパッケージをインストールし、適切なDSN文字列(例:'postmark://ID@default')でDSNトランスポートタイプを使用します。これにより、Symfony Mailerエコシステム全体にアクセスできます。
プログラムでメールに添付ファイルを追加
hook_symfony_mailer_lite_attach()を実装して、送信メールにファイル添付を追加します。uri、filename、filemimeプロパティを持つファイルオブジェクトの配列を返します。または、MailManager::mail()を呼び出す際に$params['files']または$params['attachments']配列で添付ファイルを渡します。
Swiftmailerからの移行
Swiftmailerがまだインストールされている状態でSymfony Mailer Liteをインストールして有効化するだけです。モジュールはSwiftmailerのトランスポート設定(SMTPまたはSendmail)とメッセージ設定を自動的にインポートします。その後、Mail Systemをswiftmailerの代わりにsymfony_mailer_liteを使用するよう更新し、最後にSwiftmailerをアンインストールします。
メールごとにトランスポートを指定
プログラムでメールを送信する際、メッセージ配列に'symfony_mailer_lite_transport'キーとトランスポートIDを追加することで、異なるトランスポートを指定できます。これにより、特定のメールを異なるトランスポート経由でルーティングできます(例:トランザクションメールとマーケティングメール)。
Tips
- 重要なメールに依存する前に、テストページを使用してトランスポート設定を確認してください
- 開発時は、メール生成のテスト中に誤ってメールを送信しないようにNullトランスポートを使用してください
- 認証付きSMTPを使用する場合、認証情報を安全に保管し、settings.phpのオーバーライドを通じて環境変数の使用を検討してください
- 他のモジュールのメールの外観に影響を与えずに異なるモジュールからのメールをカスタマイズするために、モジュール固有のメールテンプレートを作成してください
- モジュールは非同期メール送信のためにSymfony Messengerコンポーネントをサポートしています - 高トラフィックサイトにはsymfony/messengerをインストールしてください
- テストメール送信後、配信成功の確認や問題の診断のためにDrupalの最近のログメッセージを確認してください
- メールクライアントの互換性を最大化するために、HTMLメールはシンプルに保ち、複雑なレイアウトよりもCSSインライン化機能に頼ってください
Technical Details
Admin Pages 4
/admin/config/system/symfony-mailer-lite/transport
メールトランスポートを管理するためのメイン管理ページです。設定されたすべてのトランスポートのタイプ、ラベル、デフォルトステータスを一覧表示します。新しいトランスポートの追加、既存のトランスポートの編集、トランスポートのデフォルト設定、デフォルト以外のトランスポートの削除が可能です。
/admin/config/system/symfony-mailer-lite/transport/add/{plugin_id}
新しいメールトランスポートを追加するためのフォームです。利用可能なフィールドは選択したトランスポートタイプによって異なります。
/admin/config/symfony-mailer-lite/message-settings
コンテンツタイプ、テキストフォーマット変換、プレーンテキスト生成、文字セットなどのデフォルトメッセージフォーマットオプションを設定します。
/admin/config/system/symfony-mailer-lite/test
メールトランスポートが正しく設定されているか確認するためにテストメールを送信します。
権限 1
Hooks 2
hook_symfony_mailer_lite_attach
モジュールが送信メールにファイル添付を追加できるようにします。送信前のmail()メソッド中に呼び出されます。
hook_symfony_mailer_lite_transport_info_alter
モジュールがキャッシュされる前のトランスポートプラグイン定義を変更できるようにします。
Troubleshooting 6
デフォルトトランスポートが設定されていることを確認してください。/admin/config/system/symfony-mailer-lite/transportに移動し、少なくとも1つのトランスポートが'デフォルト'としてマークされていることを確認します。また、Mail Systemが送信モジュールにsymfony_mailer_liteを使用するよう設定されていることを確認してください。
ユーザー名とパスワードが正しいことを確認してください。一部のプロバイダーはアプリ固有のパスワードを要求します。SMTPサーバーが特定のポートを要求するかどうかを確認してください(TLSの場合587、SSLの場合465、暗号化なしの場合25)。自己署名証明書のデバッグのため、一時的にTLSピア検証を無効にしてください。
テーマがCSSファイルを含む'symfony_mailer_lite'ライブラリを定義していることを確認してください。ライブラリ名は正確に'themename/symfony_mailer_lite'と一致する必要があります。このライブラリのCSSは自動的にHTMLメールにインライン化されます。
画像はpublicファイルディレクトリ内にある必要があります。リモート画像やpublicディレクトリ外の画像はセキュリティ上の理由で拒否されます。検証エラーについてはDrupalログを確認してください。画像パスが正しい形式を使用していることを確認してください:image:/path/to/file.png
メッセージ設定で'代替プレーンテキスト版を生成'が有効になっていることを確認してください。これにはhtml2text/html2text Composerパッケージが必要です。メールがHTML(text/htmlコンテンツタイプ)として送信されていることを確認してください。
このエラーは、アクティブなトランスポートが存在しないか、デフォルトトランスポートが削除された場合に表示されます。新しいトランスポートを作成し、デフォルトとして設定してください。トランスポートが存在する場合、それらが有効であり、symfony_mailer_lite.settings内のdefault_transport設定が有効なトランスポートIDを指していることを確認してください。
Security Notes 6
- 'administer symfony_mailer_lite configuration'権限は、SMTP認証情報を含むメールトランスポート設定の機密性のため、'アクセス制限'としてマークされています
- SMTPパスワードは設定に保存され、設定エクスポート権限を持つユーザーに見える可能性があります
- 埋め込み画像は、パストラバーサル攻撃を防ぐためにpublicファイルディレクトリ内に存在することが検証されます
- Sendmailトランスポートは、コマンドインジェクション攻撃を防ぐためにコマンドを検証します
- SMTP接続ではTLSピア検証がデフォルトで有効です - 自己署名証明書を使用する開発環境でのみ無効にしてください
- エクスポート可能な設定に保存する代わりに、SMTP認証情報には環境固有のsettings.phpオーバーライドの使用を検討してください