如何在 Exchange 中使用 EWS 下载邮件附件

How to DownLoad Mail Attachment by using EWS in Exchange

我正在使用 ASP.Net MVC。

using (ExchangeServiceBinding exchangeServer = new ExchangeServiceBinding())
{
    ICredentials creds = new NetworkCredential("username", "password");
    exchangeServer.Credentials = creds;
    exchangeServer.Url = "https://myexchangeserver.com/EWS/Exchange.asmx";

    FindItemType findItemRequest = new FindItemType();
    findItemRequest.Traversal = ItemQueryTraversalType.Shallow;

    // define which item properties are returned in the response
    ItemResponseShapeType itemProperties = new ItemResponseShapeType();
    itemProperties.BaseShape = DefaultShapeNamesType.AllProperties;
    findItemRequest.ItemShape = itemProperties;

    // identify which folder to search
    DistinguishedFolderIdType[] folderIDArray = new DistinguishedFolderIdType[1];
    folderIDArray[0] = new DistinguishedFolderIdType();
    folderIDArray[0].Id = DistinguishedFolderIdNameType.inbox;

    // add folders to request
    findItemRequest.ParentFolderIds = folderIDArray;

    // find the messages
    FindItemResponseType findItemResponse = exchangeServer.FindItem(findItemRequest);

    // read returned
    FindItemResponseMessageType folder = (FindItemResponseMessageType)findItemResponse.ResponseMessages.Items[0];
    ArrayOfRealItemsType folderContents = new ArrayOfRealItemsType();
    folderContents = (ArrayOfRealItemsType)folder.RootFolder.Item;
    ItemType[] items = folderContents.Items;

    // if no messages were found, then return null -- we're done
    if (items == null || items.Count() <= 0)
    { return null; }


    // FindItem never gets "all" the properties, so now that we've found them all, we need to get them all.
    BaseItemIdType[] itemIds = new BaseItemIdType[items.Count()];
    for (int i = 0; i < items.Count(); i++)
    {
        itemIds[i] = items[i].ItemId;
    }


    GetItemType getItemType = new GetItemType();
    getItemType.ItemIds = itemIds;
    getItemType.ItemShape = new ItemResponseShapeType();
    getItemType.ItemShape.BaseShape = DefaultShapeNamesType.AllProperties;
    getItemType.ItemShape.BodyType = BodyTypeResponseType.HTML;
    getItemType.ItemShape.BodyTypeSpecified = true;

    GetItemResponseType getItemResponse = exchangeServer.GetItem(getItemType);
    ItemType[] messages = new ItemType[getItemResponse.ResponseMessages.Items.Count()];
    List<MailRecipientModel> model = new List<MailRecipientModel>();
    for (int j = 0; j < messages.Count(); j++)
    {
        messages[j] = ((ItemInfoResponseMessageType)getItemResponse.ResponseMessages.Items[j]).Items.Items[0];
        MailRecipientModel model1 = new MailRecipientModel();

        model1.Subject = messages[j].Subject;
        model1.FromAddress = messages[j].Sender.Item.EmailAddress;
        model1.DisplayName = messages[j].Sender.Item.Name;
        model1.Date = messages[j].DateTimeReceived.Date.ToString();
        model1.MailBody = messages[j].Body.Value;
        model1.MsgId = messages[j].ItemId.Id;
        if (messages[j].Attachments != null) {
            //
        }
        model.Add(model1);
    }              

    return model;
}

这是我的代码,我想下载附件文件,如果附件文件是图片,那么它会在浏览器中显示。

我正在使用 Microsoft ActiveSync Exchange Server。

如果你知道怎么做,请帮助我。

您应该使用 GetAttachment 操作 https://msdn.microsoft.com/en-us/library/office/aa494316(v=exchg.150).aspx . There is a Proxy code sample https://blogs.msdn.microsoft.com/vikas/2007/10/15/howto-ews-use-getattachment-to-download-attachments-off-mailappointment/

public List<FileAttachment> getAttachmentFromExchangeAccount( ExchangeAccounts exchangeAccount, String attachmentId, String itemId) {
    ExchangeService service = obtainExchangeService(exchangeAccount);
    List<FileAttachment> fileAttachmentsEWS = new ArrayList<>();
    try {
        EmailMessage message = EmailMessage.bind(service, new ItemId(attachmentId), new PropertySet(ItemSchema.Attachments));
        message.load();
        for (Attachment attachment : message.getAttachments()) {
            attachment.load();
            if (attachment.getId().equals(itemId)) {
                FileAttachment fileAttachment = (FileAttachment) attachment;
                fileAttachment.load();
                fileAttachmentsEWS.add(fileAttachment);
            }
        }
    } catch (ServiceLocalException e) {
        LOG.debug("OUT NOK loadAttachmentFile ServiceLocalException");
        LOG.debug(e.getMessage());
    } catch (Exception e) {
        LOG.debug("OUT NOK loadAttachmentFile Exception");
        LOG.debug(e.getMessage());
    }
    return fileAttachmentsEWS;
}