我按照下面的教程使用outlook api获取邮件.这有效,但要求用户每次登录才能进行访问.有没有办法提供永久/离线访问?类似于gmail api的工作方式(当你不在键盘时访问)
我开发了一个工作正常的Outlook Web加载项.这是一个Taskpane,可以在约会的撰写模式中使用,它可以收集事件的数据,添加一些数据并将其全部发送到某个API.
我现在要做的是将经过身份验证的用户订阅到Outlook Rest API,以便在删除事件时收到通知.
订阅调用应该如下所示:
POST https://outlook.office.com/api/v2.0/me/subscriptions HTTP/1.1
Content-Type: application/json
{
@odata.type:"#Microsoft.OutlookServices.PushSubscription",
Resource: "https://outlook.office.com/api/v2.0/me/events",
NotificationURL: "https://myNotifAPI.azurewebsites.net/api/send/myNotifyClient",
ChangeType: "Deleted",
ClientState: "blabla"
}
Run Code Online (Sandbox Code Playgroud)
我知道我需要在发布到订阅URL时提供有效的身份验证承载令牌,因此我尝试在我的加载项中调用此方法:
_mailbox = Office.context.mailbox;
_mailbox.getUserIdentityTokenAsync(getUserIdentityTokenCallback);
Run Code Online (Sandbox Code Playgroud)
在函数中getUserIdentityTokenAsync
,我调用一个WebApi Controller来验证我的令牌并将其发送回加载项:
AppIdentityToken token = (AppIdentityToken)AuthToken.Parse(rawToken);
token.Validate(new Uri(request.AudienceUrl));
return token;
Run Code Online (Sandbox Code Playgroud)
我试图使用该令牌发布到https://outlook.office.com/api/v2.0/me/subscriptions
(使用Postman),但我得到了401说:
reason="The audience claim value is invalid '<MyAddInURL>'.";error_category="invalid_resource"
Run Code Online (Sandbox Code Playgroud)
它是在特定情况下使用的正确令牌还是我需要另一个?任何建议将不胜感激!
- 编辑 -
正如@ benoit-patra所建议的那样,我尝试使用getCallbackTokenAsync
而不是使用令牌,getUserIdentityTokenAsync
但是当我打电话时,https://outlook.office.com/api/v2.0/me/subscriptions
我确实收到了403:
"error": {
"code": "ErrorAccessDenied",
"message": "The api you are trying to access does not support item scoped OAuth."
} …
Run Code Online (Sandbox Code Playgroud) office-addins outlook-addin outlook-restapi office-js outlook-web-addins
我正在努力将Microsoft Graph与Rails Web应用程序集成。我们正尝试通过Graph发送多封电子邮件,但有时我们会收到503 Service Unavailable
带有以下标头和正文的:
响应头:
{
"content-type": [
"text/html; charset=us-ascii"
],
"server": [
"Microsoft-HTTPAPI/2.0"
],
"date": [
"Wed, 30 May 2018 22:05:31 GMT"
],
"connection": [
"close"
],
"content-length": [
326
]
}
Run Code Online (Sandbox Code Playgroud)
响应主体:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd">
<HTML>
<HEAD>
<TITLE>Service Unavailable</TITLE>
<META HTTP-EQUIV="Content-Type" Content="text/html; charset=us-ascii">
</HEAD>
<BODY>
<h2>Service Unavailable</h2>
<hr>
<p>HTTP Error 503. The service is unavailable.</p>
</BODY>
</HTML>
Run Code Online (Sandbox Code Playgroud)
我们使用该POST https://graph.microsoft.com/v1.0/me/sendMail
呼叫发送数百封Outlook电子邮件。使用Graph API发送大约100-200封电子邮件后,我们收到了503 Service Unavailable
错误消息。当我们必须发送1000多个自定义电子邮件时,这是有问题的,因为我不清楚我们如何在不知道重试和其他Graph API请求之前要等待多长时间的情况下,如何正确处理错误 …
如果共享邮箱是使用用户的OAuth与用户共享的,则我们可以访问该邮箱.在这里,我想通过Office 365 Rest API访问没有用户的共享邮箱.是否可以通过Rest API?或者我们可以通过EWS或Graph APIS实现相同目标吗?
我正在开发一个当前项目,我们已经使用Identity Server进行身份验证.在这里,我们使用Access令牌访问microsoft Graph API以获取会议,个人资料图片和其他内容.
现在,我们希望与新的Outlook 365 API进行集成,以便在将来的写入任务中进行读取.
我正在尝试使用已存在的accesstoken从Outlook restapi获取Outlook任务:
{
"aud": "https://graph.microsoft.com",
"iss": "https://sts.windows.net/17e18230-55e1-4f60-8262-5c67e2b2ab11/",
"iat": 1145153145,
"nbf": 1491225024,
"exp": 1491258924,
"acr": "1",
"aio": "QSQA8/8DAFFFInSl+iIfvSXhA95NqTYRmKugpaLdvffNkba0L8N5x0U=",
"amr": [
"pwd"
],
"app_displayname": "AwesomeApp.Dev",
"appid": "0c2fgc75-f2ee-fas5-ae9f-fasd2s5d523fs",
"appidacr": "1",
"family_name": "Jesper Krægpøth Ryder",
"given_name": "Joshua",
"ipaddr": "208.67.222.222",
"name": "Joshua Jesper Krægpøth Ryder",
"oid": "a4586g1-d0215-3226-ar05-125463gasrqw5",
"platf": "3",
"puid": "654wf84yu3s1g6",
"scp": "Calendars.Read Calendars.Read.Shared Calendars.ReadWrite Directory.Read.All Files.ReadWrite Group.Read.All Mail.ReadWrite Mail.Send Tasks.Read User.Read User.ReadBasic.All User.ReadWrite",
"sub": "0s_x0JhaNb1QLpIM2Hldx7pSVkrpTgXKe4QPXXiRguQ",
"tid": "15e18430-54e9-4f60-8821-5c85e2b2ab77",
"unique_name": "jor@awesome.com",
"upn": "jor@awesome.com",
"uti": "65a2gasdrfasda_fasfa54153",
"ver": "1.0"
}
Run Code Online (Sandbox Code Playgroud)
这个问题基于我之前提出的一个问题,但后来有了更多细节和经验.
首先是一些背景,我有一个Outlook Addin应该转发用户消息,然后将消息移动到特定文件夹.这需要在OWA和Outlook 2016环境中适用于Prem Exchange.它既适用于以前的客户端,也适用于O365用户的Outlook Mobile App.
我的具体问题归结为检测何时使用EWS与Rest API(甚至是MS Graph API).
这是我的代码片段:
Office.initialize = function() {
$(document).ready(function() {
$('#forward').click(forwardMessage);
});
};
function forwardMessage() {
if(Office.context.mailbox.restUrl) { // The problem child
forwardEWS(); // Works like a charm
} else {
forwardRest(); // Works fine for O365 users
}
}
function forwardRest() {
var restHost = Office.context.mailbox.restUrl;
var restId = getItemRestId();
Office.context.mailbox.getCallbackTokenAsync({isRest: true}, function(result){
if (result.status === "succeeded") {
var accessToken = result.value;
$.ajax({
url: restHost + '/v2.0/me/messages/' …
Run Code Online (Sandbox Code Playgroud) outlook exchangewebservices outlook-restapi office-js outlook-web-addins
我正在开发一个多租户守护程序应用程序。应用程序需要代表用户发送电子邮件。应用程序发送的电子邮件必须包含来自用户收件箱的另一封电子邮件作为附件。
这可以通过简单地引用现有电子邮件的 id 而不是下载现有电子邮件的内容来实现吗?
我正在尝试下面这样的事情。使用sendMail
api 并尝试将现有电子邮件项目作为附件引用。但我收到此错误:
无法处理抽象类型的输入
Microsoft.OutlookServices.Item
我是在正确的方向吗?实现此用例的最佳方法是什么。
POST https://graph.microsoft.com/v1.0/me/sendMail HTTP/1.1
authorization: bearer {access_token}
content-type: application/json
content-length: 96
{
"message": {
"subject": "Meet for lunch?",
"body": {
"contentType": "Text",
"content": "The new cafeteria is open."
},
"toRecipients": [{
"emailAddress": {
"address": "garthf@a830edad9050849NDA1.onmicrosoft.com"
}
}],
"attachments": [
"@odata.type": "#Microsoft.OutlookServices.ItemAttachment",
"name": "menu.txt",
"item": {
"id": "AAMkADBlOWNlOWExLTdjMzktNDI5NC04MDY3LTRiZGM2NTIxMzUyNABGAAAAAAC11nCh2QXMSJ7F766v_WCUBwBSt5DMAwrBRJGMMbg9jqoYAAAGNiHGAABSt5DMAwrBRJGMMbg9jqoYAAAJXgInAAA="
<!--This is the id of an existing email in User's inbox -->
}
]
},
"saveToSentItems": "false"
}
Run Code Online (Sandbox Code Playgroud) 调用/users/me/mailFolders
将返回文件夹列表及其id
、displayName
、parentFolderId
和一些计数器。
如何确定哪个文件夹是“收件箱”?
我无法使用displayName
,因为这可能是用户的母语。这Id
只是一个随机字符串。
我需要这个,因为我的应用程序填充文件夹列表,并且我想将“选择”默认为收件箱(就像 Outlook 一样)。
我有一个守护程序脚本,需要访问我的Office 365收件箱才能阅读消息。目前,我正在将基本身份验证与Outlook Rest API的V1.0一起使用,效果很好,但由于已终止,因此我希望转向Graph API和OAuth 2.0身份验证。客户credentails流,如所描述这里似乎是一个守护进程脚本是最好的选择,但是,我很困惑的权限范围的应用都会有。我在上面链接的文章看起来好像该应用程序可以访问整个组织,但我只需要脚本即可访问我自己的帐户。我不希望我的应用访问其他用户的帐户,并且我认为我们的IT部门也不允许这样做。
那么,使用客户端凭据身份验证时应用程序权限的范围是什么? 如果答案是“整个组织”,那么是否有办法将权限限制为仅我的帐户?如果没有,我还有其他选择吗?
我正在使用图形浏览器 API 来读取我帐户的电子邮件。这个想法是将电子邮件地址和日期间隔传递给图形 API,它应该返回与此电子邮件关联的相同消息。它可能来自已发送的项目,也可能来自收件箱。我正在使用下面的API:
https://graph.microsoft.com/v1.0/me/messages?$Search="Aj****@t**maxa****icas.com
and Sent >= 2018-05-09"
Run Code Online (Sandbox Code Playgroud)
但这是从我的收件箱发送的消息,而不是从发送的电子邮件发送的消息。任何人都可以帮助我吗?谢谢。