templated_emailを使ったInterSystems IRISでの動的テンプレートメール
メール送信は、統合シナリオでは一般的な要件です。クライアントへのリマインダー、自動レポート、トランザクション確認などに使用されます。 固定メッセージは、管理やパーソナライズが難しくなりがちです。 そこで登場するのが templated_email モジュールです。InterSystems IRIS InteroperabilityをJinja2テンプレートの機能を組み合わせます。
メール作成でJinja2を選ぶ理由
Jinja2はPythonエコシステムで人気のあるテンプレートエンジンで、完全に動的なコンテンツ生成を可能にします。 次をサポートします:
- 変数 — 統合メッセージや外部ソースから動的にデータを取り込みます
- 条件(if/else)— ランタイムデータに基づいてコンテンツを変更します
- ループ(for)— テーブル、項目リスト、反復セクションを生成します
- フィルターとマクロ — 日付や数字のフォーマット、テンプレートブロックを再利用します
簡単なメール本文テンプレートの例:
Hello {{ user.name }}!
{% if orders %}
You have {{ orders|length }} new orders:
{% for o in orders %}
- Order #{{ o.id }}: {{ o.amount }} USD
{% endfor %}
{% else %}
You have no new orders today.
{% endif %}
このアプローチにより、メールコンテンツは動的かつ再利用可能になり、管理も簡単になります。
メールのスタイリングとレンダリングの考慮事項
異なるメールクライアント(Gmail、Outlook、Apple Mailなど)では、同じHTMLでも表示がわずかに異なる場合があります。 プラットフォーム間で一貫性のある見た目を実現するには、次が推奨されます。
- 外部スタイルシートに依存する代わりにインラインCSSを使用する
- 全体的な構造には、テーブルベースのレイアウトを使用する。flexboxやgridなどの最新CSS機能は、完全にサポートされない場合があります。
- 多くのメールクライアントはスクリプトや複雑なCSSルールをブロックまたは無視するため、使用を避ける
- 複数のクライアントとモバイルデバイスでメールをテストする
templated_emailモジュールの機能
templated_emailモジュールは、InterSystems IRISで動的かつプロ仕様のメールを手軽に作成・送信できるように設計されています。 主な機能には次が含まれます。
- Jinja2テンプレートをレンダリングして動的なメールコンテンツを生成
- 柔軟な使用方法 — Interoperability本番環境からも、ObjectScriptコードからも使用できます
- 組み込みのBusiness Operation — SMTP統合による本番環境シナリオですぐに使用できます
- 自動インラインスタイリング — CSSスタイルをインライン属性に変換し、メールクライアントとの互換性を改善します
- Markdownのサポート — 送信前にHTMLにレンダリングされる、クリーンで管理しやすいテンプレートを作成できます
これらの機能により、動的で適切にフォーマットされたメールを簡単に作成でき、どのクライアントでも一貫して表示されます。
templated_emailモジュール
モジュールは以下の主なコンポーネントを提供します。
- TemplatedEmail.BusinessOperation — SMTP経由でテンプレートメールを送信するBusiness Operation
- TemplatedEmail.EmailRequest — テンプレート、データ、受信者のフィールドを含むメール送信をトリガーするInteroperabilityメッセージ
- TemplatedEmail.MailMessage — %Net.MailMessageの拡張機能は次を追加します。
- applyBodyTemplate() — Jinja2 + Markdownテンプレートを使用してメール本文をレンダリングして設定します
- applySubjectTemplate() — Jinja2テンプレートを使用してメール件名をレンダリングして設定します
これにより、ObjectScriptで%Net.MailMessageをTemplatedEmail.MailMessageに置き換えて、動的テンプレート機能を利用できます。
set msg = ##class(TemplatedEmail.MailMessage).%New()
do msg.applySubjectTemplate(data,"New order from {{ customer.name }}")
do msg.applyBodyTemplate(data,,"order_template.tpl")
詳細と使用例は、Githubリポジトリで確認できます。
テンプレートはメールのためだけではありません
テンプレートのレンダリングメソッドはHTMLレポートの生成にも利用できるため、メール以外の用途でも同じテンプレートメソッドを簡単に再利用できます。
templated_emailは、Jinja2テンプレートの柔軟性を活用しながら、InterSystems IRIS向けに動的かつプロ仕様で保守性の高いメールを作成できます。