Microsoft Graph API-以其他用户身份发送电子邮件

Microsoft Graph API - Sending email as another user(Microsoft Graph API-以其他用户身份发送电子邮件)
本文介绍了Microsoft Graph API-以其他用户身份发送电子邮件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我们的应用程序中,我们需要通过电子邮件向用户发送各种事件触发器的通知。

如果我以"我"的身份发送当前用户,则可以发送电子邮件,但尝试以另一个用户帐户发送会返回错误消息,如果通知不是用户自己发送的,并且可能包含我们不希望在已发送文件夹中四处漂浮的信息,我更希望如此。

有效方式:

await graphClient.Me.SendMail(email, SaveToSentItems: false).Request().PostAsync();

什么不起作用:

string FromUserEmail = "notifications@contoso.com";
await graphClient.Users[FromUserEmail].SendMail(email, SaveToSentItems: false).Request().PostAsync();

还尝试直接使用用户对象ID:

await graphClient.Users["cd8cc59c-0815-46ed-aa45-4d46c8a89d72"].SendMail(email, SaveToSentItems: false).Request().PostAsync();

我的应用程序具有由所有者/管理员启用并授予Graph API"Send mail as any user"的权限。

接口返回的错误信息:

代码:ErrorFolderNotFound消息:指定的文件夹无法 在商店找到的。

我认为此错误可能是因为通知帐户没有已发送文件夹,所以我将SaveToSentItems值设置为False,但仍然收到相同的错误。

我需要检查帐户本身是否有任何设置才能允许应用使用此帐户发送邮件,或者此操作是否有效?

我已在此处签出文档: https://developer.microsoft.com/en-us/graph/docs/api-reference/v1.0/api/user_sendmail

它似乎支持我正在尝试执行的操作,但没有引用除"已发送邮件"文件夹之外的任何文件夹,我告诉API无论如何不要将其保存到该文件夹。

我们不打算在这里模拟任何实际用户,只是从应用程序内部通过此特定帐户发送通知电子邮件(我知道这在技术上是模拟的,但不是真正的实体)。

推荐答案

只要您使用委派权限(即当用户登录时),即使您的管理员已同意Mail.Send.Shared,它也不会授予对租户中所有邮箱的访问权限。这些OAuth权限不会覆盖用户的现有权限(和限制)。

如果用户尚未配置能够"以"Notify@contoso.com用户的身份"发送"的权限,则您将看到此错误。

若要使其正常工作,您需要将"发送为"权限实际授予将使用您的应用程序的所有用户。

这是一件微妙的事情,诚然有点令人困惑。在Azure门户中,权限的描述略有不同,具体取决于您查看的是应用程序权限还是委派权限

  • 应用:Send mail as any user
  • 委托:Send mail on behalf of others

由于您使用的是"委派",因此权限不允许您以任何用户身份发送,只能代表登录用户有权以身份发送的任何人员发送。

您可以在这里使用另一种方法来避免将这些权限授予所有用户(这将允许他们通过Outlook等进行发送)将是让您的后端应用程序使用客户端凭据流来获取仅应用程序令牌。在这种情况下,应用程序本身将拥有以任何用户身份发送的权限。

这篇关于Microsoft Graph API-以其他用户身份发送电子邮件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

DispatcherQueue null when trying to update Ui property in ViewModel(尝试更新ViewModel中的Ui属性时DispatcherQueue为空)
Drawing over all windows on multiple monitors(在多个监视器上绘制所有窗口)
Programmatically show the desktop(以编程方式显示桌面)
c# Generic Setlt;Tgt; implementation to access objects by type(按类型访问对象的C#泛型集实现)
InvalidOperationException When using Context Injection in ASP.Net Core(在ASP.NET核心中使用上下文注入时发生InvalidOperationException)
LINQ many-to-many relationship, how to write a correct WHERE clause?(LINQ多对多关系,如何写一个正确的WHERE子句?)