use of microsoft.exchange.webservices.data.core.service.item.Item in project nifi by apache.
the class ConsumeEWS method fillMessageQueueIfNecessary.
/**
* Fills the internal message queue if such queue is empty. This is due to
* the fact that per single session there may be multiple messages retrieved
* from the email server (see FETCH_SIZE).
*/
protected void fillMessageQueueIfNecessary(ProcessContext context) throws ProcessException {
if (this.messageQueue.isEmpty()) {
ExchangeService service = this.initializeIfNecessary(context);
boolean deleteOnRead = context.getProperty(SHOULD_DELETE_MESSAGES).getValue().equals("true");
boolean markAsRead = context.getProperty(SHOULD_MARK_READ).getValue().equals("true");
String includeHeaders = context.getProperty(INCLUDE_EMAIL_HEADERS).getValue();
String excludeHeaders = context.getProperty(EXCLUDE_EMAIL_HEADERS).getValue();
List<String> includeHeadersList = null;
List<String> excludeHeadersList = null;
if (!StringUtils.isEmpty(includeHeaders)) {
includeHeadersList = Arrays.asList(includeHeaders.split(","));
}
if (!StringUtils.isEmpty(excludeHeaders)) {
excludeHeadersList = Arrays.asList(excludeHeaders.split(","));
}
try {
// Get Folder
Folder folder = getFolder(service);
ItemView view = new ItemView(messageQueue.remainingCapacity());
view.getOrderBy().add(ItemSchema.DateTimeReceived, SortDirection.Ascending);
SearchFilter sf = new SearchFilter.SearchFilterCollection(LogicalOperator.And, new SearchFilter.IsEqualTo(EmailMessageSchema.IsRead, false));
FindItemsResults<Item> findResults = service.findItems(folder.getId(), sf, view);
if (findResults == null || findResults.getItems().size() == 0) {
return;
}
service.loadPropertiesForItems(findResults, PropertySet.FirstClassProperties);
for (Item item : findResults) {
EmailMessage ewsMessage = (EmailMessage) item;
messageQueue.add(parseMessage(ewsMessage, includeHeadersList, excludeHeadersList));
if (deleteOnRead) {
ewsMessage.delete(DeleteMode.HardDelete);
} else if (markAsRead) {
ewsMessage.setIsRead(true);
ewsMessage.update(ConflictResolutionMode.AlwaysOverwrite);
}
}
service.close();
} catch (Exception e) {
throw new ProcessException("Failed retrieving new messages from EWS.", e);
}
}
}
use of microsoft.exchange.webservices.data.core.service.item.Item in project iaf by ibissource.
the class ExchangeMailListener method afterMessageProcessed.
public void afterMessageProcessed(PipeLineResult processResult, Object rawMessage, Map context) throws ListenerException {
Item item = (Item) rawMessage;
try {
if (folderOut != null) {
item.move(folderOut.getId());
log.debug("moved item [" + item.getId() + "] from folder [" + folderIn.getDisplayName() + "] to folder [" + folderOut.getDisplayName() + "]");
} else {
item.delete(DeleteMode.MoveToDeletedItems);
log.debug("deleted item [" + item.getId() + "] from folder [" + folderIn.getDisplayName() + "]");
}
} catch (Exception e) {
throw new ListenerException(e);
}
}
use of microsoft.exchange.webservices.data.core.service.item.Item in project nifi by apache.
the class ConsumeEWS method parseMessage.
public MimeMessage parseMessage(EmailMessage item, List<String> hdrIncludeList, List<String> hdrExcludeList) throws Exception {
EmailMessage ewsMessage = item;
final String bodyText = ewsMessage.getBody().toString();
MultiPartEmail mm;
if (ewsMessage.getBody().getBodyType() == BodyType.HTML) {
mm = new HtmlEmail().setHtmlMsg(bodyText);
} else {
mm = new MultiPartEmail();
mm.setMsg(bodyText);
}
mm.setHostName("NiFi-EWS");
// from
mm.setFrom(ewsMessage.getFrom().getAddress());
// to recipients
ewsMessage.getToRecipients().forEach(x -> {
try {
mm.addTo(x.getAddress());
} catch (EmailException e) {
throw new ProcessException("Failed to add TO recipient.", e);
}
});
// cc recipients
ewsMessage.getCcRecipients().forEach(x -> {
try {
mm.addCc(x.getAddress());
} catch (EmailException e) {
throw new ProcessException("Failed to add CC recipient.", e);
}
});
// subject
mm.setSubject(ewsMessage.getSubject());
// sent date
mm.setSentDate(ewsMessage.getDateTimeSent());
// add message headers
ewsMessage.getInternetMessageHeaders().getItems().stream().filter(x -> (hdrIncludeList == null || hdrIncludeList.isEmpty() || hdrIncludeList.contains(x.getName())) && (hdrExcludeList == null || hdrExcludeList.isEmpty() || !hdrExcludeList.contains(x.getName()))).forEach(x -> mm.addHeader(x.getName(), x.getValue()));
// Any attachments
if (ewsMessage.getHasAttachments()) {
ewsMessage.getAttachments().forEach(x -> {
try {
FileAttachment file = (FileAttachment) x;
file.load();
ByteArrayDataSource bds = new ByteArrayDataSource(file.getContent(), file.getContentType());
mm.attach(bds, file.getName(), "", EmailAttachment.ATTACHMENT);
} catch (MessagingException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
});
}
mm.buildMimeMessage();
return mm.getMimeMessage();
}
use of microsoft.exchange.webservices.data.core.service.item.Item in project iaf by ibissource.
the class ExchangeMailListener method getStringFromRawMessage.
public String getStringFromRawMessage(Object rawMessage, Map threadContext) throws ListenerException {
Item item = (Item) rawMessage;
try {
XmlBuilder emailXml = new XmlBuilder("email");
EmailMessage emailMessage;
PropertySet ps;
if (isSimple()) {
ps = new PropertySet(EmailMessageSchema.Subject);
emailMessage = EmailMessage.bind(exchangeService, item.getId(), ps);
addEmailInfoSimple(emailMessage, emailXml);
} else {
ps = new PropertySet(EmailMessageSchema.DateTimeReceived, EmailMessageSchema.From, EmailMessageSchema.Subject, EmailMessageSchema.Body, EmailMessageSchema.DateTimeSent);
emailMessage = EmailMessage.bind(exchangeService, item.getId(), ps);
addEmailInfo(emailMessage, emailXml);
}
if (StringUtils.isNotEmpty(getStoreEmailAsStreamInSessionKey())) {
emailMessage.load(new PropertySet(ItemSchema.MimeContent));
MimeContent mc = emailMessage.getMimeContent();
ByteArrayInputStream bis = new ByteArrayInputStream(mc.getContent());
threadContext.put(getStoreEmailAsStreamInSessionKey(), bis);
}
return emailXml.toXML();
} catch (Exception e) {
throw new ListenerException(e);
}
}
use of microsoft.exchange.webservices.data.core.service.item.Item in project iaf by ibissource.
the class ExchangeMailListener method addEmailInfo.
private void addEmailInfo(EmailMessage emailMessage, XmlBuilder emailXml) throws Exception {
XmlBuilder recipientsXml = new XmlBuilder("recipients");
EmailAddressCollection eacTo = emailMessage.getToRecipients();
if (eacTo != null) {
for (Iterator it = eacTo.iterator(); it.hasNext(); ) {
XmlBuilder recipientXml = new XmlBuilder("recipient");
EmailAddress ea = (EmailAddress) it.next();
recipientXml.addAttribute("type", "to");
recipientXml.setValue(ea.getAddress());
recipientsXml.addSubElement(recipientXml);
}
}
EmailAddressCollection eacCc = emailMessage.getCcRecipients();
if (eacCc != null) {
for (Iterator it = eacCc.iterator(); it.hasNext(); ) {
XmlBuilder recipientXml = new XmlBuilder("recipient");
EmailAddress ea = (EmailAddress) it.next();
recipientXml.addAttribute("type", "cc");
recipientXml.setValue(ea.getAddress());
recipientsXml.addSubElement(recipientXml);
}
}
EmailAddressCollection eacBcc = emailMessage.getBccRecipients();
if (eacBcc != null) {
for (Iterator it = eacBcc.iterator(); it.hasNext(); ) {
XmlBuilder recipientXml = new XmlBuilder("recipient");
EmailAddress ea = (EmailAddress) it.next();
recipientXml.addAttribute("type", "bcc");
recipientXml.setValue(ea.getAddress());
recipientsXml.addSubElement(recipientXml);
}
}
emailXml.addSubElement(recipientsXml);
XmlBuilder fromXml = new XmlBuilder("from");
fromXml.setValue(emailMessage.getFrom().getAddress());
emailXml.addSubElement(fromXml);
XmlBuilder subjectXml = new XmlBuilder("subject");
subjectXml.setCdataValue(emailMessage.getSubject());
emailXml.addSubElement(subjectXml);
XmlBuilder messageXml = new XmlBuilder("message");
messageXml.setCdataValue(MessageBody.getStringFromMessageBody(emailMessage.getBody()));
emailXml.addSubElement(messageXml);
XmlBuilder attachmentsXml = new XmlBuilder("attachments");
AttachmentCollection ac = emailMessage.getAttachments();
if (ac != null) {
for (Iterator it = ac.iterator(); it.hasNext(); ) {
XmlBuilder attachmentXml = new XmlBuilder("attachment");
Attachment att = (Attachment) it.next();
att.load();
attachmentXml.addAttribute("name", att.getName());
if (att instanceof ItemAttachment) {
ItemAttachment ia = (ItemAttachment) att;
Item aItem = ia.getItem();
if (aItem instanceof EmailMessage) {
EmailMessage em;
em = (EmailMessage) aItem;
addEmailInfo(em, attachmentXml);
}
}
attachmentsXml.addSubElement(attachmentXml);
}
}
emailXml.addSubElement(attachmentsXml);
XmlBuilder headersXml = new XmlBuilder("headers");
InternetMessageHeaderCollection imhc = null;
try {
imhc = emailMessage.getInternetMessageHeaders();
} catch (Exception e) {
log.info("error occurred during getting internet message headers: " + e.getMessage());
}
if (imhc != null) {
for (Iterator it = imhc.iterator(); it.hasNext(); ) {
XmlBuilder headerXml = new XmlBuilder("header");
InternetMessageHeader imh = (InternetMessageHeader) it.next();
headerXml.addAttribute("name", imh.getName());
headerXml.setCdataValue(imh.getValue());
headersXml.addSubElement(headerXml);
}
}
emailXml.addSubElement(headersXml);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
Date dateTimeSend = emailMessage.getDateTimeSent();
XmlBuilder dateTimeSentXml = new XmlBuilder("dateTimeSent");
dateTimeSentXml.setValue(sdf.format(dateTimeSend));
emailXml.addSubElement(dateTimeSentXml);
Date dateTimeReceived = emailMessage.getDateTimeReceived();
XmlBuilder dateTimeReceivedXml = new XmlBuilder("dateTimeReceived");
dateTimeReceivedXml.setValue(sdf.format(dateTimeReceived));
emailXml.addSubElement(dateTimeReceivedXml);
}
Aggregations