You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by ij...@apache.org on 2017/06/23 08:39:35 UTC

nifi git commit: NIFI-3992: Added Original Headers to Include/Exclude

Repository: nifi
Updated Branches:
  refs/heads/master 253ea2e73 -> 7c27d4c58


NIFI-3992: Added Original Headers to Include/Exclude

Some headers can cause problems with message parsing, specifically the 'Content-Type' header.
If an email contains attachments, ConsumeEWS may generate emails where the attachments cannot be extracted.

This closes #1867.

Signed-off-by: Koji Kawamura <ij...@apache.org>


Project: http://git-wip-us.apache.org/repos/asf/nifi/repo
Commit: http://git-wip-us.apache.org/repos/asf/nifi/commit/7c27d4c5
Tree: http://git-wip-us.apache.org/repos/asf/nifi/tree/7c27d4c5
Diff: http://git-wip-us.apache.org/repos/asf/nifi/diff/7c27d4c5

Branch: refs/heads/master
Commit: 7c27d4c58872e8f6891ae6735cda409161c1fb6b
Parents: 253ea2e
Author: patricker <pa...@gmail.com>
Authored: Tue Jun 20 11:34:54 2017 +0800
Committer: Koji Kawamura <ij...@apache.org>
Committed: Fri Jun 23 17:38:19 2017 +0900

----------------------------------------------------------------------
 .../nifi/processors/email/ConsumeEWS.java       | 44 ++++++++++++++++++--
 1 file changed, 40 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/nifi/blob/7c27d4c5/nifi-nar-bundles/nifi-email-bundle/nifi-email-processors/src/main/java/org/apache/nifi/processors/email/ConsumeEWS.java
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-email-bundle/nifi-email-processors/src/main/java/org/apache/nifi/processors/email/ConsumeEWS.java b/nifi-nar-bundles/nifi-email-bundle/nifi-email-processors/src/main/java/org/apache/nifi/processors/email/ConsumeEWS.java
index aeff682..d9a4979 100644
--- a/nifi-nar-bundles/nifi-email-bundle/nifi-email-processors/src/main/java/org/apache/nifi/processors/email/ConsumeEWS.java
+++ b/nifi-nar-bundles/nifi-email-bundle/nifi-email-processors/src/main/java/org/apache/nifi/processors/email/ConsumeEWS.java
@@ -41,6 +41,7 @@ import microsoft.exchange.webservices.data.search.FindItemsResults;
 import microsoft.exchange.webservices.data.search.FolderView;
 import microsoft.exchange.webservices.data.search.ItemView;
 import microsoft.exchange.webservices.data.search.filter.SearchFilter;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.mail.EmailAttachment;
 import org.apache.commons.mail.EmailException;
 import org.apache.commons.mail.HtmlEmail;
@@ -50,6 +51,7 @@ import org.apache.nifi.annotation.documentation.CapabilityDescription;
 import org.apache.nifi.annotation.documentation.Tags;
 import org.apache.nifi.annotation.lifecycle.OnStopped;
 import org.apache.nifi.components.PropertyDescriptor;
+import org.apache.nifi.components.Validator;
 import org.apache.nifi.flowfile.FlowFile;
 import org.apache.nifi.processor.AbstractProcessor;
 import org.apache.nifi.processor.ProcessContext;
@@ -175,6 +177,23 @@ public class ConsumeEWS extends AbstractProcessor {
             .addValidator(StandardValidators.BOOLEAN_VALIDATOR)
             .build();
 
+    public static final PropertyDescriptor INCLUDE_EMAIL_HEADERS = new PropertyDescriptor.Builder()
+            .name("ews-include-headers")
+            .displayName("Original Headers to Include")
+            .description("Comma delimited list specifying which headers from the original message to include in the exported email message. Blank means copy all headers. " +
+                    "Some headers can cause problems with message parsing, specifically the 'Content-Type' header.")
+            .defaultValue("")
+            .addValidator(Validator.VALID)
+            .build();
+
+    public static final PropertyDescriptor EXCLUDE_EMAIL_HEADERS = new PropertyDescriptor.Builder()
+            .name("ews-exclude-headers")
+            .displayName("Original Headers to Exclude")
+            .description("Comma delimited list specifying which headers from the original message to exclude in the exported email message. Blank means don't exclude any headers.")
+            .defaultValue("")
+            .addValidator(Validator.VALID)
+            .build();
+
     static final Relationship REL_SUCCESS = new Relationship.Builder()
             .name("success")
             .description("All messages that are the are successfully received from Email server and converted to FlowFiles are routed to this relationship")
@@ -195,7 +214,6 @@ public class ConsumeEWS extends AbstractProcessor {
     protected volatile boolean shouldSetDeleteFlag;
 
     protected volatile String folderName;
-    protected volatile int fetchSize;
 
     public ConsumeEWS(){
         final Set<Relationship> relationshipSet = new HashSet<>();
@@ -215,6 +233,8 @@ public class ConsumeEWS extends AbstractProcessor {
         descriptors.add(EWS_URL);
         descriptors.add(USE_AUTODISCOVER);
         descriptors.add(SHOULD_MARK_READ);
+        descriptors.add(INCLUDE_EMAIL_HEADERS);
+        descriptors.add(EXCLUDE_EMAIL_HEADERS);
 
         DESCRIPTORS = descriptors;
     }
@@ -304,6 +324,19 @@ public class ConsumeEWS extends AbstractProcessor {
             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
@@ -323,7 +356,7 @@ public class ConsumeEWS extends AbstractProcessor {
 
                 for (Item item : findResults) {
                     EmailMessage ewsMessage = (EmailMessage) item;
-                    messageQueue.add(parseMessage(ewsMessage));
+                    messageQueue.add(parseMessage(ewsMessage,includeHeadersList,excludeHeadersList));
 
                     if(deleteOnRead){
                         ewsMessage.delete(DeleteMode.HardDelete);
@@ -367,7 +400,7 @@ public class ConsumeEWS extends AbstractProcessor {
         return folder;
     }
 
-    public MimeMessage parseMessage(EmailMessage item) throws Exception {
+    public MimeMessage parseMessage(EmailMessage item, List<String> hdrIncludeList, List<String> hdrExcludeList) throws Exception {
         EmailMessage ewsMessage = item;
         final String bodyText = ewsMessage.getBody().toString();
 
@@ -403,7 +436,10 @@ public class ConsumeEWS extends AbstractProcessor {
         //sent date
         mm.setSentDate(ewsMessage.getDateTimeSent());
         //add message headers
-        ewsMessage.getInternetMessageHeaders().forEach(x-> mm.addHeader(x.getName(), x.getValue()));
+        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()){