C#使用MailKit通过Office 365发送邮件进入垃圾箱问题求助
解决方案
- 核对域名DNS反垃圾配置
这是邮件进入垃圾箱最常见的原因,你需要为发件域名配置三类DNS记录:
- SPF记录:TXT类型,值为
v=spf1 include:spf.protection.outlook.com -all,确保覆盖Office365的发件IP段 - DKIM记录:在Office365 admin中心为你的发件域名启用DKIM签名,将生成的公钥配置为DNS的TXT记录
- DMARC记录:TXT类型,初始可配置为
v=DMARC1; p=none; sp=none; rua=mailto:dmarc@你的域名,后续可根据反馈调整策略严格度
统一发件人与认证账号
你现有代码中发件人邮箱为simon.price@xxxx.co.uk,认证使用的是simon.price@sxxx.co.uk,二者域名不一致,Office365会将这类 mismatch 判定为高风险,直接提升垃圾邮件评分,必须保证发件人地址和SMTP认证地址完全一致。优化邮件内容结构
- 不要仅发送简单的测试文本,现有内容
sample test属于典型的垃圾邮件特征词汇,测试时尽量使用接近真实业务场景的内容 - 不要仅提供HTML格式的正文,同时补充纯文本版本的正文,降低反垃圾系统的评分
- 主题避免使用测试、推广、中奖等敏感词汇
调整SMTP连接参数
将SecureSocketOptions.Auto显式修改为SecureSocketOptions.StartTls,明确使用TLS加密传输,避免自动识别时出现降级导致的安全风险判定。排查IP与租户配置
- 核查你发件服务器的公网IP是否在全球反垃圾IP黑名单中,若在名单内需申请移除
- 检查Office365租户的垃圾邮件过滤规则,可先将发件地址加入收件方的安全发件人列表验证,若加入后不再进入垃圾箱则可排除代码问题
修正后参考代码
var message = new MimeMessage(); // 发件人地址与后续认证地址完全一致 message.From.Add(new MailboxAddress("Simon Price", "simon.price@sxxx.co.uk")); message.To.Add(new MailboxAddress("收件人名称", "实际收件人邮箱")); message.Subject = "符合业务场景的正规主题"; // 同时构建纯文本和HTML版本正文 var bodyBuilder = new BodyBuilder(); bodyBuilder.TextBody = "邮件对应的纯文本内容,和HTML内容信息一致"; bodyBuilder.HtmlBody = @"<p>正式的HTML邮件内容,避免简单测试文本</p>"; message.Body = bodyBuilder.ToMessageBody(); using (var client = new SmtpClient()) { // 显式指定StartTls加密 client.Connect("smtp.office365.com", 587, SecureSocketOptions.StartTls); client.Authenticate("simon.price@sxxx.co.uk", "你的账号凭证"); client.Send(message); client.Disconnect(true); }
内容的提问来源于stack exchange,提问作者Simon Price
相关产品推荐
相关产品推荐

