标签: outlook-restapi

在没有 Office 365 订阅的情况下使用 Azure 多租户应用程序访问用户日历信息

我们编写了一个服务应用程序,它从组织(租户)的多个日历中读取 Office 365 日历信息,并对条目进行一些分析。为此,我们使用 Office 365 REST API。
我们有多个客户端组织(租户)需要此功能,因此我按照此处的@Matthias Leibmann文章中的步骤操作使用 Office 365 邮件、日历和联系人 API 构建守护程序或服务应用程序(OAuth2 客户端凭据流)

我们在开发过程中使用了 Azure 试用帐户和 Office 365 试用订阅,一切运行良好,我们已经成功访问​​了多个租户的数据。
但是,当我尝试使用我们的生产 Azure 帐户和生产 Azure Active Directory (AAD) 设置多租户应用程序时,我意识到我无法在“权限”中定义“Office 365 Exchange Online”所需的应用程序权限。其他应用程序”部分,因为我们的生产 AAD 帐户未链接到 Office 365 帐户。
我假设我们可以使用我们的生产 azure 帐户注册 Office 365 的开发人员试用版,这将允许我们设置所需的权限,但我不知道 Office 365 试用版到期后 30 天会发生什么。

有没有办法在不将 Office 365 帐户链接到我们的生产 AAD 的情况下定义这些必需的权限?
这只是 Azure 前端的工具问题,还是存在技术原因,即使我们总是连接到其他公司的 Office 365 帐户,我们也需要自己的 Office 365 订阅?

api rest azure office365 outlook-restapi

5
推荐指数
1
解决办法
518
查看次数

通过 Office 365 REST API 获取“已取消”的事件

我在想办法在 Office 365 上获取“已取消”的事件时遇到了麻烦。这似乎是一件非常基本的事情,但是我试图找出如何做到这一点的尝试都没有奏效。

阅读 Office 365 API 文档,我可以看到Event资源具有IsCancelled布尔属性,该属性应显示true事件是否已取消/删除。

我已经尝试了多种通过 API 获取事件的方法,但都没有成功。似乎一旦一个事件被取消,它就会从返回的结果中删除。

我还看到我可以使用OData 查询参数来尝试过滤事件获取响应的结果,所以我什至尝试$filter=IsCancelled eq true在请求上设置查询参数,但我得到的只是一个带有空数据数组的响应。:/

有什么明显的我遗漏了吗?这里的文档很简单。

outlook calendar exchangewebservices office365 outlook-restapi

5
推荐指数
1
解决办法
1666
查看次数

使用 Microsoft Graph API 将在线会议 URL 添加到事件

任何人都可以帮助我使用 Microsoft Graph API 创建一个事件。

理想的行为是添加一个指向事件的链接,该链接在大多数日历客户端中都是可点击的。这是我使用的事件有效负载的示例:

{
    ...
    "body": {
        "ContentType": "HTML",
        "Content": "<a href=\"https://somelink.com\">Start Online Meeting</a>"
    },
    "onlineMeetingUrl": "https://somelink.com"
}
Run Code Online (Sandbox Code Playgroud)

此有效负载作为 POST 请求发送到 https://graph.microsoft.com/v1.0/me/events

目前的回应是:

{ 
 ...
 'onlineMeetingUrl': null,
 ...
}
Run Code Online (Sandbox Code Playgroud)

和事件的详细信息在日历应用程序中不可点击并以纯文本形式显示

Start Online Meeting

或转换为

Start Online Meeting <https://somelink.com>

在谷歌日历中

感谢帮助!

outlook office365 outlook-restapi microsoft-graph-api

5
推荐指数
1
解决办法
1554
查看次数

Outlook加载项Office-Js身份验证

我正在构建一个基于React的Outlook加载项.我使用YeomanGenerator设置我的项目.我正在尝试使用Office-Js-Helpers设置身份验证.我能够创建验证器,注册microsoftAuth端点.我的添加打开对话框,我能够登录等,并在对话框的URL中返回访问令牌,但对话框永远不会关闭,并且我尝试进行身份验证后获取我的令牌是success/ thenfunction从未打过.如果我手动关闭对话窗口,catch则触发.

我不知道我是否正确设置我的项目.这是main.tsx我打开加载项时第一个加载的页面中的代码.这是代码(有一些虚拟数据 - 例如我的clientId是一个实际的,我刚刚阻止了它).我已经在我的应用程序帐户中设置了redirectUrl https://localhost:3000/signin-microsoft.请告诉我您可能需要的其他信息 - 我100%坚持到这里.

import * as React from 'react'
import { render } from 'react-dom'
import { App } from './components/app'
import { Progress } from './components/progress'
import './assets/styles/global.scss'
import { Authenticator, Utilities, DefaultEndpoints } from '@microsoft/office-js-helpers'

(() => {
    const title = 'My App';
    const container = document.querySelector('#container');
    const clientId = 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'

    /* Render application after Office initializes */
    Office.initialize = () …
Run Code Online (Sandbox Code Playgroud)

typescript outlook-restapi office-js

5
推荐指数
1
解决办法
910
查看次数

使用 msal.js 时保持登录状态

我正在为 Microsoft ToDo 任务构建一个小型 JS 应用程序,并使用 msal.js 库来适应身份验证过程。这工作得很好,我收到一个弹出窗口,我验证了我的个人资料,弹出窗口关闭,我的任务出现在我的屏幕上。

但是:它好像不记得我之前认证过;每次我运行 webpack 应用程序并且页面启动时,它都会显示弹出窗口并要求身份验证。一旦我通过身份验证并刷新页面,它只会向我显示任务,而不会再次显示弹出窗口。我没有尝试等待一个小时,但我认为这与未正确刷新我的访问令牌有关。我对 Outlook/Microsoft API 的了解并不多,所以我可以真正确定我是否正确使用它。

简而言之:如何进行一次身份验证,以便下次启动应用程序时显示任务而无需再次进行身份验证?

我的初始化函数

  this.userAgentApplication = new Msal.UserAgentApplication(microsoftTasksClientId, null, function (errorDes, token, error, tokenType) {
    // this callback is called after loginRedirect OR acquireTokenRedirect (not used for loginPopup/aquireTokenPopup)
    console.log(token)
  })
  let user = this.userAgentApplication.getUser()
  if (!user) {
    const self = this
    // this.userAgentApplication = new Msal.UserAgentApplication(microsoftTasksClientId)
    this.userAgentApplication.loginPopup([`${this.apiRootUrl}Tasks.readwrite`]).then(function (token) {
      self.idToken = token
      user = self.userAgentApplication.getUser()
      if (user) {
        self.getSilentToken()
      }
    }, function (error) {
      console.log(error)
    })
  } …
Run Code Online (Sandbox Code Playgroud)

javascript outlook-restapi azure-ad-msal

5
推荐指数
1
解决办法
2871
查看次数

Outlook 365 api 中的身份验证

我的用例是:制作一个每小时运行一次的脚本,以提取有关用户日历的信息。

我的脚本在 Python 中运行,我获得了一个令牌,但我无法获得用户的事件。我已在Microsoft 应用程序注册门户中注册了我的应用程序并授予了 Calendar.read 应用程序权限。管理员通过访问/adminconsent端点表示同意。

这是我获取令牌的代码(此处为文档):

url = 'https://login.microsoftonline.com/common/oauth2/v2.0/token'
data = {
    'grant_type': 'client_credentials',
    'client_id': app_id,
    'scope': 'https://graph.microsoft.com/.default',  <--- Really not sure about this here
    'client_secret': client_secret,
}
r = requests.post(url, data=data)
token = r.json().get('access_token')
Run Code Online (Sandbox Code Playgroud)

我应该使用什么范围?文档只提到了上面的一个。

并阅读用户的日历:

url = 'https://outlook.office.com/api/v2.0/users/{}/events'.format(user_email)
headers = {
    'Authorization': 'Bearer {}'.format(token)
}
r = requests.get(url, headers=headers)
Run Code Online (Sandbox Code Playgroud)

我不确定那 users/{user_email}/部分。

我获得了访问令牌,但在尝试读取用户的日历时出现以下错误:

响应 [401]

访问令牌是使用太弱而无法访问此应用程序的身份验证方法获取的。提供的身份验证强度为 1,要求为 2。

python oauth-2.0 outlook-restapi office365api

5
推荐指数
1
解决办法
1万
查看次数

混合环境,404具有内部部署邮箱,200个用于Exchange联机

我编写了一个能够与Exchange Online帐户通信的应用程序,我正在尝试测试以查看使其与在Hybrid中运行的内部部署帐户一起使用所需的步骤.

我有:

  • Windows Server 2012 R2
  • 兑换2016 CU8(带/PrepareAD跑)
  • 互联网访问路径/api/v2.0/autodiscover/autodiscover.json
  • 运行HCW
  • AD Connect正在运行
  • Active Directory与Azure Active Directory同步
  • 我已注册的应用程序的权限看起来很好(阅读日历事件/读写日历事件)

不幸的是,我404在尝试访问日历活动时遇到了问题:

curl -v -H 'Content-Type: application/json' -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJub25jZSI6IkFRQUJBQUFBQUFCSGg0a21TX2FLVDVYcmp6eFJBdEh6RE1mbEZNYTYwaktGRHRhUXp0ZGVkM2V6Z0ZfUzlLMjdDRmQxSHlfZGdRcnR6WlJBczRDV095R3E1Vl9OZW9MSFNKTGpzblNCSDNCQU9oQnBzU18wVmlBQSIsImFsZyI6IlJTMjU2IiwieDV0IjoiU1NRZGhJMWNLdmhRRURTSnhFMmdHWXM0MFEwIiwia2lkIjoiU1NRZGhJMWNLdmhRRURTSnhFMmdHWXM0MFEwIn0.eyJhdWQiOiJodHRwczovL2dyYXBoLm1pY3Jvc29mdC5jb20iLCJpc3MiOiJodHRwczovL3N0cy53aW5kb3dzLm5ldC8wODY1YjBhYi02ZjYwLTQzNjMtYTEwZi05NWU5ZTc5ZjlmODEvIiwiaWF0IjoxNTE4OTc5NzQ0LCJuYmYiOjE1MTg5Nzk3NDQsImV4cCI6MTUxODk4MzY0NCwiYWlvIjoiWTJOZ1lKRE0reDVXbGhWNUlrajUwbDB4THNacEFBPT0iLCJhcHBfZGlzcGxheW5hbWUiOiJIQy1XZWIiLCJhcHBpZCI6ImVkZjlkY2M0LThjNjAtNDg3ZS1hYmUyLTI4MjcyYTRlZGJlMCIsImFwcGlkYWNyIjoiMiIsImlkcCI6Imh0dHBzOi8vc3RzLndpbmRvd3MubmV0LzA4NjViMGFiLTZmNjAtNDM2My1hMTBmLTk1ZTllNzlmOWY4MS8iLCJvaWQiOiJkNTUzMTE2My01MTcxLTRmZjctYTNjMS04NWFlNzUzMjkzNTIiLCJyb2xlcyI6WyJNYWlsLlJlYWRXcml0ZSIsIkNvbnRhY3RzLlJlYWRXcml0ZSIsIkRpcmVjdG9yeS5SZWFkLkFsbCIsIk1haWwuUmVhZCIsIkNhbGVuZGFycy5SZWFkV3JpdGUiXSwic3ViIjoiZDU1MzExNjMtNTE3MS00ZmY3LWEzYzEtODVhZTc1MzI5MzUyIiwidGlkIjoiMDg2NWIwYWItNmY2MC00MzYzLWExMGYtOTVlOWU3OWY5ZjgxIiwidXRpIjoiNkxJT3g1bWQ4ay05ajhBUUtiY2hBQSIsInZlciI6IjEuMCJ9.AWt_ANsH8sk15WeH1AgD6SD0Ki8VILMvzkbSMju_YFGKc5cVkrGp7Skzt64uDM8rI6Py5Y-1c3srXwON2oSihkRskfz5vG4nIlbFnuYd3Ij2Vz1ktpNnCeMAnAK2T8ifk2visRSvchRbuBNZZyamwRjActdDF9BS8NygUgmmygK4mPjOIab17PJPz5PisvRbCA2jBLWLvbu9RYrLH-xGuoLd2PLTbsn2WSVi3er4XztZCcK7XfVWe-0wjrV6qBufd5z0hH_KpQLdzPtLOzSUGUAcXGa0mBPceTWULQvQ-LPcAJO57F0ir5k22fWzlkOfUxQb9eGWREUm1cAPWk3CPw" "https://graph.microsoft.com/v1.0/users/oq@healthcentrified.co.uk/calendar/events"
*   Trying 137.116.241.64...
* Connected to graph.microsoft.com (137.116.241.64) port 443 (#0)
* found 148 certificates in /etc/ssl/certs/ca-certificates.crt
* found 592 certificates in /etc/ssl/certs
* ALPN, offering http/1.1
* SSL connection using TLS1.2 / ECDHE_RSA_AES_256_CBC_SHA384
*        server certificate verification OK
*        server certificate status verification …
Run Code Online (Sandbox Code Playgroud)

outlook-restapi microsoft-graph

5
推荐指数
1
解决办法
478
查看次数

如果事件是系列的一部分,则对 iCalUId 进行过滤将返回空数组

我的问题与这个问题几乎相同。我本来想在那里发表评论,但由于是新用户而无法这样做。

如果我正在查询事件,我请求https://graph.microsoft.com/v1.0/me/events?$filter=iCalUId eq '<iCalUId>'返回事件对象singleInstance(这是预期的)。但是,如果该事件是一系列事件的一部分,我会返回一个空数组。

我不确定我是否遗漏了某些东西或者这是否是预期的行为。我已经搜索了 MS Graph 文档(包括此处此处),但未能找到此行为的原因。

任何对此的帮助将不胜感激。

谢谢!

outlook-restapi microsoft-graph-api

5
推荐指数
1
解决办法
659
查看次数

如何发送嵌套附件?

卡在这里编写 JS 代码以在自定义 Outlook 加载项中通过 REST 发送电子邮件。

场景如下

report
 \
  \---- another message (item attachment)
         \
          \------- attachment (file attachment)
Run Code Online (Sandbox Code Playgroud)

换句话说,我正在发送一条新的报告消息,其中包含另一条消息作为项目附件(工作正常)。

但是现在,问题是,当发送另一条带有附件的消息时,这会失败。打开附加了其他消息的报告不会显示附件。

查询是 POST https://outlook.office365.com/api/v2.0/me/sendmail

已接受退货 202

身体很长,在这个要点上 https://gist.github.com/binarykitchen/2b95331c5c85e7cb4ca6f6917dc67a67

您可以看到 Message has Attachments,其中有一个 Item Attachment(附加另一条消息),其中包含一个名为“bat_kitten.jpeg”的文件附件

为什么这个发送的消息没有这个文件附件,但服务器仍然以接受的 202 响应?

也许有些参数是错误的?不确定要为该文件附件的 ContentId 和 ContentLocation 设置什么?

还是不支持嵌套附件?

任何线索将不胜感激。

outlook-restapi office365api office-js microsoft-graph-api

5
推荐指数
0
解决办法
372
查看次数

Outlook API 错误指定的 OData 类型无效:Microsoft.OutlookServices.FileAttachment

我们有一个功能设置为从我们的 Web 应用程序通过 Outlook 发送电子邮件,它运行良好,但今天早上突然我的电子邮件收件箱充斥着来自我们系统的错误,说由于错误的请求,它无法发送带有 Outlook 的电子邮件. 错误看起来像这样:

{"error":{"code":"BadRequest","message":"Invalid OData type specified: \"Microsoft.OutlookServices.FileAttachment\"","innerError":{"date":"2021-07-02T05:43:00","request-id":"XXX","client-request-id":"XXX"}}}
Run Code Online (Sandbox Code Playgroud)

正如我所说,它昨天有效,但现在不行了。并且其中很多在嵌入的标题图像之外没有特定的附件,自从它工作以来就没有改变。

关于错误原因的任何建议?

outlook azure outlook-restapi microsoft-graph-api

5
推荐指数
1
解决办法
742
查看次数