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进行调用。任何帮助将不胜感激。
答案 0 :(得分:0)
您的邮箱(_mailbox = Office.context.mailbox;
)对象具有方法makeEwsRequestAsync
,可用于对EWS进行SOAP调用。
请注意,您不需要显式提供访问令牌。
Here是更多信息。
答案 1 :(得分:0)
从getCallbackTokenAsync获得的Callback令牌仅持续5分钟,并且仅对GetAttachment和GetItem EWS操作有效,这在https://docs.microsoft.com/en-us/office/dev/add-ins/reference/objectmodel/requirement-set-1.5/office.context.mailbox中进行了记录,因此您的CreateItem请求在这种情况下将无法使用。如果只是垃圾邮件报告,该消息是否需要来自用户?只需使用带有EWS的服务帐户来完成发送部分,甚至只是通过SMTP发送即可。