C# Can';我不能使用图表创建草稿,但直接发送邮件也可以

C# Can';我不能使用图表创建草稿,但直接发送邮件也可以,c#,microsoft-graph-api,microsoft-graph-sdks,microsoft-graph-mail,C#,Microsoft Graph Api,Microsoft Graph Sdks,Microsoft Graph Mail,最近,微软表示,可以发送附件大于4MB的电子邮件 通过较小的附件,我们可以在一个请求中完成所有操作。 现在我们必须创建草稿,上传附件,然后发送文件 我有一个工作代码,可以在一个请求中发送邮件: var confidentialClientApplication = ConfidentialClientApplicationBuilder .Create(clientId) .WithClientSecret(clientSecret) .WithTenantId(tena

最近,微软表示,可以发送附件大于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
错误:

访问被拒绝。请检查凭据,然后重试


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

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

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

但是,在创建草稿邮件时,您需要
Mail.ReadWrite
。这是因为,与
/sendMail
不同,您需要能够创建、更新并发送消息

以下是所需的步骤和权限:

  • POST/me/messages
    创建邮件草稿(
    Mail.ReadWrite
  • PATCH/me/messages/{id}
    添加/更改草稿内容(
    Mail.ReadWrite
  • POST/me/messages/{id}/attachments
    向草稿添加附件(
    Mail.ReadWrite
  • POST/me/messages/{id}/send
    发送邮件(
    Mail.send
    因此,对于您正在查看的场景,您需要以下范围:

    • User.Read
      (需要验证)
    • Mail.ReadWrite
      (需要构建草稿)
    • Mail.Send
      (请求发送消息)

    我缺少
    邮件。ReadWrite
    权限。谢谢你的帮助!