-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Labels
DesignDesign and WordPress editor related.Design and WordPress editor related.Mail APIFeatureFeature
Description
概要
現在 hamail では、SendGrid の レガシーテンプレートを使用し、WordPress 投稿本文中の <%body%> をテンプレートに差し込むことで HTML メールを構築している。
この実装は将来的に非推奨となる可能性があり、以下の理由から ダイナミックテンプレートへの移行を検討したい:
- SendGrid公式が推奨するのはダイナミックテンプレートであり、今後の機能追加もこちらに集中している
setAsm()等の高度なパーソナライズ機能がレガシーでは不安定- Handlebars によるテンプレート構築で構造が明確になる
- プレースホルダーによるパーソナライズを WordPress 上で柔軟に定義可能
現状の問題点
- レガシーテンプレートでは
-name-等の独自プレースホルダーをaddSubstitution()によって置き換えている <%body%>に全文が差し込まれる構成のため、テンプレート管理がしにくい- ASM(配信停止グループ)や click/open tracking などとの互換性に問題がある場合がある
実装方針(案)
-
SendGrid ダッシュボード上で、以下のようなダイナミックテンプレートを作成:
<html> <body> {{{body}}} <p><a href="{{unsubscribe}}">配信停止</a></p> </body> </html>
-
WordPress 投稿本文(
$post->post_content)には Handlebars 構文の変数を含める形式に変更:{{name}} 様 あなたの最近公開した作品 {{latest_work}} が人気です。 アクセス解析はこちら → {{author_stats}} -
PHP側の送信処理で以下のように
addDynamicTemplateData()を使って変数を渡す:$mail->setTemplateId('d-xxxxxxxx...'); $mail->addDynamicTemplateData('body', $post->post_content); $mail->addDynamicTemplateData('name', $recipient['name']); $mail->addDynamicTemplateData('latest_work', $recipient['latest_work']); $mail->addDynamicTemplateData('author_stats', $recipient['author_stats']);
移行のメリット
- SendGridの推奨方式に準拠
- プレースホルダーの再利用性・テンプレートの可読性向上
- WordPress内での「テンプレートとしての本文編集」が可能に(=投稿画面で変数を直接記述できる)
影響範囲
- 送信テンプレートIDの管理方式(固定IDをオプションで指定?)
addSubstitution()に依存しているコード全般- HTML出力時の
str_replaceベースのテンプレート構築ロジック
残課題
- エスケープ処理の整理(
{{{body}}}を使うことで非エスケープ出力だが、XSS には注意) - 現在の設定画面との整合性
- 移行時の互換モードの要否(旧テンプレートも残す?)
備考
SendGrid 公式ドキュメント:
📘 https://docs.sendgrid.com/ui/sending-email/how-to-send-an-email-with-dynamic-transactional-templates
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
DesignDesign and WordPress editor related.Design and WordPress editor related.Mail APIFeatureFeature