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

如何通过Graph API获取收件人邮箱?代码问题求助

问题:无法从Graph API的Message对象中正确提取ToRecipients的邮箱地址

我使用Microsoft Graph SDK的C#代码获取邮件的toRecipients属性,但无法像访问sender或from那样通过GetToEmail.ToRecipients.EmailAddress.Address获取邮箱地址,代码如下:

var GetToEmail = await graphClient.Users[$"{_Email}"].MailFolders["Inbox"]
                        .ChildFolders[$"{SubFolderId1}"]
                        .ChildFolders[$"{SubFolderId2}"]
                        .Messages[$"{MessageID}"]
                        .Request()
                        /*.Select(eml => new
                        {
                            eml.Id,
                            eml.From,
                            eml.ToRecipients
                        })*/
                        .GetAsync();

foreach (var recipient in GetToEmail.ToRecipients)
{
    WriteLogClass.WriteToLog(3, $"{recipient}");
}

通过Graph Explorer查看JSON响应,确认数据是正常返回的:

{
    "sender": {
        "emailAddress": {
            "name": "CTDS Servicedesk",
            "address": "ctds.servicedesk@kghcustoms.com"
        }
    },
    "from": {
        "emailAddress": {
            "name": "CTDS Servicedesk",
            "address": "ctds.servicedesk@kghcustoms.com"
        }
    },
    "toRecipients": [
        {
            "emailAddress": {
                "name": "Sandaruwan Samaraweera",
                "address": "sandaruwan.s@pro-account.lk"
            }
        }
    ],
    "ccRecipients": [],
    "bccRecipients": [],
    "replyTo": [],
    "flag": {
        "flagStatus": "notFlagged"
    }
}

解决方案

核心问题是ToRecipients是集合类型(对应JSON中的数组),而sender/from是单个对象,因此不能直接通过集合访问EmailAddress属性,必须遍历集合中的每个Recipient对象。同时建议启用Select语句只请求需要的字段,提升请求性能。

修改后的代码示例:

var GetToEmail = await graphClient.Users[$"{_Email}"].MailFolders["Inbox"]
                        .ChildFolders[$"{SubFolderId1}"]
                        .ChildFolders[$"{SubFolderId2}"]
                        .Messages[$"{MessageID}"]
                        .Request()
                        .Select(eml => new
                        {
                            eml.ToRecipients
                        })
                        .GetAsync();

foreach (var recipient in GetToEmail.ToRecipients)
{
    // 正确提取收件人邮箱地址和显示名
    var email = recipient.EmailAddress.Address;
    var displayName = recipient.EmailAddress.Name;
    WriteLogClass.WriteToLog(3, $"收件人:{displayName} <{email}>");
}

说明

  • ToRecipients的类型是IList<Recipient>,集合本身没有EmailAddress属性,只有集合内的每个Recipient实例才有该属性,因此必须通过循环遍历每个元素来获取邮箱地址。
  • 启用Select可以减少Graph API返回的数据量,避免加载不需要的邮件属性,提升请求效率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 05:27:28