如何避免通过MS Graph API发送的邮件进入垃圾邮箱
自定义域名通过MS Graph API发邮件进垃圾邮箱的SPF/DKIM配置问题
问题背景
用Outlook发送自定义域名(platformperry.com)邮件时,可正常进入收件人收件箱;但通过C#程序调用MS Graph API代用户发送时,邮件会被归为垃圾邮件,推测原因是API发送的邮件缺少SPF和DKIM验证。
此前使用第三方邮件服务(如Namecheap)时,直接添加服务商提供的SPF、MX、DKIM记录到Azure DNS即可正常使用。但本次需全Azure环境集成,已完成自定义域名的DNS验证,却遇到两种不同的DKIM配置路径,不确定哪种适用:
- Azure门户Email Communication Service路径:创建服务并添加自定义域名后,平台提供域名验证、SPF及DKIM记录,手动添加到Azure DNS后显示已验证,但DNS检测工具无法检测到CNAME记录(已等待15分钟)。
- Microsoft安全中心路径:该平台要求添加的两条CNAME记录与Azure门户提供的不同,添加后同样无法被DNS检测工具识别。
代码示例
var requestBody = new Microsoft.Graph.Users.Item.SendMail.SendMailPostRequestBody { Message = new Message { From = new Recipient { EmailAddress = new EmailAddress { Address = emailMessage.From.EmailAddress, }, }, Subject = emailMessage.Subject, ToRecipients = ToRec, CcRecipients = CcRec, BccRecipients = BccRec, Attachments = attachments, } }; await GetGraphClientWithManagedIdentityOrDevClient().Users["admin@platformperry.com"].SendMail.PostAsync(requestBody);
解决方案
1. 明确两种DKIM配置的适用场景
- Azure Email Communication Service(ACS)的DKIM配置:仅适用于通过ACS自身API发送邮件的场景,不适用于MS Graph API代Exchange Online用户发件。
- Microsoft 365安全中心的DKIM配置:这是针对Exchange Online(包括Outlook、MS Graph API代用户发件)的正确配置路径,必须使用该方案。
2. 正确配置Exchange Online的SPF和DKIM
- SPF记录:在Azure DNS中添加/更新SPF记录,确保包含Exchange Online的SPF规则,格式如下:
若之前添加过ACS的SPF记录,可合并为:v=spf1 include:spf.protection.outlook.com -allv=spf1 include:spf.protection.outlook.com include:azurecomm.net -all - DKIM配置步骤:
- 登录Microsoft 365安全中心,进入「电子邮件 > DKIM」。
- 找到域名platformperry.com,点击「创建DKIM密钥」。
- 复制生成的两条CNAME记录(格式示例:
selector1._domainkey.platformperry.com指向selector1-platformperry-com._domainkey.xxx.onmicrosoft.com)。 - 登录Azure DNS,添加这两条CNAME记录,TTL建议设为3600。
- 返回安全中心,点击「启用DKIM」。
3. DNS记录生效注意事项
DNS记录全球传播通常需要24-48小时,15分钟远未达到生效时间。可通过本地命令验证:
打开命令提示符执行:nslookup selector1._domainkey.platformperry.com,若能返回正确的目标域名,说明记录已生效。
4. Graph API发件额外优化
- 确保Graph Client使用的身份是已授权发件的Exchange Online用户(代码中的
admin@platformperry.com),且该用户邮箱已完成域名关联验证。 - 优化邮件内容:避免纯文本无格式、避免敏感关键词、添加合理正文,降低垃圾邮件评分。
内容的提问来源于stack exchange,提问作者Qiuzman
相关产品推荐
相关产品推荐

