从Provider A发往MS365的邮件无收件人邮箱地址问题求助
问题描述
我从Provider A托管的邮箱#1向MS365托管的邮箱#2发送邮件(通过Outlook手动新建发送,无代码介入),邮箱#2能正常接收,但邮件仅显示收件人名称,无To邮箱地址,CC和BCC字段也为空。
已完成的排查操作
- 在MS Outlook客户端查看:仅显示「To: 名称」,无邮箱地址且无法查看详情;
- 查看原始邮件(属性、完整MIME消息及头信息):To头仅显示名称,收件人邮箱及域名未出现在任何头信息或正文中;
- 通过MS Graph API获取邮件:
MailAddress对象仅包含名称,无邮箱地址。
Graph API相关代码片段
获取邮件的代码:
using Microsoft.Graph.Models; ... Microsoft.Graph.GraphServiceClient _Client = ... ... List<Message> fetched = (await _Client.Users[_Username].MailFolders["Inbox"].Messages .GetAsync((requestConfiguration) => { requestConfiguration.QueryParameters.Select = ["*"]; // 显式查询以获取尽可能多的字段 }) )?.Value ?? [];
遍历收件人获取地址的常规代码:
foreach (var message in fetched) foreach (var recipient in (message?.ToRecipients ?? [])) { var toAddress = recipient?.EmailAddress?.Address; Console.WriteLine($"Look: {toAddress}"); }
当前场景中toAddress为null。
注:该问题仅在Provider A的邮箱发送邮件时出现,其他提供商发送的邮件无此问题,正在测试是否Provider A所有邮件均存在该问题。
待解决问题
- 如何查看并提取收件人邮箱地址?应从何处查找?
- 该问题产生的原因是什么?是发送方还是接收方导致?
回答
问题1:提取收件人邮箱地址的可行方法
- 查看MS365邮件跟踪日志:登录Exchange Admin Center,进入「邮件流」→「邮件跟踪」,通过发件人、收件人、时间范围定位目标邮件,这里会记录邮件投递时的真实收件人邮箱地址,不受邮件头显示限制;
- 使用Exchange Online PowerShell查询:执行
Get-MessageTrace命令获取邮件的完整跟踪数据,直接提取收件人地址:Get-MessageTrace -SenderAddress "邮箱#1完整地址" -RecipientAddress "邮箱#2完整地址" -StartDate (Get-Date).AddDays(-1) - 联系Provider A获取发送日志:请求Provider A提供该邮件的原始SMTP发送数据,确认邮件发送时的收件人字段是否包含邮箱地址。
问题2:问题原因分析
大概率是发送方(Provider A)的邮件服务器配置异常:
- 符合SMTP标准的邮件,To头应包含「名称 <邮箱地址>」格式,至少需包含邮箱地址字段;
- Provider A的邮件服务器在构建邮件时,仅写入了收件人名称,未添加对应的邮箱地址信息;
- MS365能完成投递是因为SMTP传输层已传递收件人地址,但邮件头缺失该信息,导致Outlook客户端和Graph API无法解析出地址;
- 其他提供商无此问题,进一步验证问题出在Provider A的发送环节,而非MS365的接收或解析逻辑。
内容的提问来源于stack exchange,提问作者pcbulldozer
相关产品推荐
相关产品推荐

