如何在EWS MAPI中获取邮件发件人?(C# 2023 OAuth2.0 Graph EWS API)
C#控制台应用程序
通过Microsoft.Identity.Web.MicrosoftGraph 2.10.0连接Graph API访问邮箱
现有相关答案均已过时,特此重新提问。
我正在使用C#通过Graph API访问邮箱,尝试读取邮件的发件人信息。基础代码如下:
IUserMailFoldersCollectionPage allMailFolders = await graphClient .Users[username] .MailFolders .Request() .GetAsync(); foreach(var message in messages){ Console.WriteLine("Sender: " + message.Sender.EmailAddress); }
输出的邮箱地址始终为Microsoft.Graph.EmailAddress
仅使用了Microsoft.Identity.Web.MicrosoftGraph版本2.10.0
以下写法因无引用或其他原因无法生效:
message.Sender.Address message.Sender.Name message.Sender.EmailAddress.ToString()
问题原因
Graph API默认采用稀疏加载策略,不会自动返回对象的所有嵌套属性。当前请求未明确指定要获取Sender下的具体字段,导致EmailAddress对象未被完整序列化,直接输出时仅显示类型名称。
解决方法
在请求邮件时,通过Select和Expand方法显式指定需要加载的嵌套属性:
示例代码
// 从目标邮件文件夹获取邮件,这里以收件箱为例 var messages = await graphClient .Users[username] .MailFolders["inbox"] .Messages .Request() .Select("Sender") // 指定要获取Sender属性 .Expand("Sender") // 展开Sender的嵌套结构 .GetAsync(); foreach(var message in messages) { Console.WriteLine($"发件人: {message.Sender.EmailAddress.Name} <{message.Sender.EmailAddress.Address}>"); }
关键说明
Sender的类型是Recipient,必须通过Sender.EmailAddress.Name和Sender.EmailAddress.Address才能访问到具体的名称和邮箱地址,这两个属性需要通过Expand请求才能被返回。- 确保你的应用已被授予
Mail.Read权限,否则会出现访问被拒绝的问题。
内容的提问来源于stack exchange,提问作者Lord Helmet
相关产品推荐
相关产品推荐

