如何在没有用户交互凭据的情况下从Outlook 365帐户读取电子邮件?

时间:2018-05-19 09:50:11

标签: c# office365 microsoft-graph

我的用例如下。守护进程需要定期执行以下操作:

  1. 扫描Office 365中的电子邮件帐户以查找未送达报告
  2. 从电子邮件正文中提取一些信息,
  3. 为从该信息标识的用户帐户执行任务。
  4. 我的方法是使用Microsoft Graph(我是新手)进入并执行此操作 - 但如果有更简单的方法,请告诉我。我在验证和验证时遇到了.NET图形API的问题。在没有用户交互的情况下获取令牌。

    我成功地使用Microsoft Graph控制台示例(https://github.com/microsoftgraph/console-csharp-connect-sample)连接到电子邮件帐户,在Office 365中正常设置应用程序及其权限/范围,并使用应用程序ID和“秘密”连接。

    但是,经过一整天的研究和尝试各种方法在示例应用程序中进行身份验证后,它总是会弹出一个登录窗口(请参阅https://i.imgur.com/SmtPpYd.png),然后才能执行API操作。可悲的是,我没有发现如何在没有用户交互的情况下进行身份验证和获取令牌。

    任何人都可以帮我解释如何修改此示例 - 即如何更改身份验证 - 以便在不要求用户登录的情况下工作?

    我确实拥有完全的管理员权限,因此可以授予Office 365中所需的任何权限,我只需要帮助确定要在控制台应用中授予的内容和要更改的内容以跳过用户交互。这是我第一次遇到MS Graph,我的脑袋正在旋转所以请保持温柔。 :)

    请注意,这最终将作为服务器上的守护程序运行,但最初我只是尝试通过在此控制台应用程序中执行操作来学习。

1 个答案:

答案 0 :(得分:0)

此应用示例正在使用公共客户端(因为您无法控制设备/操作系统/环境而无法存储机密信息),因为您可以看到hereHere使用应用程序公共身份和用户身份(因此提示)获取令牌 您必须用ConfidentialClientApplication替换它,而不是提供额外的秘密(您可以从门户生成),然后用client only token request替换采集。
由于您的应用程序不会保留任何用户身份,因此没有/我的快捷方式可以正常工作 最后,由于您要抓取所有用户,您需要更改您要求管理员权限/范围的权限,并将User.Read.All和User.Read.All替换为User.Read和Mail.Read。 (不要忘记点击"授予权限按钮"保存范围后。 希望这有帮助