Search in sources :

Example 1 with Item

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);
        }
    }
}
Also used : EmailMessage(microsoft.exchange.webservices.data.core.service.item.EmailMessage) SearchFilter(microsoft.exchange.webservices.data.search.filter.SearchFilter) Folder(microsoft.exchange.webservices.data.core.service.folder.Folder) URISyntaxException(java.net.URISyntaxException) MessagingException(javax.mail.MessagingException) EmailException(org.apache.commons.mail.EmailException) ProcessException(org.apache.nifi.processor.exception.ProcessException) IOException(java.io.IOException) ExchangeService(microsoft.exchange.webservices.data.core.ExchangeService) Item(microsoft.exchange.webservices.data.core.service.item.Item) ItemView(microsoft.exchange.webservices.data.search.ItemView) ProcessException(org.apache.nifi.processor.exception.ProcessException)

Example 2 with Item

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);
    }
}
Also used : Item(microsoft.exchange.webservices.data.core.service.item.Item) ListenerException(nl.nn.adapterframework.core.ListenerException) ServiceLocalException(microsoft.exchange.webservices.data.core.exception.service.local.ServiceLocalException) ListenerException(nl.nn.adapterframework.core.ListenerException) ConfigurationException(nl.nn.adapterframework.configuration.ConfigurationException)

Example 3 with Item

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();
}
Also used : OutputStreamCallback(org.apache.nifi.processor.io.OutputStreamCallback) StandardValidators(org.apache.nifi.processor.util.StandardValidators) Message(javax.mail.Message) ByteArrayDataSource(javax.mail.util.ByteArrayDataSource) Arrays(java.util.Arrays) URISyntaxException(java.net.URISyntaxException) FindItemsResults(microsoft.exchange.webservices.data.search.FindItemsResults) LoggerFactory(org.slf4j.LoggerFactory) FolderTraversal(microsoft.exchange.webservices.data.core.enumeration.search.FolderTraversal) MessagingException(javax.mail.MessagingException) StringUtils(org.apache.commons.lang3.StringUtils) PropertyDescriptor(org.apache.nifi.components.PropertyDescriptor) EmailMessageSchema(microsoft.exchange.webservices.data.core.service.schema.EmailMessageSchema) FolderSchema(microsoft.exchange.webservices.data.core.service.schema.FolderSchema) PropertySet(microsoft.exchange.webservices.data.core.PropertySet) IAutodiscoverRedirectionUrl(microsoft.exchange.webservices.data.autodiscover.IAutodiscoverRedirectionUrl) URI(java.net.URI) BodyType(microsoft.exchange.webservices.data.core.enumeration.property.BodyType) FlowFile(org.apache.nifi.flowfile.FlowFile) ExchangeService(microsoft.exchange.webservices.data.core.ExchangeService) DeleteMode(microsoft.exchange.webservices.data.core.enumeration.service.DeleteMode) ExchangeVersion(microsoft.exchange.webservices.data.core.enumeration.misc.ExchangeVersion) Set(java.util.Set) BlockingQueue(java.util.concurrent.BlockingQueue) FolderView(microsoft.exchange.webservices.data.search.FolderView) ItemSchema(microsoft.exchange.webservices.data.core.service.schema.ItemSchema) ArrayBlockingQueue(java.util.concurrent.ArrayBlockingQueue) SortDirection(microsoft.exchange.webservices.data.core.enumeration.search.SortDirection) InputRequirement(org.apache.nifi.annotation.behavior.InputRequirement) List(java.util.List) ConflictResolutionMode(microsoft.exchange.webservices.data.core.enumeration.service.ConflictResolutionMode) EmailException(org.apache.commons.mail.EmailException) Tags(org.apache.nifi.annotation.documentation.Tags) FileAttachment(microsoft.exchange.webservices.data.property.complex.FileAttachment) ExchangeCredentials(microsoft.exchange.webservices.data.credential.ExchangeCredentials) Address(javax.mail.Address) SearchFilter(microsoft.exchange.webservices.data.search.filter.SearchFilter) CapabilityDescription(org.apache.nifi.annotation.documentation.CapabilityDescription) EmailMessage(microsoft.exchange.webservices.data.core.service.item.EmailMessage) HtmlEmail(org.apache.commons.mail.HtmlEmail) Flags(javax.mail.Flags) ProcessException(org.apache.nifi.processor.exception.ProcessException) ArrayList(java.util.ArrayList) HashSet(java.util.HashSet) EmailAttachment(org.apache.commons.mail.EmailAttachment) Relationship(org.apache.nifi.processor.Relationship) LogicalOperator(microsoft.exchange.webservices.data.core.enumeration.search.LogicalOperator) OutputStream(java.io.OutputStream) WellKnownFolderName(microsoft.exchange.webservices.data.core.enumeration.property.WellKnownFolderName) Logger(org.slf4j.Logger) Validator(org.apache.nifi.components.Validator) ItemView(microsoft.exchange.webservices.data.search.ItemView) ProcessContext(org.apache.nifi.processor.ProcessContext) ProcessSession(org.apache.nifi.processor.ProcessSession) IOException(java.io.IOException) MultiPartEmail(org.apache.commons.mail.MultiPartEmail) MimeMessage(javax.mail.internet.MimeMessage) TimeUnit(java.util.concurrent.TimeUnit) Item(microsoft.exchange.webservices.data.core.service.item.Item) WebCredentials(microsoft.exchange.webservices.data.credential.WebCredentials) FindFoldersResults(microsoft.exchange.webservices.data.search.FindFoldersResults) AbstractProcessor(org.apache.nifi.processor.AbstractProcessor) Folder(microsoft.exchange.webservices.data.core.service.folder.Folder) OnStopped(org.apache.nifi.annotation.lifecycle.OnStopped) EmailMessage(microsoft.exchange.webservices.data.core.service.item.EmailMessage) ProcessException(org.apache.nifi.processor.exception.ProcessException) MessagingException(javax.mail.MessagingException) MultiPartEmail(org.apache.commons.mail.MultiPartEmail) FileAttachment(microsoft.exchange.webservices.data.property.complex.FileAttachment) HtmlEmail(org.apache.commons.mail.HtmlEmail) EmailException(org.apache.commons.mail.EmailException) ByteArrayDataSource(javax.mail.util.ByteArrayDataSource) URISyntaxException(java.net.URISyntaxException) MessagingException(javax.mail.MessagingException) EmailException(org.apache.commons.mail.EmailException) ProcessException(org.apache.nifi.processor.exception.ProcessException) IOException(java.io.IOException)

Example 4 with Item

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);
    }
}
Also used : Item(microsoft.exchange.webservices.data.core.service.item.Item) EmailMessage(microsoft.exchange.webservices.data.core.service.item.EmailMessage) ListenerException(nl.nn.adapterframework.core.ListenerException) ByteArrayInputStream(java.io.ByteArrayInputStream) MimeContent(microsoft.exchange.webservices.data.property.complex.MimeContent) XmlBuilder(nl.nn.adapterframework.util.XmlBuilder) PropertySet(microsoft.exchange.webservices.data.core.PropertySet) ServiceLocalException(microsoft.exchange.webservices.data.core.exception.service.local.ServiceLocalException) ListenerException(nl.nn.adapterframework.core.ListenerException) ConfigurationException(nl.nn.adapterframework.configuration.ConfigurationException)

Example 5 with Item

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);
}
Also used : EmailMessage(microsoft.exchange.webservices.data.core.service.item.EmailMessage) ItemAttachment(microsoft.exchange.webservices.data.property.complex.ItemAttachment) Attachment(microsoft.exchange.webservices.data.property.complex.Attachment) ItemAttachment(microsoft.exchange.webservices.data.property.complex.ItemAttachment) AttachmentCollection(microsoft.exchange.webservices.data.property.complex.AttachmentCollection) EmailAddress(microsoft.exchange.webservices.data.property.complex.EmailAddress) ServiceLocalException(microsoft.exchange.webservices.data.core.exception.service.local.ServiceLocalException) ListenerException(nl.nn.adapterframework.core.ListenerException) ConfigurationException(nl.nn.adapterframework.configuration.ConfigurationException) Date(java.util.Date) InternetMessageHeaderCollection(microsoft.exchange.webservices.data.property.complex.InternetMessageHeaderCollection) InternetMessageHeader(microsoft.exchange.webservices.data.property.complex.InternetMessageHeader) Item(microsoft.exchange.webservices.data.core.service.item.Item) EmailAddressCollection(microsoft.exchange.webservices.data.property.complex.EmailAddressCollection) Iterator(java.util.Iterator) XmlBuilder(nl.nn.adapterframework.util.XmlBuilder) SimpleDateFormat(java.text.SimpleDateFormat)

Aggregations

Item (microsoft.exchange.webservices.data.core.service.item.Item)6 ServiceLocalException (microsoft.exchange.webservices.data.core.exception.service.local.ServiceLocalException)4 EmailMessage (microsoft.exchange.webservices.data.core.service.item.EmailMessage)4 ConfigurationException (nl.nn.adapterframework.configuration.ConfigurationException)4 ListenerException (nl.nn.adapterframework.core.ListenerException)4 ItemView (microsoft.exchange.webservices.data.search.ItemView)3 SearchFilter (microsoft.exchange.webservices.data.search.filter.SearchFilter)3 IOException (java.io.IOException)2 URISyntaxException (java.net.URISyntaxException)2 MessagingException (javax.mail.MessagingException)2 ExchangeService (microsoft.exchange.webservices.data.core.ExchangeService)2 PropertySet (microsoft.exchange.webservices.data.core.PropertySet)2 XmlBuilder (nl.nn.adapterframework.util.XmlBuilder)2 ByteArrayInputStream (java.io.ByteArrayInputStream)1 OutputStream (java.io.OutputStream)1 URI (java.net.URI)1 SimpleDateFormat (java.text.SimpleDateFormat)1 ArrayList (java.util.ArrayList)1 Arrays (java.util.Arrays)1 Date (java.util.Date)1