From 007430f706a936e4e46b013aa7e30b11ed7bd0af Mon Sep 17 00:00:00 2001 From: Pierre Villard Date: Thu, 29 Sep 2016 22:47:04 +0200 Subject: [PATCH] NIFI-1912 - PutEmail fixed format when attachment Correction as suggested by users in JIRA. + adding a unit test to check attachments. --- .../nifi/processors/standard/PutEmail.java | 2 +- .../processors/standard/TestPutEmail.java | 49 +++++++++++++++++++ 2 files changed, 50 insertions(+), 1 deletion(-) 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 27534fe45cc7..2965a678c59e 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 @@ -318,7 +318,7 @@ public void onTrigger(final ProcessContext context, final ProcessSession session if (context.getProperty(ATTACH_FILE).asBoolean()) { final MimeBodyPart mimeText = new PreencodedMimeBodyPart("base64"); mimeText.setDataHandler(new DataHandler(new ByteArrayDataSource( - Base64.encodeBase64(messageText.getBytes("UTF-8")), "text/plain; charset=\"utf-8\""))); + Base64.encodeBase64(messageText.getBytes("UTF-8")), contentType + "; charset=\"utf-8\""))); final MimeBodyPart mimeFile = new MimeBodyPart(); session.read(flowFile, new InputStreamCallback() { @Override 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 fb11d8f60c70..782f61c99c6b 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 @@ -20,15 +20,21 @@ import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; +import java.io.InputStream; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import javax.mail.BodyPart; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.internet.MimeMessage.RecipientType; +import javax.mail.internet.MimeMultipart; +import org.apache.commons.codec.binary.Base64; +import org.apache.commons.codec.binary.StringUtils; +import org.apache.commons.io.IOUtils; import org.apache.nifi.util.LogMessage; import org.apache.nifi.util.TestRunner; import org.apache.nifi.util.TestRunners; @@ -182,6 +188,7 @@ public void testInvalidAddress() throws Exception { assertEquals("Expected no messages to be sent", 0, processor.getMessages().size()); } + @Test public void testEmptyFrom() throws Exception { // verifies that if the FROM property evaluates to an empty string at @@ -204,4 +211,46 @@ public void testEmptyFrom() throws Exception { assertTrue(((String)logMessage.getArgs()[2]).contains("Required property 'From' evaluates to an empty string")); } + @Test + public void testOutgoingMessageAttachment() throws Exception { + // verifies that are set on the outgoing Message correctly + runner.setProperty(PutEmail.SMTP_HOSTNAME, "smtp-host"); + runner.setProperty(PutEmail.HEADER_XMAILER, "TestingNiFi"); + runner.setProperty(PutEmail.FROM, "test@apache.org"); + runner.setProperty(PutEmail.MESSAGE, "Message Body"); + runner.setProperty(PutEmail.ATTACH_FILE, "true"); + runner.setProperty(PutEmail.CONTENT_TYPE, "text/html"); + runner.setProperty(PutEmail.TO, "recipient@apache.org"); + + runner.enqueue("Some text".getBytes()); + + runner.run(); + + runner.assertQueueEmpty(); + runner.assertAllFlowFilesTransferred(PutEmail.REL_SUCCESS); + + // Verify that the Message was populated correctly + assertEquals("Expected a single message to be sent", 1, processor.getMessages().size()); + Message message = processor.getMessages().get(0); + assertEquals("test@apache.org", message.getFrom()[0].toString()); + assertEquals("X-Mailer Header", "TestingNiFi", message.getHeader("X-Mailer")[0]); + assertEquals("recipient@apache.org", message.getRecipients(RecipientType.TO)[0].toString()); + + assertTrue(message.getContent() instanceof MimeMultipart); + + final MimeMultipart multipart = (MimeMultipart) message.getContent(); + final BodyPart part = multipart.getBodyPart(0); + final InputStream is = part.getDataHandler().getInputStream(); + final String decodedText = StringUtils.newStringUtf8(Base64.decodeBase64(IOUtils.toString(is, "UTF-8"))); + assertEquals("Message Body", decodedText); + + final BodyPart attachPart = multipart.getBodyPart(1); + final InputStream attachIs = attachPart.getDataHandler().getInputStream(); + final String text = IOUtils.toString(attachIs, "UTF-8"); + assertEquals("Some text", text); + + assertNull(message.getRecipients(RecipientType.BCC)); + assertNull(message.getRecipients(RecipientType.CC)); + } + }