使用ASP.NET Core从Exchange托管API获取附件

时间:2017-12-11 21:10:51

标签: asp.net asp.net-core exchange-server outlook-addin office-js

我正在构建一个Outlook加载项,该加载项对我所拥有的外部API进行身份验证。对于我的一个功能,我将从加载项向API发送附件ID列表。然后,我可以使用这些ID从Microsoft的Exchange Managed API获取相应的附件。问题是因为我使用的是.NET Core,推荐的库缺少访问附件所需的必要功能。

以下是我尝试用来访问主Microsoft.Exchange.WebServices库中附件的一些代码:

ServiceResponseCollection<GetAttachmentResponse> getAttachmentsResponse = service.GetAttachments(attachmentInfo.attachmentIds.ToArray(), null, new PropertySet(BasePropertySet.FirstClassProperties, ItemSchema.MimeContent));

if (getAttachmentsResponse.OverallResult == ServiceResult.Success)
{
    foreach (var attachmentResponse in getAttachmentsResponse)
    {
        // removed logic for simplicity
    }
}

问题是第一行代码会抛出错误,除非我在其末尾追加.Result。这是该库的.NET Core版本中的一些缺陷。当我使用它时,任务永远不会离开Awaiting Action或类似的状态。

根据.NET Core调整的另一个库是Microsoft.Exchange.WebServices.NETStandard

以下是我发现的一些代码可以起作用的代码:

var getAttachmentsResponse = service.GetAttachments(attachmentInfo.attachmentIds.ToArray(), null, new PropertySet(BasePropertySet.FirstClassProperties, ItemSchema.MimeContent));

foreach (var attachmentResponse in getAttachmentsResponse)
{
    // removed logic for simplicity
}

使用此示例,对象模型不同,响应中甚至没有Overall Result。更不用说,呼叫立即失败,并且出现重复密钥错误。我可能还记得在某个地方读过这个方法只接受用户名/密码凭证。

是否有任何其他解决方案可以帮助我从我的API接收来自Outlook电子邮件的附件?我错过了一些非常明显的东西吗?

1 个答案:

答案 0 :(得分:1)

您还可以使用Outlook REST Endpoint来查找邮件和日历来检索附件,这些附件会将所有附件作为数组元素返回,并且数据采用JSON格式

var currentAttachments ;
function getAttachments()

    {

       var options ={
           isRest: true,
           asyncContext: { message: 'Hello World!' }
           };

        Office.context.mailbox.getCallbackTokenAsync(options, getAttachment);


        function getAttachment(asyncResult)

          {
            var token = asyncResult.value;

            var getAttachmentsUrl = Office.context.mailbox.restUrl +
            '/v2.0/me/messages/' + Office.context.mailbox.convertToRestId(Office.context.mailbox.item.itemId, Office.MailboxEnums.RestVersion.v2_0) + '/attachments';



            $.ajax({
            url: getAttachmentsUrl,
            contentType: 'application/json',
            type: 'get',
            headers: { 'Authorization': 'Bearer ' + token }
            }).done(function (item) {

            currentAttachments = item;

            }).fail(function (error) {

            console.log(error);

             });




        }


    }

 // Then we can use Foreach Loop to iterate through these attachments



var outputStringFromRest = "";
                        for (i = 0; i < currentAttachments.value.length; i++) {
                            var _att = currentAttachments.value[i];
                            outputStringFromRest += "<BR>" + i + ". Name: ";
                            outputStringFromRest += _att.Name;
                            outputStringFromRest += "<BR>ID: " + _att.Id;
                            outputStringFromRest += "<BR>contentType: " + _att.ContentType;
                            outputStringFromRest += "<BR>size: " + _att.Size;
                            outputStringFromRest += "<BR>attachmentType: " + "file";
                            outputStringFromRest += "<BR>isInline: " + _att.IsInline;
                        }