You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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}>");
}

关键说明

  1. Sender的类型是Recipient,必须通过Sender.EmailAddress.Name和Sender.EmailAddress.Address才能访问到具体的名称和邮箱地址,这两个属性需要通过Expand请求才能被返回。
  2. 确保你的应用已被授予Mail.Read权限,否则会出现访问被拒绝的问题。

内容的提问来源于stack exchange,提问作者Lord Helmet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 00:14:59