如何为Azure AD B2C自定义邮件配置SMTP服务?
Azure AD B2C 配置自定义SMTP邮箱发送SSO邮件的方案
Azure AD B2C的内置SSPR/邮件验证机制不支持直接配置SMTP服务器,要实现用自定义邮箱发送SSO相关的验证邮件,需要通过以下两种官方认可的方案实现:
方案一:集成Azure Communication Services(ACS)
这是微软推荐的原生集成方案,步骤如下:
- 创建并配置ACS资源
- 在Azure门户创建Azure Communication Services资源,获取资源的连接字符串
- 若要使用自定义域名的邮箱发件,需在ACS中完成域名验证,并配置SPF、DKIM、DMARC记录,确保邮件投递可信度
- 在自定义策略中添加ACS技术配置文件
在策略的<ClaimsProviders>节点下添加以下配置,替换占位符为你的实际信息:<ClaimsProvider> <DisplayName>Azure Communication Services</DisplayName> <TechnicalProfiles> <TechnicalProfile Id="Acs-Send-SSO-Verification-Email"> <DisplayName>Send SSO verification email via ACS</DisplayName> <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.AzureCommunicationServicesEmailProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" /> <Metadata> <Item Key="ConnectionString">你的ACS连接字符串</Item> <Item Key="SenderAddress">your-custom-email@yourdomain.com</Item> <Item Key="Subject">SSO登录验证码</Item> <Item Key="HtmlTemplate"> <![CDATA[ <html> <body> <p>你的SSO验证码是:{{{verificationCode}}}</p> </body> </html> ]]> </Item> </Metadata> <InputClaims> <InputClaim ClaimTypeReferenceId="email" PartnerClaimType="to" /> <InputClaim ClaimTypeReferenceId="verificationCode" PartnerClaimType="verificationCode" /> </InputClaims> </TechnicalProfile> </TechnicalProfiles> </ClaimsProvider> - 替换用户旅程中的邮件发送步骤
在你的注册/登录用户旅程里,找到原来调用SSPR技术配置文件的环节,替换为上述ACS的技术配置文件ID,触发邮件发送时就会使用自定义邮箱发件
方案二:通过自定义REST API对接SMTP服务
如果不想用ACS,可自行搭建REST API调用SMTP服务器(或第三方邮件服务如SendGrid、Mailgun):
- 搭建自定义REST API
- 编写接收
收件邮箱、验证码等参数的POST接口,内部调用SMTP服务发送邮件 - 确保API返回符合B2C要求的响应格式(成功返回
{"status": "success"},失败返回包含错误信息的JSON)
- 编写接收
- 在B2C策略中配置REST技术配置文件
在<ClaimsProviders>节点下添加以下配置:<ClaimsProvider> <DisplayName>Custom SMTP Email Service</DisplayName> <TechnicalProfiles> <TechnicalProfile Id="REST-Send-SSO-Email"> <DisplayName>Send SSO email via custom REST API</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域名/send-sso-email</Item> <Item Key="AuthenticationType">None</Item> <!-- 若需认证,可改为Basic或OAuth2 --> <Item Key="SendClaimsIn">Body</Item> </Metadata> <InputClaims> <InputClaim ClaimTypeReferenceId="email" PartnerClaimType="recipientEmail" /> <InputClaim ClaimTypeReferenceId="verificationCode" PartnerClaimType="verificationCode" /> </InputClaims> <UseTechnicalProfileForSessionManagement ReferenceId="SM-Noop" /> </TechnicalProfile> </TechnicalProfiles> </ClaimsProvider> - 更新用户旅程
将用户旅程中原来的邮件发送步骤替换为这个REST技术配置文件的ID即可
关键注意事项
- 自定义邮箱域名必须配置SPF、DKIM、DMARC记录,否则邮件极易被标记为垃圾邮件
- 若使用第三方邮件服务(如SendGrid),可直接调用其官方API,无需自行搭建SMTP服务器
- 内置的SSPR技术配置文件仅支持Azure AD默认发件邮箱,无法自定义SMTP,必须替换为上述方案
内容的提问来源于stack exchange,提问作者TheGreatApe
相关产品推荐
相关产品推荐

