Udostępnij za pośrednictwem


Niestandardowa weryfikacja poczty e-mail za pomocą narzędzia Mailjet

Przed rozpoczęciem użyj selektora Wybierz typ zasad, aby wybrać typ konfigurowanych zasad. Usługa Azure Active Directory B2C oferuje dwie metody definiowania sposobu interakcji użytkowników z aplikacjami: za pomocą wstępnie zdefiniowanych przepływów użytkowników lub w pełni konfigurowalnych zasad niestandardowych. Kroki wymagane w tym artykule są różne dla każdej metody.

Użyj niestandardowej poczty e-mail w usłudze Azure Active Directory B2C (Azure AD B2C), aby wysłać niestandardową wiadomość e-mail do użytkowników, którzy zarejestrują się w celu korzystania z aplikacji. Korzystając z dostawcy poczty e-mail innej firmy Mailjet, możesz użyć własnego szablonu poczty e-mail i od: adresu i tematu, a także obsługiwać lokalizację i niestandardowe ustawienia jednorazowego hasła (OTP).

Ta funkcja jest dostępna tylko dla zasad niestandardowych. Aby uzyskać instrukcje konfiguracji, wybierz pozycję Zasady niestandardowe w poprzednim selektorze.

Niestandardowa weryfikacja poczty e-mail wymaga użycia zewnętrznego dostawcy poczty e-mail, takiego jak Mailjet, SendGrid lub SparkPost, niestandardowy interfejs API REST lub dowolny dostawca poczty e-mail oparty na protokole HTTP (w tym własny). W tym artykule opisano konfigurowanie rozwiązania korzystającego z narzędzia Mailjet.

Tworzenie konta mailjet

Jeśli jeszcze go nie masz, zacznij od skonfigurowania konta Mailjet (klienci platformy Azure mogą odblokować 6000 wiadomości e-mail z limitem 200 wiadomości e-mail/dzień).

  1. Postępuj zgodnie z instrukcjami konfiguracji w temacie Create a Mailjet Account (Tworzenie konta Mailjet).
  2. Aby móc wysyłać wiadomości e-mail, zarejestruj i zweryfikuj adres e-mail lub domenę nadawcy.
  3. Przejdź do strony API Key Management. Zarejestruj klucz interfejsu API i klucz tajny do użycia w późniejszym kroku. Oba klucze są generowane automatycznie po utworzeniu konta.

Ważne

Firma Mailjet oferuje klientom możliwość wysyłania wiadomości e-mail z udostępnionych adresów IP i dedykowanych adresów IP. W przypadku korzystania z dedykowanych adresów IP należy prawidłowo utworzyć własną reputację przy użyciu rozgrzewki adresu IP. Aby uzyskać więcej informacji, zobacz Jak mogę rozgrzewać mój adres IP ?.

Tworzenie klucza zasad usługi Azure AD B2C

Następnie zapisz klucz interfejsu API Mailjet w kluczu zasad usługi Azure AD B2C, aby odwoływać się do zasad.

  1. Zaloguj się w witrynie Azure Portal.
  2. Jeśli masz dostęp do wielu dzierżaw, wybierz ikonę Ustawienia w górnym menu, aby przełączyć się do dzierżawy usługi Azure AD B2C z menu Katalogi i subskrypcje.
  3. Wybierz pozycję Wszystkie usługi w lewym górnym rogu witryny Azure Portal, a następnie wyszukaj i wybierz usługę Azure AD B2C.
  4. Na stronie Przegląd wybierz pozycję Identity Experience Framework.
  5. Wybierz pozycję Klucze zasad, a następnie wybierz pozycję Dodaj.
  6. W obszarze Opcje wybierz pozycję Ręczne.
  7. Wprowadź nazwę klucza zasad. Na przykład MailjetApiKey. Prefiks B2C_1A_ jest dodawany automatycznie do nazwy klucza.
  8. W polu Wpis tajny wprowadź wcześniej zarejestrowany klucz interfejsu API Mailjet.
  9. W obszarze Użycie klucza wybierz pozycję Podpis.
  10. Wybierz pozycję Utwórz.
  11. Wybierz pozycję Klucze zasad, a następnie wybierz pozycję Dodaj.
  12. W obszarze Opcje wybierz pozycję Ręczne.
  13. Wprowadź nazwę klucza zasad. Na przykład MailjetSecretKey. Prefiks B2C_1A_ jest dodawany automatycznie do nazwy klucza.
  14. W obszarze Wpis tajny wprowadź wcześniej zarejestrowany klucz tajny mailjet.
  15. W obszarze Użycie klucza wybierz pozycję Podpis.
  16. Wybierz pozycję Utwórz.

Tworzenie szablonu mailjet

Za pomocą utworzonego konta mailjet i klucza interfejsu API Mailjet przechowywanego w kluczu zasad usługi Azure AD B2C utwórz dynamiczny szablon transakcyjny mailjet.

  1. W witrynie Mailjet otwórz stronę szablonów transakcyjnych i wybierz pozycję Utwórz nowy szablon.

  2. Wybierz pozycję Przez kodowanie go w kodzie HTML, a następnie wybierz pozycję Kod od podstaw.

  3. Wprowadź unikatową nazwę szablonu, taką jak Verification email, a następnie wybierz pozycję Utwórz.

  4. W edytorze HTML wklej poniższy szablon HTML lub użyj własnego szablonu. Parametry {{var:otp:""}} i {{var:email:""}} zostaną dynamicznie zastąpione wartością hasła jednorazowego i adresem e-mail użytkownika.

    <!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. Rozwiń pozycję Edytuj temat w lewym górnym rogu

    1. W polu Temat wprowadź wartość domyślną tematu. Mailjet używa tej wartości, gdy interfejs API nie zawiera parametru tematu.
    2. W polu Nazwa wpisz nazwę firmy.
    3. W polu Adres wybierz swój adres e-mail
    4. Wybierz pozycję Zapisz.
  6. W prawym górnym rogu wybierz pozycję Zapisz & publikację, a następnie pozycję Tak, opublikuj zmiany

  7. Zarejestruj identyfikator szablonu utworzonego do użycia w późniejszym kroku. Ten identyfikator należy określić podczas dodawania przekształcenia oświadczeń.

Ważne

W następnych krokach pokazano, jak utworzyć niestandardowe pliki XML zasad. Zalecamy użycie przykładowych niestandardowych zasad weryfikacji niestandardowej niestandardowej weryfikacji poczty e-mail dostępnych w witrynie GitHub. DisplayControl_TrustFrameworkExtensions.xmlużywa TrustFrameworkExtensions.xml jako pliku podstawowego, dlatego upewnij się, że w zasadach dołącz TrustFrameworkBase.xmlpliki TrustFrameworkLocalization.xml i z TrustFrameworkExtensions.xml pakietu startowego SocialAndLocalAccounts.

Dodawanie typów oświadczeń usługi Azure AD B2C

W zasadach dodaj następujące typy oświadczeń do <ClaimsSchema> elementu w programie <BuildingBlocks>.

Te typy oświadczeń są niezbędne do wygenerowania i zweryfikowania adresu e-mail przy użyciu jednorazowego kodu hasła (OTP).

<!--
<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> -->

Dodawanie przekształcenia oświadczeń

Następnie potrzebne jest przekształcenie oświadczeń w celu wyprowadzenia oświadczenia ciągu JSON, które będzie treścią żądania wysłanego do mailjet.

Struktura obiektu JSON jest definiowana przez identyfikatory w notacji kropkowej parametrów InputParameters i TransformationClaimTypes elementu InputClaims. Liczby w notacji kropkowej oznaczają tablice. Wartości pochodzą z wartości InputClaims i właściwości InputParameters "Value". Aby uzyskać więcej informacji na temat przekształceń oświadczeń JSON, zobacz Przekształcenia oświadczeń JSON.

Dodaj następujące przekształcenie oświadczeń do <ClaimsTransformations> elementu w programie <BuildingBlocks>. Wprowadź następujące aktualizacje w pliku XML przekształcania oświadczeń:

  • Messages.0.TemplateID Zaktualizuj wartość InputParameter przy użyciu identyfikatora szablonu transakcyjnego Mailjet utworzonego wcześniej w temacie Tworzenie szablonu mailjet.
  • Messages.0.From.Email Zaktualizuj wartość adresu. Użyj prawidłowego adresu e-mail, aby zapobiec oznaczeniu weryfikacyjnej wiadomości e-mail jako spamu.
  • Zaktualizuj wartość parametru wejściowego wiersza tematu Messages.0.Subject przy użyciu wiersza tematu odpowiedniego dla twojej organizacji.
<!-- 
<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> -->

Dodawanie definicji zawartości identyfikatora DataUri

Poniżej przekształceń oświadczeń w programie <BuildingBlocks>dodaj następujący element ContentDefinition , aby odwołać się do identyfikatora URI danych w wersji 2.1.2:

<!--
<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> -->

Tworzenie kontrolek wyświetlania

Kontrolka wyświetlania weryfikacji służy do weryfikowania adresu e-mail przy użyciu kodu weryfikacyjnego wysyłanego do użytkownika.

Ta przykładowa kontrolka wyświetlania jest skonfigurowana do:

  1. email Zbierz typ oświadczenia adresu od użytkownika.

  2. Korzystając z akcji, wygeneruj SendCode kod OTP i wyślij wiadomość e-mail z kodem OTP do użytkownika.

    Send verification code email action

  3. Poczekaj, aż użytkownik podać verificationCode typ oświadczenia z kodem wysłanym do użytkownika.

  4. email Wróć do własnego profilu technicznego, który zawiera odwołanie do tej kontrolki wyświetlania.

W obszarze definicje zawartości w obszarze <BuildingBlocks>dodaj następujący element DisplayControl typu VerificationControl do zasad.

<!--
<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> -->

Dodawanie profilów technicznych OTP

Profil GenerateOtp techniczny generuje kod dla adresu e-mail. Profil VerifyOtp techniczny weryfikuje kod skojarzony z adresem e-mail. Możesz zmienić konfigurację formatu i wygaśnięcia jednorazowego hasła. Aby uzyskać więcej informacji na temat profilów technicznych OTP, zobacz Definiowanie jednorazowego profilu technicznego hasła.

Uwaga

Kody OTP generowane przez protokół Web.TPEngine.Providers.OneTimePasswordProtocolProvider są powiązane z sesją przeglądarki. Oznacza to, że użytkownik może wygenerować unikatowe kody OTP w różnych sesjach przeglądarki, które są prawidłowe dla odpowiednich sesji. Natomiast kod OTP generowany przez wbudowanego dostawcę poczty e-mail jest niezależny od sesji przeglądarki, więc jeśli użytkownik wygeneruje nowy kod OTP w nowej sesji przeglądarki, zastępuje poprzedni kod OTP.

Dodaj następujące profile techniczne do <ClaimsProviders> elementu .

<!--
<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> -->

Dodawanie profilu technicznego interfejsu API REST

Ten profil techniczny interfejsu API REST generuje zawartość poczty e-mail (przy użyciu formatu Mailjet). Aby uzyskać więcej informacji na temat profilów technicznych RESTful, zobacz Definiowanie profilu technicznego RESTful.

Podobnie jak w przypadku profilów technicznych OTP, dodaj następujące profile techniczne do <ClaimsProviders> elementu .

<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>

Tworzenie odwołania do kontrolek wyświetlania

W ostatnim kroku dodaj odwołanie do utworzonego kontrolki DisplayControl. Zastąp istniejące LocalAccountSignUpWithLogonEmail i LocalAccountDiscoveryUsingEmailAddress samodzielne profile techniczne skonfigurowane w zasadach podstawowych następującym fragmentem kodu XML. Jeśli użyto starszej wersji zasad usługi Azure AD B2C, te profile techniczne są używane DisplayClaims z odwołaniem do .DisplayControl

Aby uzyskać więcej informacji, zobacz Samodzielny profil techniczny i 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>

[Opcjonalnie] Lokalizowanie wiadomości e-mail

Aby zlokalizować wiadomość e-mail, musisz wysłać zlokalizowane ciągi do poczty Mailjet lub dostawcy poczty e-mail. Możesz na przykład zlokalizować temat wiadomości e-mail, treść, wiadomość kodowa lub podpis wiadomości e-mail. W tym celu można użyć przekształcenia oświadczeń GetLocalizedStringsTransformation , aby skopiować zlokalizowane ciągi do typów oświadczeń. Przekształcenie GenerateEmailRequestBody oświadczeń, które generuje ładunek JSON, używa oświadczeń wejściowych zawierających zlokalizowane ciągi.

  1. W zasadach zdefiniuj następujące oświadczenia ciągów: temat, komunikat, kodIntro i podpis.

  2. Zdefiniuj przekształcenie oświadczeń GetLocalizedStringsTransformation w celu zastąpienia zlokalizowanych wartości ciągów do oświadczeń z kroku 1.

  3. Zmień przekształcenie oświadczeń, GenerateEmailRequestBody aby używać oświadczeń wejściowych przy użyciu następującego fragmentu kodu XML.

  4. Zaktualizuj szablon mailjet, aby użyć parametrów dynamicznych zamiast wszystkich ciągów, które zostaną zlokalizowane przez usługę Azure AD B2C.

    <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. Dodaj następujący element Lokalizacja .

    <!--
    <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. Dodaj odwołania do elementów LocalizedResources, aktualizując element ContentDefinitions .

    <!--
    <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. Na koniec dodaj następujące przekształcenia oświadczeń wejściowych do LocalAccountSignUpWithLogonEmail profilów technicznych i .LocalAccountDiscoveryUsingEmailAddress

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

[Opcjonalnie] Lokalizowanie interfejsu użytkownika

Element Lokalizacja umożliwia obsługę wielu ustawień regionalnych lub języków w zasadach dotyczących podróży użytkownika. Obsługa lokalizacji w zasadach umożliwia udostępnianie ciągów specyficznych dla języka zarówno dla elementów interfejsu użytkownika kontrolki wyświetlania weryfikacji, jak i jednorazowych komunikatów o błędach hasła. Dodaj następujący localizedString do lokalizacjiLokalizowaneResources.

<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>

Następne kroki