【问题标题】:Can't create a draft using Graph, but direct sending mail works fine无法使用 Graph 创建草稿,但直接发送邮件可以正常工作
【发布时间】:2019-11-05 14:24:24
【问题描述】:

最近微软announced 表示可以发送带有大于 4MB 附件的电子邮件。

借助较小的附件,我们可以在一个请求中完成所有操作。 现在我们必须创建一个草稿,上传附件,然后发送文件。

我有一个在单个请求中发送邮件的工作代码:

var confidentialClientApplication = ConfidentialClientApplicationBuilder
    .Create(clientId)
    .WithClientSecret(clientSecret)
    .WithTenantId(tenant)
    .Build();

var authenticationProvider = new ClientCredentialProvider(confidentialClientApplication);
var graphClient = new GraphServiceClient(authenticationProvider);

var email = new Message
{
    Body = new ItemBody
    {
      Content = i + " Works fine! " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
      ContentType = BodyType.Html,
    },
    Subject = "Test" + (j == 0 ? "" : " " + j),
    ToRecipients = recipientList,
    Attachments = att
};

await graphClient
    .Users["test@test.onmicrosoft.com"]
    .SendMail(email, true)
    .Request()
    .WithMaxRetry(5)
    .PostAsync();

上面的代码工作正常,但是当我将最后一行更改为:

Message draft = await graphClient
    .Users["test@test.onmicrosoft.com"]
    .MailFolders
    .Drafts
    .Messages
    .Request()
    .AddAsync(mail);

或到:

Message draft = await graphClient
    .Users["test@test.onmicrosoft.com"]
    .Messages
    .Request()
    .AddAsync(mail);

我收到ErrorAccessDenied 错误:

访问被拒绝。检查凭据并重试。

为什么会在单个请求中发送电子邮件但创建草稿会失败?我需要任何特殊权限吗?

【问题讨论】:

    标签: c# microsoft-graph-api microsoft-graph-sdks microsoft-graph-mail


    【解决方案1】:

    您没有指定您选择了哪些权限范围,但这很可能是问题所在。

    简化的/sendMail 需要Mail.Send 权限。这是一个相当轻量级的范围,旨在为应用程序提供一种无需访问邮箱本身即可发送电子邮件的机制。

    但是,在创建草稿消息时,您需要Mail.ReadWrite。这是因为,与/sendMail 不同,您需要创建、更新和然后发送消息的能力。

    这些是所需的步骤和权限:

    1. POST /me/messages 创建消息草稿 (Mail.ReadWrite)。
    2. PATCH /me/messages/{id} 添加/更改草稿内容 (Mail.ReadWrite)
    3. POST /me/messages/{id}/attachments 将附件添加到草稿 (Mail.ReadWrite)。
    4. POST /me/messages/{id}/send 发送消息 (Mail.Send)。

    因此,对于您正在查看的场景,您需要以下范围:

    • User.Read(需要进行身份验证)
    • Mail.ReadWrite(需要构建草稿)
    • Mail.Send(需要发送消息)

    【讨论】:

    • 我缺少Mail.ReadWrite 权限。感谢您的帮助!
    猜你喜欢
    • 2018-12-02
    • 2012-12-13
    • 2019-06-17
    • 2019-11-13
    • 2020-11-10
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 2018-04-19
    相关资源
    最近更新 更多