2015-11-06 98 views
0

我试图从本地文件系统恢复电子邮件到任何交换帐户在java中,我已经尝试使用copyItems(ItemId itemId, Destination folderId)moveItems(ItemId itemId, Destination folderId)方法EWS(Exchange api)但它引发一个异常为“ErrorInvalidIdMalformed “,所以你能帮我解决这个问题..从本地文件系统还原电子邮件到ews api交换帐户

for (Object obj : emlFiles) { 
     File file = (File) obj; 
     InputStream source = null; 
     EmailMessage message = null; 
     source = new FileInputStream(file); 
     MimeMessage msg = new MimeMessage(null, source); 
     message = new EmailMessage(service); 
     // Set properties on the email message. 
     message.ParentId = msg.getMessageID(); 
     ItemId id = (ItemId.getItemIdFromString(message.ParentId)); 
     //service is exchange service object.. 
     service.moveItem(id,destinationFolder.getId()); 
} 

在此先感谢!

+0

你说你想还原电子邮件,但是用什么方法备份它们以及存储在文件系统中的文件格式是什么? –

+0

我已经创建了EmailMessage对象,并将它传递给'moveItem()'方法,它在ews api的构建方法中,上面提到的消息是EmailMessage的对象。 – user1837698

回答

1

在这种情况下使用MoveItem不起作用,因为您只能将现有商店项目从一个地方移动到另一个地方。只需调用您创建的项目上的保存并使用您想要保存的目标文件夹即可。例如

message.save(destinationFolder.getId()); 

您可能还需要设置SentFlag因此,该消息将不会显示为草稿例如,见的例子在https://msdn.microsoft.com/en-us/library/office/dn672319(v=exchg.150).aspx

ExtendedPropertyDefinition PR_MESSAGE_FLAGS_msgflag_read = new ExtendedPropertyDefinition(3591, MapiPropertyType.Integer); 
    email.SetExtendedProperty(PR_MESSAGE_FLAGS_msgflag_read, 1); 

干杯 格伦

相关问题