You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by pv...@apache.org on 2018/06/15 12:30:06 UTC
nifi git commit: NIFI-5252 - support arbitrary headers in PutEmail
processor
Repository: nifi
Updated Branches:
refs/heads/master 0886dcb0b -> 2277b9411
NIFI-5252 - support arbitrary headers in PutEmail processor
Signed-off-by: Pierre Villard <pi...@gmail.com>
This closes #2787.
Project: http://git-wip-us.apache.org/repos/asf/nifi/repo
Commit: http://git-wip-us.apache.org/repos/asf/nifi/commit/2277b941
Tree: http://git-wip-us.apache.org/repos/asf/nifi/tree/2277b941
Diff: http://git-wip-us.apache.org/repos/asf/nifi/diff/2277b941
Branch: refs/heads/master
Commit: 2277b9411e5ef7974a96b743bc14e0a94ba319f1
Parents: 0886dcb
Author: Dustin Rodrigues <du...@gmail.com>
Authored: Mon Jun 11 22:00:28 2018 -0400
Committer: Pierre Villard <pi...@gmail.com>
Committed: Fri Jun 15 14:29:56 2018 +0200
----------------------------------------------------------------------
.../nifi/processors/standard/PutEmail.java | 32 ++++++++++++++++++++
.../nifi/processors/standard/TestPutEmail.java | 6 ++++
2 files changed, 38 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/nifi/blob/2277b941/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/PutEmail.java
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/PutEmail.java b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/PutEmail.java
index fcf017e..b80f401 100644
--- a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/PutEmail.java
+++ b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/PutEmail.java
@@ -18,6 +18,7 @@ package org.apache.nifi.processors.standard;
import java.io.IOException;
import java.io.InputStream;
+import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Collection;
@@ -30,6 +31,7 @@ import java.util.Map;
import java.util.Map.Entry;
import java.util.Properties;
import java.util.Set;
+import java.util.regex.Pattern;
import javax.activation.DataHandler;
import javax.mail.Authenticator;
@@ -44,6 +46,7 @@ import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
+import javax.mail.internet.MimeUtility;
import javax.mail.internet.PreencodedMimeBodyPart;
import javax.mail.util.ByteArrayDataSource;
@@ -55,6 +58,7 @@ import org.apache.nifi.annotation.behavior.SystemResource;
import org.apache.nifi.annotation.behavior.SystemResourceConsideration;
import org.apache.nifi.annotation.documentation.CapabilityDescription;
import org.apache.nifi.annotation.documentation.Tags;
+import org.apache.nifi.annotation.lifecycle.OnScheduled;
import org.apache.nifi.components.PropertyDescriptor;
import org.apache.nifi.components.ValidationContext;
import org.apache.nifi.components.ValidationResult;
@@ -142,6 +146,15 @@ public class PutEmail extends AbstractProcessor {
.addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
.defaultValue("NiFi")
.build();
+ public static final PropertyDescriptor ATTRIBUTE_NAME_REGEX = new PropertyDescriptor.Builder()
+ .name("attribute-name-regex")
+ .displayName("Attributes to Send as Headers (Regex)")
+ .description("A Regular Expression that is matched against all FlowFile attribute names. "
+ + "Any attribute whose name matches the regex will be added to the Email messages as a Header. "
+ + "If not specified, no FlowFile attributes will be added as headers.")
+ .addValidator(StandardValidators.REGULAR_EXPRESSION_VALIDATOR)
+ .required(false)
+ .build();
public static final PropertyDescriptor CONTENT_TYPE = new PropertyDescriptor.Builder()
.name("Content Type")
.description("Mime Type used to interpret the contents of the email, such as text/plain or text/html")
@@ -256,6 +269,7 @@ public class PutEmail extends AbstractProcessor {
properties.add(SMTP_TLS);
properties.add(SMTP_SOCKET_FACTORY);
properties.add(HEADER_XMAILER);
+ properties.add(ATTRIBUTE_NAME_REGEX);
properties.add(CONTENT_TYPE);
properties.add(FROM);
properties.add(TO);
@@ -299,6 +313,13 @@ public class PutEmail extends AbstractProcessor {
return errors;
}
+ private volatile Pattern attributeNamePattern = null;
+ @OnScheduled
+ public void onScheduled(final ProcessContext context) {
+ final String attributeNameRegex = context.getProperty(ATTRIBUTE_NAME_REGEX).getValue();
+ this.attributeNamePattern = attributeNameRegex == null ? null : Pattern.compile(attributeNameRegex);
+ }
+
@Override
public void onTrigger(final ProcessContext context, final ProcessSession session) {
final FlowFile flowFile = session.get();
@@ -319,6 +340,17 @@ public class PutEmail extends AbstractProcessor {
message.setRecipients(RecipientType.CC, toInetAddresses(context, flowFile, CC));
message.setRecipients(RecipientType.BCC, toInetAddresses(context, flowFile, BCC));
+ if (attributeNamePattern != null) {
+ for (final Map.Entry<String, String> entry : flowFile.getAttributes().entrySet()) {
+ if (attributeNamePattern.matcher(entry.getKey()).matches()) {
+ try {
+ message.setHeader(entry.getKey(), MimeUtility.encodeText(entry.getValue()));
+ } catch (UnsupportedEncodingException e){
+ logger.warn("Unable to add header value {} due to encoding exception", new Object[]{entry.getValue()});
+ }
+ }
+ }
+ }
message.setHeader("X-Mailer", context.getProperty(HEADER_XMAILER).evaluateAttributeExpressions(flowFile).getValue());
message.setSubject(context.getProperty(SUBJECT).evaluateAttributeExpressions(flowFile).getValue());
http://git-wip-us.apache.org/repos/asf/nifi/blob/2277b941/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestPutEmail.java
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestPutEmail.java b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestPutEmail.java
index e2319d9..2509868 100644
--- a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestPutEmail.java
+++ b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestPutEmail.java
@@ -31,6 +31,7 @@ import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage.RecipientType;
import javax.mail.internet.MimeMultipart;
+import javax.mail.internet.MimeUtility;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.codec.binary.StringUtils;
@@ -142,6 +143,7 @@ public class TestPutEmail {
runner.setProperty(PutEmail.TO, "${to}");
runner.setProperty(PutEmail.BCC, "${bcc}");
runner.setProperty(PutEmail.CC, "${cc}");
+ runner.setProperty(PutEmail.ATTRIBUTE_NAME_REGEX, "Precedence.*");
Map<String, String> attributes = new HashMap<>();
attributes.put("from", "test@apache.org <NiFi>");
@@ -149,6 +151,8 @@ public class TestPutEmail {
attributes.put("to", "to@apache.org");
attributes.put("bcc", "bcc@apache.org");
attributes.put("cc", "cc@apache.org");
+ attributes.put("Precedence", "bulk");
+ attributes.put("PrecedenceEncodeDecodeTest", "bĂșlk");
runner.enqueue("Some Text".getBytes(), attributes);
runner.run();
@@ -168,6 +172,8 @@ public class TestPutEmail {
assertEquals("bcc@apache.org", message.getRecipients(RecipientType.BCC)[0].toString());
assertEquals(1, message.getRecipients(RecipientType.CC).length);
assertEquals("cc@apache.org",message.getRecipients(RecipientType.CC)[0].toString());
+ assertEquals("bulk", MimeUtility.decodeText(message.getHeader("Precedence")[0]));
+ assertEquals("bĂșlk", MimeUtility.decodeText(message.getHeader("PrecedenceEncodeDecodeTest")[0]));
}
@Test