EWS Java: создание нового электронного письма с существующим элементом в качестве вложения - PullRequest
0 голосов
/ 10 октября 2018

Я использую ews-java-api , чтобы создать новое сообщение электронной почты с существующим элементом в качестве вложения.Я следовал за ответом Глена на этот вопрос, чтобы написать подобный код в Java.Однако я получаю сообщение об ошибке - «Элементы типа EmailMessage не поддерживаются в качестве вложений»

Вот мой фрагмент кода для справки:

EmailMessage approvalMessage = new EmailMessage(exchangeService);
ItemAttachment itemAttachment = approvalMessage.getAttachments().addItemAttachment(EmailMessage.class);

MimeContent mimeContent = ewsItem.getMimeContent();
Item attachedItem = itemAttachment.getItem();
attachedItem.setMimeContent(mimeContent);
ExtendedPropertyDefinition prFlags = new ExtendedPropertyDefinition(3591, MapiPropertyType.Integer);
attachedItem.setExtendedProperty(prFlags, "1");
itemAttachment.setName(subject);

approvalMessage.setSubject("Reminder Email with original email as attachment");
approvalMessage.getToRecipients().add("my-email-address");
approvalMessage.send();
  • Approssessess это новое сообщение электронной почты, которое я создаю
  • ewsItem - это существующий элемент, который я хочу добавить в качестве приложения к утверждениюMessage

Вопрос : Это какая-то проблема с ews-java-api, что он не принимает EmailMessage в качестве типа вложения?

Что я пробовал : я заменил ItemAttachment itemAttachment = approvalMessage.getAttachments().addItemAttachment(EmailMessage.class); на ItemAttachment itemAttachment = approvalMessage.getAttachments().addItemAttachment(Item.class);

Опубликуйте это изменение, я больше не наблюдаю вышеуказанную ошибку.Однако теперь код выдает ошибку stackoverflow в следующей строке - attachedItem.setMimeContent(mimeContent);

Трассировка ошибки стека -

Oct 09, 2018 9:02:45 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [dispatcher] in context with path [] 
threw exception [Handler dispatch failed; nested exception is 
java.lang.StackOverflowError] with root cause
java.lang.StackOverflowError
at microsoft.exchange.webservices.data.core.PropertyBag.changed
(PropertyBag.java:364)
at microsoft.exchange.webservices.data.property.complex.ItemAttachment.
itemChanged(ItemAttachment.java:96)
at microsoft.exchange.webservices.data.property.complex.ItemAttachment.
serviceObjectChanged(ItemAttachment.java:252)
at microsoft.exchange.webservices.data.core.service.ServiceObject.
changed(ServiceObject.java:85)
at microsoft.exchange.webservices.data.core.PropertyBag.changed
(PropertyBag.java:364)
at microsoft.exchange.webservices.data.property.complex.ItemAttachment.
itemChanged(ItemAttachment.java:96)
at microsoft.exchange.webservices.data.property.complex.ItemAttachment.
serviceObjectChanged(ItemAttachment.java:252)
at microsoft.exchange.webservices.data.core.service.ServiceObject.
changed(ServiceObject.java:85)

Вопрос: Почему указывается Item в качестве класса вложенияприводит к ошибке stackoverflow?Как правильно добавить существующий элемент в качестве вложения?

1 Ответ

0 голосов
/ 11 октября 2018

StackOverflowError расширяет класс VirtualMachineError, который указывает на то, что JVM неисправна или исчерпала ресурсы и не может работать.

Для получения дополнительной информации вы можете обратиться к:

java.lang.StackOverflowError - Как решить StackOverflowError

Вы можете добавить существующий элемент в качестве вложения, используя следующий код:

FolderId  folderid= new FolderId(WellKnownFolderName.Inbox,"MailboxName");    
Folder Inbox = Folder.Bind(service,folderid);  
ItemView ivItemView =  new ItemView(1) ;     
FindItemsResults<Item> fiItems = service.FindItems(Inbox.Id,ivItemView);
if(fiItems.Items.Count == 1){  
EmailMessage mail = new EmailMessage(service);   
EmailMessage OriginalEmail = (EmailMessage)fiItems.Items[0];
PropertySet  psPropset= new PropertySet(BasePropertySet.IdOnly);    
psPropset.Add(ItemSchema.MimeContent);
psPropset.Add(ItemSchema.Subject);
OriginalEmail.Load(psPropset);  
ItemAttachment Attachment = mail.Attachments.AddItemAttachment<EmailMessage>();
Attachment.Item.MimeContent = OriginalEmail.MimeContent;  
ExtendedPropertyDefinition PR_Flags = new ExtendedPropertyDefinition(3591, MapiPropertyType.Integer);    
Attachment.Item.SetExtendedProperty(PR_Flags,"1");    
Attachment.Name = OriginalEmail.Subject;  
mail.Subject = "See the Attached Email";  
mail.ToRecipients.Add("glen.scales@domain.com");
mail.SendAndSaveCopy();     

Вы не можете напрямую отправить другое сообщение,вам нужно использовать MimeContent исходного сообщения, а затем создать привязку ItemAttachment на основе этого.

Ссылка на:

Создать электронное письмо с помощью EWS Exchange и прикрепить другое электронное письмо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...