メールテンプレートをカスタマイズする

メールをカスタマイズできるようにするには、サードパーティサービス(Amazon SES、Mandrill、SendGrid、SparkPost、Mailgun、またはカスタムSMTPプロバイダーなど)を使って、自分のメールプロバイダーを構成する必要があります。詳細については、「外部SMTPプロバイダーを構成する」をお読みください。

Auth0では、DashboardでHTMLベースのメールをカスタマイズするほか、Liquidを使って一部のコンテキスト属性を含むテンプレートを作成することができます。詳細については、「メールテンプレートでのLiquid構文の使用」をお読みください。これには、現在のアプリケーションまたはユーザーのコンテキストへの参照を含むことができます。

テンプレートタイプごとに使用できるテンプレートは1つのみです。プレーンテキスト/テキストベースのメールはサポートされていません。

メールテンプレートごとに[From Address(差出人アドレス)][Subject(件名)][Message(メッセージ)]本文をカスタマイズできます。Liquid構文を使ってコンテンツを動的に生成し、多数のコンテキスト変数にアクセスすることができます。メールメッセージの作成時に、これらの変数は関連する値に置き換えられます。

共通変数

[From Address(差出人アドレス)][Subject(件名)][Message(メッセージ)]フィールドでLiquid構文を使用する場合、以下の共通変数にアクセスできます。

  • applicationオブジェクト。以下に挙げた標準クライアントプロパティにアクセスできます。

    • application.name

    • application.clientID

    • application.metadata

  • connection.name[Multi-factor Enrollment Email(多要素登録メール)]の場合を除く)

  • userオブジェクト。以下に挙げたプロパティにアクセスできます。

    • user.email

    • user.email_verified

    • user.picture

    • user.nickname

    • user.given_name

    • user.family_name

    • user.name

    • user.app_metadata - ユーザーのサポートプランやセキュリティロール、アクセス制御グループといった情報を格納します。これらの情報は、アプリケーションの機能の仕組みやユーザーがアクセスできる対象など、ユーザーのコア機能に影響を与える可能性があります。

    • user.user_metadata - ユーザーのコア機能に影響しないユーザー属性(ユーザー設定など)を格納します。

  • テナント関連情報([Tenant Settings(テナント設定)]で定義

    • tenant - 未加工のテナント名

    • friendly_name

    • support_email

    • support_url

以下のメールテンプレートは、組織のためにさらにカスタマイズすることができます。

  • Welcome(ようこそ):エンドユーザーのメールアドレスが検証された後、またはメール検証が無効の場合にはサインアップ(または初めてログイン)したときに、エンドユーザーが受信します。

  • Password Change(パスワード変更):エンドユーザーがパスワードの変更を要求した際に受信します。パスワードリセットページにリダイレクトするリンクが含まれています。

  • Blocked Account(アカウントのブロック):ユーザーが同じIPアドレスから10回以上ログインしようとして失敗したときに、エンドユーザーが受信します。

  • Breached Password Alerts(侵害されたパスワードアラート):サードパーティーによって漏洩したパスワードを使ってアプリケーションにアクセスしようとしていることがAuth0で検出されるときに、エンドユーザーが受信します。

  • Invite User(ユーザー招待):エンドユーザーが組織に招待された際に受信します。カスタム招待ページにリダイレクトするリンクが含まれています。詳細については、「組織メンバーを招待する」を参照してください。

ユーザーが組織からログインするときは、このほかにも以下に挙げた変数を使用することができます。

  • organization.id

  • organization.display_name

  • organization.name

  • organization.metadata

  • organization.branding.logo_url

  • organization.branding.colors.primary

  • organization.branding.colors.page_background

変数はLiquidの{{ variable_name }}構文を使って参照されます。例:

Hello {{ user.name }}.Welcome to {{ application.name }} from {{ friendly_name }}.

userオブジェクトに使用できる属性は、使用される接続のタイプによって異なります。各メールテンプレートは、特定のテンプレートに適した追加の変数を定義します。

ユーザーがリンクをクリックしてアクションを実行する必要があるメールでは、アクションを実行した後に、[URL Lifetime(URLライフタイム)][Redirect To(リダイレクト先)]URLの宛先も構成することができます。Liquid構文は[Redirect To(リダイレクト先)]URLフィールドでもサポートされていますが、サポートされている変数は以下の3つのみです。

  • application.name

  • application.clientID

  • application.callback_domain

テンプレートフィールドを構成する

以下のフィールドを構成する必要があります。

/

Auth0からメールを受信すると、送信者として送信元アドレスフィールドにメールアドレスが表示されます。メールテンプレートの送信元アドレスフィールドを設定しない場合、Auth0はお使いの メールプロバイダーに設定された送信元フィールドのメールアドレスを使用します。

送信元アドレス)フィールドはテンプレートの共通変数すべてに対応していますが、以下が最も一般的に使用されています。

  • application.name

  • friendly_name(テナントが定義したフレンドリー名)

これらの変数を使用して、差出人アドレスの表示名を、ユーザーがサインアップしたアプリケーションに関連するものに設定することができます。たとえば、フィールドには<support@fabrikamcorp.com>ではなく、{{application.name}} <support@fabrikamcorp.com>と表示されます。

Auth0から送信者に代わってデジタル署名済みのメールを送れるようにするには、Sender Policy Framework(SPF)(詳しくは、Wikipediaで「Sender Policy Framework (SPF)」をお読みください)とDomainKeys Identified Mail (詳しくは、Wikipediaで「DomainKeys Identified Mail (DKIM)」をお読みください)のDNSレコードをドメインのゾーンファイルに追加する必要があります。これらのレコードがないと、メールがユーザーの迷惑メールフォルダに振り分けられてしまう可能性があります。さらに、次のような差出人アドレスがユーザーに表示される場合があります。

MyApp support@mail128-21.atl41.mandrillapp.com on behalf of MyApp support@fabrikamcorp.com

SPFの構成

SPFを構成するには、ドメインのゾーンファイルにTXTレコードを追加します。プロバイダーによっては、ホスト名を@に設定するか、空のままにする必要があります。レコードの値は次のようにします。

"v=spf1 include:spf.mandrillapp.com -all"

既にSPFレコードがある場合は、単にinclude:spf.mandrillapp.comを既存のレコードに追加することができます。

DKIMの構成

DKIMを構成するには、ドメインのゾーンファイルにTXTレコードを追加します。このドメインはメールの送信に使用するものにしてください。たとえば、Mandrillを使用している場合、このレコードのホスト名はmandrill._domainkeyに、値は次のように設定します。

v=DKIM1; k=rsa; 
p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCrLHiExVd55zd/IQ/J/mRwSRMAocV/hMB3jXwaHH36d9NaVynQFYV8NaWi69c1veUtRzGt7yAioXqLj7Z4TeEUoOLgrKsn8YnckGs9i3B3tVFB+Ch/4mPhXWiNfNdynHWBcPcbJ8kjEQ2U8y78dHZj1YeRXXVvWob2OaKynO8/lQIDAQAB;

Was this helpful?

/

Subject(件名)フィールドは、テンプレートに共通する次を含むすべての変数に対応しています。

  • application.name

  • user.email(およびuserオブジェクトのその他のプロパティ)

Subject(件名)フィールドが空の場合、Auth0は送信するメールの種類に応じてこのテキストを自動入力します。たとえば、ある件名行が「メールを確認してください。」であるとします。

多言語の件名行

ユーザーが選択した言語は、user.user_metadataと、Subject(件名)フィールドに使用されるLiquid構文に格納することができます。

例:

{% assign language = user.user_metadata.preferredLanguage %}
  {% if language %}
    {% assign language = user.user_metadata.preferredLanguage | slice: 0,2 %}
  {% endif%}
{% if language == 'es' %}
  Cuenta de Example: bloqueada
{% elsif language == 'de' %}
  Ihr Example wurde gesperrt
{% elsif language == 'fr' %}
  Compte Example bloqué
{% elsif language == 'ja' %}
  Example アカウントがブロックされました
{% elsif language == 'pt' %}
  Conta da Example bloqueada
{% elsif language == 'zh' %}
  Example 帐户被阻止
{% else %}
  Example account blocked
{% endif %}

Was this helpful?

/

検証メールパスワード変更ブロックされたアカウントのメールには、ユーザーがサインアップ時にメールアドレスを確認したり、パスワードの変更を確認したり、ブロックされたアカウントのブロックを解除したりできるリンクが含まれています。

セキュリティ上の理由から、このリンクのライフタイムは変更が可能です。デフォルトのライフタイムは432,000秒(5日)です。

期限切れリンクがクリックされたときにリダイレクト先URLが設定されていると、ユーザーは設定されたリダイレクト先URLにリダイレクトされます。クエリ文字列に次のテキストが追加されます。

http://myapplication.com/my_page/?email=john%contoso.com&message=Access%20expired.&success=false

リダイレクト先URLは、関連アクション(アカウントの確認、パスワードのリセット、アカウントのブロック解除)が実行された後にユーザーをリダイレクトする任意の移動先です。

ユニバーサルログインクラシックエクスペリエンスでは、パスワードのリセット後にリダイレクトされるURLを指定できます。Auth0はそのURLにsuccessインジケーターとmessageを送信します。これら2つのパラメーターの詳細については、メールテンプレートの説明をご覧ください。

New Universal Loginエクスペリエンスでは、ユーザーがパスワードのリセットに成功した場合、Auth0はユーザーをデフォルトのログインルートにリダイレクトします。そうでない場合、Auth0はユニバーサルログインフローの一部としてエラーを処理し、メールテンプレートに入力されたリダイレクトURLを無視します。

リダイレクト先URLでは、次の3つの変数のみが使用できます。

  • application.name(またはその同義語のclient.name

  • application.clientID

  • application.callback_domain(またはその同義語のclient.callback_domain

application.callback_domain変数には、アプリケーションのAllowed Callback URL(許可されているコールバックURL)リストに記載されている最初のURLのオリジンが含まれます。これにより、次のような構文を使用して、アクションをトリガーしたアプリケーションのパスにユーザーをリダイレクトすることができます。

{{ application.callback_domain }}/result_page

この変数はcallback_domainと呼ばれますが、実際にはオリジンであるため、ドメイン(例:https://myapp.com)に加えてプロトコルが含まれていることに注意してください。

アプリケーションに複数のAllowed Callback URL(許可されているコールバックURL)が設定されている場合、Auth0はリストに載っている最初のURLを使用します。Liquid構文を使用して、デフォルトのオリジンを指定することもできます。

{{ application.callback_domain | default: "https://my-default-domain.com" }}/result_page

URLへの動的リダイレクト

アプリケーション名に基づいて、別のリダイレクト先URLをセットアップできます。例:

{% if application.name == 'JWT.io' %} https://jwt.io {% else %} https://auth0.com {% endif %}

アプリケーション名はセキュリティ上エンコードされているため、常にエンコードされた値を使用してください(特に、アプリケーション名にエンコード後に変更される文字が含まれている場合)。たとえば、My Appの場合は、代わりにMy%20Appを使用します。

シングルページアプリケーション(SPA)の場合、リダイレクト先URLには、アプリ内の特定の状態/ビューのハッシュとルート、それに続くルートパラメーターを含めることができます。その場合、リダイレクト先URLで次の問題が発生する可能性があります。

http://localhost:3000/#/register

これにより、ユーザは次のURLにリダイレクトされます:

http://localhost:3000/?supportSignUp=true
  &supportForgotPassword=true
  &email=john.doe%40exampleco.com
  &message=Your%20email%20was%20verified.%20You%20can%20continue%20using%20the%20application.
  &success=true#/register

Was this helpful?

/

これは、期待されるURLの順序をscheme|authority|path|query|fragmentとして定義している、インターネット標準(詳細はインターネット技術特別調査委員会(IETF、Internet Engineering Task Force)作成の「RFC 3986」仕様をお読みください)に記述されています。ただし、SPAフレームワーク(Angularなど)では通常、scheme|authority|path|fragment|query形式(末尾にクエリ文字列パラメータ付き)のURLが期待されます。これにより、アプリケーションは正常な状態に入りません。たとえば、上記のURLでは、アプリは/#/registerではなく/にルーティングされます。

SPAフレームワークのこの制限を回避するには、リダイレクトのためのSPAアプリルートを保持するrouteパラメーターを含んだサーバー側のCallback URLを、リダイレクト先URLとして使用することが推奨されます。このサーバ側のURLに入ったら、残りのクエリ文字列とともにrouteパラメーターに保存されているSPAルートにリダイレクトします。

  1. サーバ側のURLを、リダイレクトのSPAルートを記録するrouteパラメーター付きのリダイレクト先URLとして追加します。 http://localhost:3001/register?route=register

  2. URLからrouteやその他のパラメーターを読み取り、routeパラメーターで指定されたSPAルートにリダイレクトするサーバ側のルートコントローラーを作成します。Auth0から受け取った他のパラメーターを忘れずに追加します。

    var express = require('express');
    var router = express.Router();
    var qs = require('qs'); // to read query string params and stringify them
    
    router.get('/register', function(req, res, next) {
      var route = req.query.route; // retrieve the route param that contains the SPA client side route user needs to be redirected to.
    
      delete req.query.route; // remove it from query params.
      res.redirect('http://localhost:3000/#/' + route + '?' +  qs.stringify(req.query)); // Send a 302 redirect for the expected route
    });
    
    module.exports = router;

    Was this helpful?

    /

メッセージ本文にはHTMLコンテンツがありますが、現在サポートされているテンプレート構文はLiquid構文です。すべての共通変数と個々のテンプレートで定義された変数が使用できます。

多言語メールテンプレート

Liquid構文をユーザーオブジェクトのuser_metadata.langプロパティと併用すると、ユーザーが希望する言語に基づいてコンテンツを変更できます。たとえば、イタリア語の場合は、アクションを使用してuser_metadata.langプロパティをitに設定することができます。その言語プロパティにアクションなどを設定する必要があります。

Liquidテンプレート変数のデバッグ

テンプレートの開発を支援するために、カスタム{%debug%} liquidタグが追加されました。このタグは、テンプレートが表示されたときにテンプレートで使用できるテンプレート変数の概要を出力します。このタグは、「ライブ」のテンプレートから必ず削除してください。

もっと詳しく