コンテンツにスキップ

メールテンプレート運用

概要

Vendure EmailPlugin のメールテンプレートを共通仕様で管理し、言語別テンプレートを扱えるようにします。テンプレートはすべて MJML で統一し、共通のヘッダー/フッターを利用します。

テンプレート配置

  • ルート: apps/vendure-server/static/email/templates/
  • 種別ごとのテンプレート: apps/vendure-server/static/email/templates/<type>/
  • 共通パーシャル: apps/vendure-server/static/email/templates/partials/

実装済みテンプレート一覧

イベント ハンドラー名 テンプレートディレクトリ 概要
注文確定 orderConfirmationHandler order-confirmation 注文完了時に送信される確認メール
メールアドレス確認 emailVerificationHandler email-verification 会員登録時のアドレス有効性確認
パスワードリセット passwordResetHandler password-reset パスワード忘失時の再設定用リンク
アドレス変更確認 emailAddressChangeHandler email-address-change メールアドレス変更時の確認
パスワード発行 passwordIssuedHandler password-issued 管理者によるパスワード手動発行通知
注文キャンセル orderCancelledHandler order-cancelled 注文がキャンセルされた際の通知
会員情報変更 customerProfileUpdatedHandler customer-updated プロフィール情報が変更された際のセキュリティ通知
会員登録完了 registrationCompletedHandler registration-completed アドレス確認後の本登録完了通知
出荷完了 shipmentCompletedHandler shipping-completed 商品発送時の通知(追跡番号含む)
ログイン失敗 loginFailureHandler login-failure 管理者へのログイン失敗通知(セキュリティ通知)
共通ヘッダー partial: header partials/header.hbs 全メール共通のヘッダー partial (DB 編集可)
共通フッター partial: footer partials/footer.hbs 全メール共通のフッター partial (DB 編集可)

言語別テンプレート

  • body.hbs (デフォルト/日本語) を用意する
  • 必要に応じて body.en.hbs 等を追加可能(LanguageAwareTemplateLoader により自動解決)

共通仕様

  • すべてのメールは MJML で統一する
  • {{> header }} / {{> footer }} を共通利用する
  • 件名は apps/vendure-server/src/vendure-config.shared.ts で統一管理する
  • テンプレートプレビューの件名は @ritsubi/plugins 内の EmailPreviewService と同期する

Vendure Dashboard 編集

  • 管理画面(Vendure Dashboard)の メールテンプレート から本文・件名を編集可能(EmailPreviewPlugin による拡張)。
  • 変更内容は DB に保存され、送信時は DB の内容が優先 される。
  • 保存済みの内容はプレビューとテスト送信で確認できる。
  • 編集対象は typelanguageCode の組み合わせ(既定は ja)。
  • 部分テンプレート(header / footer partial)も DB を SSOT として管理する。 DB に保存が無い場合は apps/vendure-server/static/email/templates/partials/ のファイルへ fallback する (DbAwareTemplateLoader)。初期値は migration 20260520110000_seed_email_partial_templates.ts で seeding 済み。
  • 画面の閲覧は ReadSettings、保存/テスト送信は UpdateSettings が必要。
  • 各テンプレート種別に応じたテンプレートヒント (TEMPLATE_HINTS_BY_TYPE / packages/plugins/src/standard-extensions/admin-extensions/dashboard/email-templates/email-template-detail.helpers.ts) を編集画面から挿入できる。header / footer partial も含めて全種別で利用可能なヒントが整備されている。
  • 注文確認メールのお客様番号は {{ order.customer.customFields.customerCode }} を使う。プレビュー用の buildTemplateVars() も同じ path にサンプル値を持つため、編集画面のプレビューとテスト送信で解決確認できる。

アーキテクチャ

メール関連のコアロジックは @ritsubi/plugins に集約されています。

  • DbAwareTemplateLoader: DB に保存されたカスタムテンプレートを優先し、存在しない場合にファイルから読み込むフォールバックロジックを提供します。 header / footer partial も同じ仕組みで DB → ファイル fallback の順に解決されます。
  • JapaneseHandlebarsMjmlGenerator: MJML のコンパイルと Handlebars ヘルパー(formatDate 等)を提供します。
  • EmailPreviewPlugin: 管理画面向けのプレビュー・編集 API を提供します。

多言語対応の方針

  • 言語ごとのテンプレートファイルを追加するだけで拡張可能
  • 既定言語は日本語とする