通过 Microsoft Graph 作为应用程序发送邮件(任何用户)

Bre*_*den 8 microsoft-graph-mail microsoft-graph-api

我们最近从本地交换迁移到 Microsoft 365,我想为所有用户打开 2FA(启用安全默认值)。但是,这会禁用我们一直用于从通讯组地址发送邮件的 SMTP 身份验证。(无法通过 EWS 实现,因为它没有物理邮箱)

据我所知,唯一的方法是设置 SMTP 中继或通过 Microsoft Graph 发送。

我尝试过使用 Microsoft Graph 路线,这是迄今为止我所得到的。

  1. 在 Azure Active Directory > 应用程序注册中创建应用程序

  2. 添加Mail.SendUser.Read.All(应用程序,未委派)API 权限并已授予管理员同意。

  3. 使用以下命令请求令牌

  4. 一旦我有了令牌,现在我执行发送一些邮件的请求

    • https://graph.microsoft.com/v1.0/users/{fromAddress}/sendMail
    • fromAddress当请求令牌的用户的电子邮件地址是时,这有效,但是当我尝试从不同的地址发送时,它会出现此错误{"error":{"code":"ErrorAccessDenied","message":"Access is denied. Check credentials and try again."}}
    • 我什至尝试为SendAs我尝试发送的邮箱的令牌用户添加权限,但这没有任何区别。无论如何 - 我希望能够以任何用户身份发送,而无需向每个邮箱委派权限。

很高兴有任何帮助。谢谢!!

Dan*_*tan 8

您所得到的行为是预期的,因为您正在使用委派权限 -授权代码流。此流程不允许您的应用以除登录/“请求令牌”的用户之外的任何用户身份发送电子邮件。

在您的情况下,您可以将权限添加为应用程序权限,然后将客户端凭据流与秘密或证书一起使用(更安全)。您的令牌请求将类似于“获取访问令牌”部分。请注意,这意味着两件事:

  • 您的应用程序需要在服务器端进行保护以保护凭据。
  • 管理员需要同意 Azure AD 上的权限
  • 您的应用程序将能够以租户中的任何用户身份发送电子邮件,因此它非常敏感。
  • 有了应用程序权限,您只需要Mail.Send