【发布时间】:2019-06-08 21:26:00
【问题描述】:
Office JS API 对回调有 1 Mb 的限制,我的要求之一是将现有电子邮件(被用户指定为垃圾邮件)作为附件转发给第三方。我有大量代码来处理邮件操作,使用 makeEwsRequestAsync,在这种情况下,SOAP 可以很好地返回 MIME 内容以创建和发送电子邮件,但当回调返回大于 1 Mb 时则不行。
为了绕过 1 Mb 的限制,建议其他人使用回调令牌、项目 ID 和 EWS URL 直接进行 EWS 调用。我可以轻松获得这些组件,并且我拥有适用于通常 makeEwsRequestAsync 方法的 SOAP。
我没有的是如何使用我拥有的元素来调用 EWS 调用。
作为示例,我使用以下内容获取 EWS URL 和项目 ID:
_mailbox = Office.context.mailbox;
_ewsUrl = _mailbox.ewsUrl;
var item = _mailbox.item;
_itemId = item.itemId;
我用它来获取回调令牌:
mailViaEws.Authenticate = function Start() {
getCallbackToken(setCallbackToken);
};
function getCallbackToken(callback) {
var options = {
isRest: false
};
Office.context.mailbox.getCallbackTokenAsync(options, callback);
}
function setCallbackToken(asyncResult) {
if (asyncResult.status === "succeeded") {
_callbackToken = asyncResult.value;
} else {
app.showNotification(_appName, asyncResult.error.message);
}
}
SOAP 如下,用辅助方法包装 SOAP:
var soapToCreateItem =
'<soap:Body>' +
' <m:CreateItem MessageDisposition="SendAndSaveCopy"' +
' xmlns="http://schemas.microsoft.com/exchange/services/2006/messages" ' +
' xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">' +
' <m:Items>' +
' <t:Message>' +
' <t:Subject>' + _subject + '</t:Subject>' +
' <t:Body BodyType="Text">' + _bodyText + '</t:Body>' +
' <t:ToRecipients>' + _adddressesSoap + '</t:ToRecipients>' +
' </t:Message>' +
' </m:Items>' +
' </m:CreateItem>' +
' </soap:Body>';
var soapToCreateItemData = getSoapBoadyEnvelope(soapToCreateItem);
我进行了广泛的搜索,虽然我找到了使用中间服务在 C# 中调用 EWS 托管 API 的代码,但我正在尝试直接调用 EWS。任何帮助将不胜感激。
【问题讨论】:
-
嗨,你解决了这个问题吗?我有完全相同的需求:(
-
当时,我所在的公司还没有与 MS Azure / O365 集成,所以使用 Graph API 不是一个选项,但我最终确实写了一个对 Graph 有效的 API。
-
但是您是否设法向 ewsurl 发送了一个肥皂请求并以 base64 eml 形式返回电子邮件?
标签: javascript outlook office365 exchangewebservices outlook-addin