9

Exchange Web サービスを使用して電子メールをダウンロードする Java アプリケーションを作成しています。これを行うために Microsoft の ewsjava API を使用しています。

メールヘッダーを取得できます。しかし、この API を使用して電子メールの添付ファイルをダウンロードできません。以下はコードスニペットです。

FolderId folderId = new FolderId(WellKnownFolderName.Inbox, "mailbox@example.com");
findResults = service.findItems(folderId, view);
for(Item item : findResults.getItems()) {
   if (item.getHasAttachments()) {
      AttachmentCollection attachmentsCol = item.getAttachments();
      System.out.println(attachmentsCol.getCount()); // This is printing zero all the time. My message has one attachment.
      for (int i = 0; i < attachmentsCol.getCount(); i++) {
         FileAttachment attachment = (FileAttachment)attachmentsCol.getPropertyAtIndex(i);
         String name = attachment.getFileName();
         int size = attachment.getContent().length;
      }
   }
}

item.getHasAttachments()返品true中ですattachmentsCol.getCount()0

4

5 に答える 5

8

Attachmentsコードで使用する前にプロパティをロードする必要があります。ItemViewFindItems メソッドに渡すオブジェクトに設定します。

または、最初にアイテムを見つけてから、呼び出しservice.LoadPropertiesForItemsて渡しfindIesultsPropertySetオブジェクトを追加することもできますEmailMessageSchema.Attachments

于 2011-07-08T11:34:02.533 に答える
4
FolderId folderId = new FolderId(WellKnownFolderName.Inbox, "mailbox@example.com"); 
findResults = service.findItems(folderId, view); 
service.loadPropertiesForItems(findResults, new PropertySet(BasePropertySet.FirstClassProperties, EmailMessageSchema.Attachments));

for(Item item : findResults.getItems()) { 
   if (item.getHasAttachments()) { 
      AttachmentCollection attachmentsCol = item.getAttachments(); 
      System.out.println(attachmentsCol.getCount());
      for (int i = 0; i < attachmentsCol.getCount(); i++) { 
         FileAttachment attachment = (FileAttachment)attachmentsCol.getPropertyAtIndex(i); 
         attachment.load(attachment.getName());
      } 
   } 
} 
于 2012-09-18T04:58:32.183 に答える
1

正直なところ、それは苦痛ですが、私はマネージドAPIの代わりにPROXYバージョンを使用します。残念ですが、Javaのマネージドバージョンにはバグがたくさんあるようです。

于 2011-07-05T19:32:37.393 に答える
0

item.getHasAttachments() を確認する前に、item.load() を実行する必要があります。そうしないと、コードが添付ファイルをロードせず、 attachmentsCol.getCount() が 0 になる可能性があります。Exchange Server 2010 での作業コード:

ItemView view = new ItemView(Integer.MAX_VALUE);
view.getOrderBy().add(ItemSchema.DateTimeReceived, SortDirection.Descending);  
FindItemsResults < Item > results = service.findItems(WellKnownFolderName.Inbox, new SearchFilter.IsEqualTo(EmailMessageSchema.IsRead, true), view);
Iterator<Item> itr = results.iterator();
while(itr.hasNext()) {
    Item item = itr.next();
    item.load();
    ItemId itemId = item.getId();
    EmailMessage email = EmailMessage.bind(service, itemId);
    if (item.getHasAttachments()) { 
        System.err.println(item.getAttachments());
        AttachmentCollection attachmentsCol = item.getAttachments(); 
        for (int i = 0; i < attachmentsCol.getCount(); i++) {
            FileAttachment attachment=(FileAttachment)attachmentsCol.getPropertyAtIndex(i);
            attachment.load("C:\\TEMP\\" +attachment.getName());
        }
    }
}
于 2014-02-14T07:12:22.950 に答える