Mailjet ile özel e-posta doğrulaması

Başlamadan önce, ayarladığınız ilke türünü seçmek için İlke türü seçin seçicisini kullanın. Azure Active Directory B2C, kullanıcıların uygulamalarınızla nasıl etkileşim kurduğunu tanımlamak için iki yöntem sunar: önceden tanımlanmış kullanıcı akışları veya tam olarak yapılandırılabilir özel ilkeler aracılığıyla. Bu makalede gerekli adımlar her yöntem için farklıdır.

Uygulamalarınızı kullanmak üzere kaydolan kullanıcılara özelleştirilmiş e-posta göndermek için Azure Active Directory B2C'de (Azure AD B2C) özel e-posta kullanın. Üçüncü taraf e-posta sağlayıcısı Mailjet'i kullanarak kendi e-posta şablonunuzu ve Kimden: adres ve konu bilgilerini kullanabilir, ayrıca yerelleştirmeyi ve özel tek seferlik parola (OTP) ayarlarını destekleyebilirsiniz.

Bu özellik yalnızca özel ilkeler için kullanılabilir. Kurulum adımları için, önceki seçicide Özel ilke'yi seçin.

Özel e-posta doğrulaması için Mailjet, SendGrid veya SparkPost gibi bir üçüncü taraf e-posta sağlayıcısının, özel bir REST API'nin veya herhangi bir HTTP tabanlı e-posta sağlayıcısının (sizinki dahil) kullanılması gerekir. Bu makalede Mailjet kullanan bir çözüm ayarlama açıklanmaktadır.

Mailjet hesabı oluşturma

Henüz bir e-postanız yoksa, bir Mailjet hesabı ayarlayarak işe başlayın (Azure müşterileri 200 e-posta/gün sınırıyla 6.000 e-postanın kilidini açabilir).

  1. Mailjet Hesabı Oluşturma başlığındaki kurulum yönergelerini izleyin.
  2. E-posta gönderebilmek için Gönderen e-posta adresinizi veya etki alanınızı kaydedin ve doğrulayın .
  3. API Anahtar Yönetimi sayfasına gidin. Daha sonraki bir adımda kullanmak üzere API Anahtarını ve Gizli Anahtarı kaydedin. Hesabınız oluşturulduğunda her iki anahtar da otomatik olarak oluşturulur.

Önemli

Mailjet, müşterilere paylaşılan IP ve ayrılmış IP adreslerinden e-posta gönderme olanağı sunar. Ayrılmış IP adreslerini kullanırken, IP adresi ısınması ile kendi itibarınızı düzgün bir şekilde oluşturmanız gerekir. Daha fazla bilgi için bkz. IP Nasıl yaparım?mi ısıtma?

Azure AD B2C ilke anahtarı oluşturma

Ardından, ilkelerinizin başvurması için Mailjet API anahtarını bir Azure AD B2C ilke anahtarında depolayın.

  1. Azure Portal oturum açın.
  2. Birden çok kiracıya erişiminiz varsa, Dizinler + abonelikler menüsünden Azure AD B2C kiracınıza geçmek için üstteki menüden Ayarlar simgesini seçin.
  3. Azure portalının sol üst köşesindeki Tüm hizmetler'i seçin ve ardından Azure AD B2C'yi arayıp seçin.
  4. Genel Bakış sayfasında Kimlik Deneyimi Çerçevesi'ni seçin.
  5. İlke Anahtarları'nı ve ardından Ekle'yi seçin.
  6. Seçenekler için El ile'yi seçin.
  7. İlke anahtarı için bir Ad girin. Örneğin, MailjetApiKey. Ön ek B2C_1A_ , anahtarınızın adına otomatik olarak eklenir.
  8. Gizli Dizi alanına, daha önce kaydettiğiniz Mailjet API Anahtarınızı girin.
  9. Anahtar kullanımı için İmza'yı seçin.
  10. Oluştur seçeneğini belirleyin.
  11. İlke Anahtarları'nı ve ardından Ekle'yi seçin.
  12. Seçenekler için El ile'yi seçin.
  13. İlke anahtarı için bir Ad girin. Örneğin, MailjetSecretKey. Ön ek B2C_1A_ , anahtarınızın adına otomatik olarak eklenir.
  14. Gizli Dizi alanına, daha önce kaydettiğiniz Mailjet Gizli Anahtarınızı girin.
  15. Anahtar kullanımı için İmza'yı seçin.
  16. Oluştur seçeneğini belirleyin.

Mailjet şablonu oluşturma

Mailjet hesabı oluşturulduğunda ve Mailjet API anahtarı bir Azure AD B2C ilke anahtarında depolandığında bir Mailjet dinamik işlem şablonu oluşturun.

  1. Mailjet sitesinde işlem şablonları sayfasını açın ve Yeni şablon oluştur'u seçin.

  2. HTML olarak kodlayarak'ı ve ardından Sıfırdan kod'a tıklayın.

  3. gibi Verification emailbenzersiz bir şablon adı girin ve Oluştur'u seçin.

  4. HTML düzenleyicisinde aşağıdaki HTML şablonunu yapıştırın veya kendi şablonunuzu kullanın. {{var:otp:""}} ve {{var:email:""}} parametreleri dinamik olarak tek seferlik parola değeri ve kullanıcı e-posta adresiyle değiştirilir.

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="en"><head id="Head1">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"><title>Contoso demo account email verification code</title><meta name="ROBOTS" content="NOINDEX, NOFOLLOW">
       <!-- Template B O365 -->
       <style>
           table td {border-collapse:collapse;margin:0;padding:0;}
       </style>
    </head>
    <body dir="ltr" lang="en">
       <table width="100%" cellpadding="0" cellspacing="0" border="0" dir="ltr" lang="en">
            <tr>
               <td valign="top" width="50%"></td>
               <td valign="top">
                  <!-- Email Header -->
                  <table width="640" cellpadding="0" cellspacing="0" border="0" dir="ltr" lang="en" style="border-left:1px solid #e3e3e3;border-right: 1px solid #e3e3e3;">
                   <tr style="background-color: #0072C6;">
                       <td width="1" style="background:#0072C6; border-top:1px solid #e3e3e3;"></td>
                       <td width="24" style="border-top:1px solid #e3e3e3;border-bottom:1px solid #e3e3e3;">&nbsp;</td>
                       <td width="310" valign="middle" style="border-top:1px solid #e3e3e3; border-bottom:1px solid #e3e3e3;padding:12px 0;">
                           <h1 style="line-height:20pt;font-family:Segoe UI Light; font-size:18pt; color:#ffffff; font-weight:normal;">
                            <span id="HeaderPlaceholder_UserVerificationEmailHeader"><font color="#FFFFFF">Verify your email address</font></span>
                           </h1>
                       </td>
                       <td width="24" style="border-top: 1px solid #e3e3e3;border-bottom: 1px solid #e3e3e3;">&nbsp;</td>
                   </tr>
                  </table>
                  <!-- Email Content -->
                  <table width="640" cellpadding="0" cellspacing="0" border="0" dir="ltr" lang="en">
                   <tr>
                       <td width="1" style="background:#e3e3e3;"></td>
                       <td width="24">&nbsp;</td>
                       <td id="PageBody" width="640" valign="top" colspan="2" style="border-bottom:1px solid #e3e3e3;padding:10px 0 20px;border-bottom-style:hidden;">
                           <table cellpadding="0" cellspacing="0" border="0">
                               <tr>
                                   <td width="630" style="font-size:10pt; line-height:13pt; color:#000;">
                                       <table cellpadding="0" cellspacing="0" border="0" width="100%" style="" dir="ltr" lang="en">
                                           <tr>
                                               <td>
    
       <div style="font-family:'Segoe UI', Tahoma, sans-serif; font-size:14px; color:#333;">
           <span id="BodyPlaceholder_UserVerificationEmailBodySentence1">Thanks for verifying your {{var:email:""}} account!</span>
       </div>
       <br>
       <div style="font-family:'Segoe UI', Tahoma, sans-serif; font-size:14px; color:#333; font-weight: bold">
           <span id="BodyPlaceholder_UserVerificationEmailBodySentence2">Your code is: {{var:otp:""}}</span>
       </div>
       <br>
       <br>
    
                                                   <div style="font-family:'Segoe UI', Tahoma, sans-serif; font-size:14px; color:#333;">
                                                   Sincerely,
                                                   </div>
                                                   <div style="font-family:'Segoe UI', Tahoma, sans-serif; font-size:14px; font-style:italic; color:#333;">
                                                       Contoso
                                                   </div>
                                               </td>
                                           </tr>
                                       </table>
                                   </td>
                               </tr>
                           </table>
    
                       </td>
    
                       <td width="1">&nbsp;</td>
                       <td width="1"></td>
                       <td width="1">&nbsp;</td>
                       <td width="1" valign="top"></td>
                       <td width="29">&nbsp;</td>
                       <td width="1" style="background:#e3e3e3;"></td>
                   </tr>
                   <tr>
                       <td width="1" style="background:#e3e3e3; border-bottom:1px solid #e3e3e3;"></td>
                       <td width="24" style="border-bottom:1px solid #e3e3e3;">&nbsp;</td>
                       <td id="PageFooterContainer" width="585" valign="top" colspan="6" style="border-bottom:1px solid #e3e3e3;padding:0px;">
    
                       </td>
    
                       <td width="29" style="border-bottom:1px solid #e3e3e3;">&nbsp;</td>
                       <td width="1" style="background:#e3e3e3; border-bottom:1px solid #e3e3e3;"></td>
                   </tr>
                  </table>
    
               </td>
               <td valign="top" width="50%"></td>
           </tr>
       </table>
    </body>
    </html>
    
  5. Sol üst kısımdaki Konuyu düzenle'yi genişletin

    1. Konu için, konu için varsayılan bir değer girin. API bir konu parametresi içermediğinde Mailjet bu değeri kullanır.
    2. Ad alanına şirketinizin adını yazın.
    3. Adres için e-posta adresinizi seçin
    4. Kaydet'i seçin.
  6. Sağ üst kısımdan Yayımla'yı Kaydet'i ve ardından Evet, değişiklikleri yayımla'yı & seçin

  7. Daha sonraki bir adımda kullanmak üzere oluşturduğunuz şablonun Şablon Kimliğini kaydedin. Talep dönüştürmesini eklerken bu kimliği belirtirsiniz.

Önemli

Sonraki adımlarda özel ilke XML dosyalarınızı nasıl oluşturabileceğiniz gösterilmektedir. GitHub'da kullanılabilen örnek bir Özel e-posta doğrulama özel ilkesi kullanmanızı öneririz. DisplayControl_TrustFrameworkExtensions.xmltemel dosyası olarak kullanırTrustFrameworkExtensions.xml, bu nedenle ilkenize SocialAndLocalAccountsbaşlangıç paketinden ve TrustFrameworkLocalization.xml TrustFrameworkExtensions.xml dosyalarını eklediğinizden TrustFrameworkBase.xmlemin olun.

Azure AD B2C talep türleri ekleme

İlkenizde, içindeki <BuildingBlocks>öğesine aşağıdaki talep türlerini <ClaimsSchema> ekleyin.

Bu talep türleri, tek seferlik parola (OTP) kodu kullanarak e-posta adresini oluşturmak ve doğrulamak için gereklidir.

<!--
<BuildingBlocks>
  <ClaimsSchema> -->
    <ClaimType Id="Otp">
      <DisplayName>Secondary One-time password</DisplayName>
      <DataType>string</DataType>
    </ClaimType>
    <ClaimType Id="emailRequestBody">
      <DisplayName>Mailjet request body</DisplayName>
      <DataType>string</DataType>
    </ClaimType>
    <ClaimType Id="VerificationCode">
      <DisplayName>Secondary Verification Code</DisplayName>
      <DataType>string</DataType>
      <UserHelpText>Enter your email verification code</UserHelpText>
      <UserInputType>TextBox</UserInputType>
    </ClaimType>
  <!-- 
  </ClaimsSchema>
</BuildingBlocks> -->

Talep dönüştürmesini ekleme

Ardından, Mailjet'e gönderilen isteğin gövdesi olacak bir JSON dize talebinin çıkışını almak için bir talep dönüştürmeniz gerekir.

JSON nesnesinin yapısı, InputParameters'ın noktalı gösterimi ve InputClaims'in TransformationClaimTypes kimlikleri tarafından tanımlanır. Nokta gösterimindeki sayılar dizileri ifade eder. Değerler InputClaims'in değerlerinden ve InputParameters'ın "Value" özelliklerinden gelir. JSON talep dönüştürmeleri hakkında daha fazla bilgi için bkz . JSON talep dönüştürmeleri.

içindeki <BuildingBlocks>öğesine aşağıdaki talep dönüştürmesini <ClaimsTransformations> ekleyin. Talep dönüştürme XML'sinde aşağıdaki güncelleştirmeleri yapın:

  • Messages.0.TemplateID InputParameter değerini, Daha önce Mailjet şablonu oluşturma bölümünde oluşturduğunuz Mailjet işlem şablonunun kimliğiyle güncelleştirin.
  • Adres değerini güncelleştirin Messages.0.From.Email . Doğrulama e-postasının istenmeyen posta olarak işaretlenmesini önlemeye yardımcı olması için geçerli bir e-posta adresi kullanın.
  • Konu satırı giriş parametresinin Messages.0.Subject değerini kuruluşunuza uygun bir konu satırıyla güncelleştirin.
<!-- 
<BuildingBlocks>
  <ClaimsTransformations> -->
    <ClaimsTransformation Id="GenerateEmailRequestBody" TransformationMethod="GenerateJson">
      <InputClaims>
        <InputClaim ClaimTypeReferenceId="email" TransformationClaimType="Messages.0.To.0.Email" />
        <InputClaim ClaimTypeReferenceId="otp" TransformationClaimType="Messages.0.Variables.otp" />
        <InputClaim ClaimTypeReferenceId="email" TransformationClaimType="Messages.0.Variables.email" />
      </InputClaims>
      <InputParameters>
        <!-- Update the template_id value with the ID of your Mailjet template. -->
        <InputParameter Id="Messages.0.TemplateID" DataType="int" Value="1234567"/>
        <InputParameter Id="Messages.0.TemplateLanguage" DataType="boolean" Value="true"/>

        <!-- Update with an email appropriate for your organization. -->
        <InputParameter Id="Messages.0.From.Email" DataType="string" Value="my_email@mydomain.com"/>

        <!-- Update with a subject line appropriate for your organization. -->
        <InputParameter Id="Messages.0.Subject" DataType="string" Value="Contoso account email verification code"/>
      </InputParameters>
      <OutputClaims>
        <OutputClaim ClaimTypeReferenceId="emailRequestBody" TransformationClaimType="outputClaim"/>
      </OutputClaims>
    </ClaimsTransformation>
  <!--
  </ClaimsTransformations>
</BuildingBlocks> -->

DataUri içerik tanımı ekleme

içindeki <BuildingBlocks>talep dönüştürmelerinin altına, sürüm 2.1.2 veri URI'sine başvurmak için aşağıdaki ContentDefinition öğesini ekleyin:

<!--
<BuildingBlocks> -->
  <ContentDefinitions>
   <ContentDefinition Id="api.localaccountsignup">
      <DataUri>urn:com:microsoft:aad:b2c:elements:contract:selfasserted:2.1.2</DataUri>
    </ContentDefinition>
    <ContentDefinition Id="api.localaccountpasswordreset">
      <DataUri>urn:com:microsoft:aad:b2c:elements:contract:selfasserted:2.1.2</DataUri>
    </ContentDefinition>
  </ContentDefinitions>
<!--
</BuildingBlocks> -->

DisplayControl oluşturma

Kullanıcıya gönderilen bir doğrulama koduyla e-posta adresini doğrulamak için doğrulama görüntüleme denetimi kullanılır.

Bu örnek görüntüleme denetimi şu şekilde yapılandırılmıştır:

  1. Kullanıcıdan email adres talep türünü toplayın.

  2. eylemini SendCode kullanarak bir OTP kodu oluşturun ve kullanıcıya OTP kodunu içeren bir e-posta gönderin.

    Send verification code email action

  3. Kullanıcının talep türünü kullanıcıya gönderilen kodu sağlamasını verificationCode bekleyin.

  4. öğesini email , bu görüntüleme denetimine bir başvurusu olan kendi kendine onaylanan teknik profile döndür.

İçerik tanımlarının altında, hala içinde<BuildingBlocks>, ilkenize VerificationControl türünde aşağıdaki DisplayControl öğesini ekleyin.

<!--
<BuildingBlocks> -->
  <DisplayControls>
    <DisplayControl Id="emailVerificationControl" UserInterfaceControlType="VerificationControl">
      <DisplayClaims>
        <DisplayClaim ClaimTypeReferenceId="email" Required="true" />
        <DisplayClaim ClaimTypeReferenceId="verificationCode" ControlClaimType="VerificationCode" Required="true" />
      </DisplayClaims>
      <OutputClaims>
        <OutputClaim ClaimTypeReferenceId="email" />
      </OutputClaims>
      <Actions>
        <Action Id="SendCode">
          <ValidationClaimsExchange>
            <ValidationClaimsExchangeTechnicalProfile TechnicalProfileReferenceId="GenerateOtp" />
            <ValidationClaimsExchangeTechnicalProfile TechnicalProfileReferenceId="SendOtp" />
          </ValidationClaimsExchange>
        </Action>
        <Action Id="VerifyCode">
          <ValidationClaimsExchange>
            <ValidationClaimsExchangeTechnicalProfile TechnicalProfileReferenceId="VerifyOtp" />
          </ValidationClaimsExchange>
        </Action>
      </Actions>
    </DisplayControl>
  </DisplayControls>
<!--
</BuildingBlocks> -->

OTP teknik profilleri ekleme

Teknik GenerateOtp profil, e-posta adresi için bir kod oluşturur. Teknik VerifyOtp profil, e-posta adresiyle ilişkili kodu doğrular. Biçimin yapılandırmasını ve tek seferlik parolanın süre sonunu değiştirebilirsiniz. OTP teknik profilleri hakkında daha fazla bilgi için bkz . Tek seferlik parola teknik profili tanımlama.

Dekont

Web.TPEngine.Providers.OneTimePasswordProtocolProvider protokolü tarafından oluşturulan OTP kodları tarayıcı oturumuna bağlıdır. Bu, kullanıcının her birinin ilgili oturumları için geçerli olan farklı tarayıcı oturumlarında benzersiz OTP kodları oluşturabileceği anlamına gelir. Buna karşılık, yerleşik e-posta sağlayıcısı tarafından oluşturulan bir OTP kodu tarayıcı oturumundan bağımsızdır, bu nedenle kullanıcı yeni bir tarayıcı oturumunda yeni bir OTP kodu oluşturursa, önceki OTP kodunun yerini alır.

öğesine aşağıdaki teknik profilleri <ClaimsProviders> ekleyin.

<!--
<ClaimsProviders> -->
  <ClaimsProvider>
    <DisplayName>One time password technical profiles</DisplayName>
    <TechnicalProfiles>
      <TechnicalProfile Id="GenerateOtp">
        <DisplayName>Generate one time password</DisplayName>
        <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.OneTimePasswordProtocolProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
        <Metadata>
          <Item Key="Operation">GenerateCode</Item>
          <Item Key="CodeExpirationInSeconds">600</Item>
          <Item Key="CodeLength">6</Item>
          <Item Key="CharacterSet">0-9</Item>
          <Item Key="NumRetryAttempts">5</Item>
          <Item Key="NumCodeGenerationAttempts">10</Item>
          <Item Key="ReuseSameCode">false</Item>
        </Metadata>
        <InputClaims>
          <InputClaim ClaimTypeReferenceId="email" PartnerClaimType="identifier" />
        </InputClaims>
        <OutputClaims>
          <OutputClaim ClaimTypeReferenceId="otp" PartnerClaimType="otpGenerated" />
        </OutputClaims>
      </TechnicalProfile>

      <TechnicalProfile Id="VerifyOtp">
        <DisplayName>Verify one time password</DisplayName>
        <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.OneTimePasswordProtocolProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
        <Metadata>
          <Item Key="Operation">VerifyCode</Item>
        </Metadata>
        <InputClaims>
          <InputClaim ClaimTypeReferenceId="email" PartnerClaimType="identifier" />
          <InputClaim ClaimTypeReferenceId="verificationCode" PartnerClaimType="otpToVerify" />
        </InputClaims>
      </TechnicalProfile>
     </TechnicalProfiles>
  </ClaimsProvider>
<!--
</ClaimsProviders> -->

REST API teknik profili ekleme

Bu REST API teknik profili, e-posta içeriğini oluşturur (Mailjet biçimini kullanarak). RESTful teknik profilleri hakkında daha fazla bilgi için bkz . RESTful teknik profili tanımlama.

OTP teknik profillerinde olduğu gibi öğesine aşağıdaki teknik profilleri <ClaimsProviders> ekleyin.

<ClaimsProvider>
  <DisplayName>RestfulProvider</DisplayName>
  <TechnicalProfiles>
    <TechnicalProfile Id="sendOtp">
      <DisplayName>Use email API to send the code to the user</DisplayName>
      <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.RestfulProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
      <Metadata>
        <Item Key="ServiceUrl">https://api.mailjet.com/v3.1/send</Item>
        <Item Key="AuthenticationType">Basic</Item>
        <Item Key="SendClaimsIn">Body</Item>
        <Item Key="ClaimUsedForRequestPayload">emailRequestBody</Item>
      </Metadata>
      <CryptographicKeys>
        <Key Id="BasicAuthenticationUsername" StorageReferenceId="B2C_1A_MailjetApiKey" />
        <Key Id="BasicAuthenticationPassword" StorageReferenceId="B2C_1A_MailjetSecretKey" />
      </CryptographicKeys>
      <InputClaimsTransformations>
        <InputClaimsTransformation ReferenceId="GenerateEmailRequestBody" />
      </InputClaimsTransformations>
      <InputClaims>
        <InputClaim ClaimTypeReferenceId="emailRequestBody" />
      </InputClaims>
    </TechnicalProfile>
  </TechnicalProfiles>
</ClaimsProvider>

DisplayControl'e başvuru yapma

Son adımda, oluşturduğunuz DisplayControl'e bir başvuru ekleyin. Temel ilkede yapılandırılan mevcut LocalAccountSignUpWithLogonEmail ve LocalAccountDiscoveryUsingEmailAddress kendi kendine onaylanan teknik profillerinizi aşağıdaki XML kod parçacığıyla geçersiz kılın. Azure AD B2C ilkesinin önceki bir sürümünü kullandıysanız, bu teknik profiller başvurusuyla DisplayControlkullanırDisplayClaims.

Daha fazla bilgi için bkz . Kendi kendine onaylanan teknik profil ve DisplayControl.

<ClaimsProvider>
  <DisplayName>Local Account</DisplayName>
  <TechnicalProfiles>
    <TechnicalProfile Id="LocalAccountSignUpWithLogonEmail">
      <DisplayClaims>
        <DisplayClaim DisplayControlReferenceId="emailVerificationControl" />
        <DisplayClaim ClaimTypeReferenceId="displayName" Required="true" />
        <DisplayClaim ClaimTypeReferenceId="givenName" Required="true" />
        <DisplayClaim ClaimTypeReferenceId="surName" Required="true" />
        <DisplayClaim ClaimTypeReferenceId="newPassword" Required="true" />
        <DisplayClaim ClaimTypeReferenceId="reenterPassword" Required="true" />
      </DisplayClaims>
    </TechnicalProfile>
    <TechnicalProfile Id="LocalAccountDiscoveryUsingEmailAddress">
      <DisplayClaims>
        <DisplayClaim DisplayControlReferenceId="emailVerificationControl" />
      </DisplayClaims>
    </TechnicalProfile>
  </TechnicalProfiles>
</ClaimsProvider>

[İsteğe bağlı] E-postanızı yerelleştirme

E-postayı yerelleştirmek için Mailjet'e veya e-posta sağlayıcınıza yerelleştirilmiş dizeler göndermeniz gerekir. Örneğin, e-posta konusunu, gövdesini, kod iletinizi veya e-postanın imzasını yerelleştirebilirsiniz. Bunu yapmak için GetLocalizedStringsTransformation talep dönüştürmesini kullanarak yerelleştirilmiş dizeleri talep türlerine kopyalayabilirsiniz. GenerateEmailRequestBody JSON yükünü oluşturan talep dönüştürmesi, yerelleştirilmiş dizeleri içeren giriş taleplerini kullanır.

  1. İlkenizde şu dize taleplerini tanımlayın: konu, ileti, kodIntro ve imza.

  2. Yerelleştirilmiş dize değerlerini 1. adımdaki taleplerle değiştirmek için GetLocalizedStringsTransformation talep dönüştürmesi tanımlayın.

  3. GenerateEmailRequestBody Aşağıdaki XML kod parçacığıyla giriş taleplerini kullanmak için talep dönüştürmesini değiştirin.

  4. Mailjet şablonunuzu, Azure AD B2C tarafından yerelleştirilecek tüm dizeler yerine dinamik parametreleri kullanacak şekilde güncelleştirin.

    <ClaimsTransformation Id="GetLocalizedStringsForEmail" TransformationMethod="GetLocalizedStringsTransformation">
      <OutputClaims>
        <OutputClaim ClaimTypeReferenceId="subject" TransformationClaimType="email_subject" />
        <OutputClaim ClaimTypeReferenceId="message" TransformationClaimType="email_message" />
        <OutputClaim ClaimTypeReferenceId="codeIntro" TransformationClaimType="email_code" />
        <OutputClaim ClaimTypeReferenceId="signature" TransformationClaimType="email_signature" />
      </OutputClaims>
    </ClaimsTransformation>
    <ClaimsTransformation Id="GenerateEmailRequestBody" TransformationMethod="GenerateJson">
      <InputClaims>
        <InputClaim ClaimTypeReferenceId="email" TransformationClaimType="Messages.0.To.0.Email" />
        <InputClaim ClaimTypeReferenceId="subject" TransformationClaimType="Messages.0.Subject" />
        <InputClaim ClaimTypeReferenceId="otp" TransformationClaimType="Messages.0.Variables.otp" />
        <InputClaim ClaimTypeReferenceId="email" TransformationClaimType="Messages.0.Variables.email" />
        <InputClaim ClaimTypeReferenceId="message" TransformationClaimType="Messages.0.Variables.otpmessage" />
        <InputClaim ClaimTypeReferenceId="codeIntro" TransformationClaimType="Messages.0.Variables.otpcodeIntro" />
        <InputClaim ClaimTypeReferenceId="signature" TransformationClaimType="Messages.0.Variables.otpsignature" />
      </InputClaims>
      <InputParameters>
        <!-- Update the template_id value with the ID of your Mailjet template. -->
        <InputParameter Id="Messages.0.TemplateID" DataType="int" Value="1234567"/>
        <InputParameter Id="Messages.0.TemplateLanguage" DataType="boolean" Value="true"/>
    
        <!-- Update with an email appropriate for your organization. -->
        <InputParameter Id="Messages.0.From.Email" DataType="string" Value="my_email@mydomain.com"/>
      </InputParameters>
      <OutputClaims>
        <OutputClaim ClaimTypeReferenceId="emailRequestBody" TransformationClaimType="outputClaim"/>
      </OutputClaims>
    </ClaimsTransformation>
    
  5. Aşağıdaki Localization öğesini ekleyin.

    <!--
    <BuildingBlocks> -->
      <Localization Enabled="true">
        <SupportedLanguages DefaultLanguage="en" MergeBehavior="ReplaceAll">
          <SupportedLanguage>en</SupportedLanguage>
          <SupportedLanguage>es</SupportedLanguage>
        </SupportedLanguages>
        <LocalizedResources Id="api.custom-email.en">
          <LocalizedStrings>
            <LocalizedString ElementType="GetLocalizedStringsTransformationClaimType" StringId="email_subject">Contoso account email verification code</LocalizedString>
            <LocalizedString ElementType="GetLocalizedStringsTransformationClaimType" StringId="email_message">Thanks for validating the account</LocalizedString>
            <LocalizedString ElementType="GetLocalizedStringsTransformationClaimType" StringId="email_code">Your code is</LocalizedString>
            <LocalizedString ElementType="GetLocalizedStringsTransformationClaimType" StringId="email_signature">Sincerely</LocalizedString>
          </LocalizedStrings>
        </LocalizedResources>
        <LocalizedResources Id="api.custom-email.es">
          <LocalizedStrings>
            <LocalizedString ElementType="GetLocalizedStringsTransformationClaimType" StringId="email_subject">Código de verificación del correo electrónico de la cuenta de Contoso</LocalizedString>
            <LocalizedString ElementType="GetLocalizedStringsTransformationClaimType" StringId="email_message">Gracias por comprobar la cuenta de </LocalizedString>
            <LocalizedString ElementType="GetLocalizedStringsTransformationClaimType" StringId="email_code">Su código es</LocalizedString>
            <LocalizedString ElementType="GetLocalizedStringsTransformationClaimType" StringId="email_signature">Sinceramente</LocalizedString>
          </LocalizedStrings>
        </LocalizedResources>
      </Localization>
    <!--
    </BuildingBlocks> -->
    
  6. ContentDefinitions öğesini güncelleştirerek LocalizedResources öğelerine başvurular ekleyin.

    <!--
    <BuildingBlocks> -->
      <ContentDefinitions>
        <ContentDefinition Id="api.localaccountsignup">
          <DataUri>urn:com:microsoft:aad:b2c:elements:contract:selfasserted:2.1.2</DataUri>
          <LocalizedResourcesReferences MergeBehavior="Prepend">
            <LocalizedResourcesReference Language="en" LocalizedResourcesReferenceId="api.custom-email.en" />
            <LocalizedResourcesReference Language="es" LocalizedResourcesReferenceId="api.custom-email.es" />
          </LocalizedResourcesReferences>
        </ContentDefinition>
        <ContentDefinition Id="api.localaccountpasswordreset">
          <DataUri>urn:com:microsoft:aad:b2c:elements:contract:selfasserted:2.1.2</DataUri>
          <LocalizedResourcesReferences MergeBehavior="Prepend">
            <LocalizedResourcesReference Language="en" LocalizedResourcesReferenceId="api.custom-email.en" />
            <LocalizedResourcesReference Language="es" LocalizedResourcesReferenceId="api.custom-email.es" />
          </LocalizedResourcesReferences>
        </ContentDefinition>
      </ContentDefinitions>
    <!--
    </BuildingBlocks> -->
    
  7. Son olarak ve LocalAccountDiscoveryUsingEmailAddress teknik profillerine aşağıdaki giriş talepleri dönüştürmesini LocalAccountSignUpWithLogonEmail ekleyin.

    <InputClaimsTransformations>
      <InputClaimsTransformation ReferenceId="GetLocalizedStringsForEmail" />
    </InputClaimsTransformations>
    

[İsteğe bağlı] Kullanıcı arabirimini yerelleştirme

Localization öğesi, kullanıcı yolculukları için ilkede birden çok yerel ayarı veya dili desteklemenizi sağlar. İlkelerdeki yerelleştirme desteği, hem Doğrulama görüntüleme denetimi kullanıcı arabirimi öğeleri hem de Bir kerelik parola hata iletileri için dile özgü dizeler sağlamanıza olanak tanır. LocalizedResources'unuza aşağıdaki LocalizedString öğesini ekleyin.

<LocalizedResources Id="api.custom-email.en">
  <LocalizedStrings>
    ...
    <!-- Display control UI elements-->
    <LocalizedString ElementType="DisplayControl" ElementId="emailVerificationControl" StringId="intro_msg">Verification is necessary. Please click Send button.</LocalizedString>
    <LocalizedString ElementType="DisplayControl" ElementId="emailVerificationControl" StringId="success_send_code_msg">Verification code has been sent to your inbox. Please copy it to the input box below.</LocalizedString>
    <LocalizedString ElementType="DisplayControl" ElementId="emailVerificationControl" StringId="failure_send_code_msg">We are having trouble verifying your email address. Please enter a valid email address and try again.</LocalizedString>
    <LocalizedString ElementType="DisplayControl" ElementId="emailVerificationControl" StringId="success_verify_code_msg">E-mail address verified. You can now continue.</LocalizedString>
    <LocalizedString ElementType="DisplayControl" ElementId="emailVerificationControl" StringId="failure_verify_code_msg">We are having trouble verifying your email address. Please try again.</LocalizedString>
    <LocalizedString ElementType="DisplayControl" ElementId="emailVerificationControl" StringId="but_send_code">Send verification code</LocalizedString>
    <LocalizedString ElementType="DisplayControl" ElementId="emailVerificationControl" StringId="but_verify_code">Verify code</LocalizedString>
    <LocalizedString ElementType="DisplayControl" ElementId="emailVerificationControl" StringId="but_send_new_code">Send new code</LocalizedString>
    <LocalizedString ElementType="DisplayControl" ElementId="emailVerificationControl" StringId="but_change_claims">Change e-mail</LocalizedString>
    <!-- Claims-->
    <LocalizedString ElementType="ClaimType" ElementId="emailVerificationCode" StringId="DisplayName">Verification Code</LocalizedString>
    <LocalizedString ElementType="ClaimType" ElementId="emailVerificationCode" StringId="UserHelpText">Verification code received in the email.</LocalizedString>
    <LocalizedString ElementType="ClaimType" ElementId="emailVerificationCode" StringId="AdminHelpText">Verification code received in the email.</LocalizedString>
    <LocalizedString ElementType="ClaimType" ElementId="email" StringId="DisplayName">Email</LocalizedString>
    <!-- Email validation error messages-->
    <LocalizedString ElementType="ErrorMessage" StringId="UserMessageIfSessionDoesNotExist">You have exceeded the maximum time allowed.</LocalizedString>
    <LocalizedString ElementType="ErrorMessage" StringId="UserMessageIfMaxRetryAttempted">You have exceeded the number of retries allowed.</LocalizedString>
    <LocalizedString ElementType="ErrorMessage" StringId="UserMessageIfMaxNumberOfCodeGenerated">You have exceeded the number of code generation attempts allowed.</LocalizedString>
    <LocalizedString ElementType="ErrorMessage" StringId="UserMessageIfInvalidCode">You have entered the wrong code.</LocalizedString>
    <LocalizedString ElementType="ErrorMessage" StringId="UserMessageIfSessionConflict">Cannot verify the code, please try again later.</LocalizedString>
    <LocalizedString ElementType="ErrorMessage" StringId="UserMessageIfVerificationFailedRetryAllowed">The verification has failed, please try again.</LocalizedString>
  </LocalizedStrings>
</LocalizedResources>

Sonraki adımlar