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

使用C# MS Graph API添加邮件附件时遇编译错误求助

解决方案与错误分析

错误原因解析

  1. CS0122:Attachment构造函数无法访问
    MS Graph SDK中的Attachment是抽象基类,其构造函数为保护级别,不允许直接通过new Attachment()实例化,必须使用它的派生类:MessageAttachment(用于将邮件作为附件添加)或FileAttachment(用于添加文件附件)。

  2. CS0117:Attachment无Item定义
    Item属性是MessageAttachment类的特有成员,Attachment基类并未包含该属性,因此必须使用MessageAttachment类型才能访问Item。

正确实现代码

方式1:手动创建带原邮件附件的转发邮件

using Microsoft.Graph;
using Azure.Identity;

// 初始化GraphServiceClient(根据你的认证方式调整,此处以客户端凭据为例)
var scopes = new[] { "https://graph.microsoft.com/.default" };
var clientId = "你的客户端ID";
var tenantId = "你的租户ID";
var clientSecret = "你的客户端密钥";
var credential = new ClientSecretCredential(tenantId, clientId, clientSecret);
var graphClient = new GraphServiceClient(credential, scopes);

// 原邮件ID
var originalMsgId = "要转发的邮件ID";

// 获取原邮件基本信息
var originalMessage = await graphClient.Me.Messages[originalMsgId]
    .Request()
    .Select(m => new { m.Subject, m.Body, m.Id })
    .GetAsync();

// 构建转发邮件
var forwardMsg = new Message
{
    Subject = $"Fwd: {originalMessage.Subject}",
    Body = new ItemBody
    {
        ContentType = BodyType.Html,
        Content = "<p>请查看附件中的原邮件内容</p>"
    },
    ToRecipients = new List<Recipient>
    {
        new Recipient
        {
            EmailAddress = new EmailAddress { Address = "收件人邮箱@example.com" }
        }
    },
    Attachments = new MessageAttachmentsCollectionPage()
};

// 创建MessageAttachment并添加原邮件作为附件
var msgAttachment = new MessageAttachment
{
    Name = $"{originalMessage.Subject}.eml",
    ContentType = "message/rfc822",
    Item = originalMessage
};
forwardMsg.Attachments.Add(msgAttachment);

// 发送邮件
await graphClient.Me.SendMail(forwardMsg, saveToSentItems: true)
    .Request()
    .PostAsync();

方式2:使用Graph API自带的Forward方法(更简洁)

如果只是单纯转发邮件,推荐直接使用SDK提供的Forward方法,它会自动处理原邮件的包含逻辑,无需手动添加附件:

await graphClient.Me.Messages[originalMsgId]
    .Forward(
        new Message
        {
            ToRecipients = new List<Recipient>
            {
                new Recipient
                {
                    EmailAddress = new EmailAddress { Address = "收件人邮箱@example.com" }
                }
            },
            Comment = "这是转发的备注信息"
        }
    )
    .Request()
    .PostAsync();

关键注意事项

  • 确保已安装正确的NuGet包:Microsoft.Graph和Azure.Identity(根据认证方式选择对应包)。
  • 避免直接操作Attachment基类,根据附件类型选择对应的派生类。
  • 优先使用Graph API原生的转发方法,减少手动构建的出错概率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 05:51:05