NIFI-5317 - support non-ASCII X-Mailer PutEmail header

Signed-off-by: Pierre Villard <pierre.villard.fr@gmail.com>

This closes #2800.
This commit is contained in:
Dustin Rodrigues 2018-06-16 14:01:00 -04:00 committed by Pierre Villard
parent 97f71fd6c7
commit 021ee6faf2
2 changed files with 13 additions and 8 deletions

View File

@ -320,6 +320,15 @@ public class PutEmail extends AbstractProcessor {
this.attributeNamePattern = attributeNameRegex == null ? null : Pattern.compile(attributeNameRegex);
}
private void setMessageHeader(final String header, final String value, final Message message) throws MessagingException {
final ComponentLog logger = getLogger();
try {
message.setHeader(header, MimeUtility.encodeText(value));
} catch (UnsupportedEncodingException e){
logger.warn("Unable to add header {} with value {} due to encoding exception", new Object[]{header, value});
}
}
@Override
public void onTrigger(final ProcessContext context, final ProcessSession session) {
final FlowFile flowFile = session.get();
@ -343,15 +352,11 @@ public class PutEmail extends AbstractProcessor {
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()});
}
this.setMessageHeader(entry.getKey(), entry.getValue(), message);
}
}
}
message.setHeader("X-Mailer", context.getProperty(HEADER_XMAILER).evaluateAttributeExpressions(flowFile).getValue());
this.setMessageHeader("X-Mailer", context.getProperty(HEADER_XMAILER).evaluateAttributeExpressions(flowFile).getValue(), message);
message.setSubject(context.getProperty(SUBJECT).evaluateAttributeExpressions(flowFile).getValue());
String messageText = getMessage(flowFile, context, session);

View File

@ -137,7 +137,7 @@ public class TestPutEmail {
public void testOutgoingMessageWithOptionalProperties() throws Exception {
// verifies that optional attributes are set on the outgoing Message correctly
runner.setProperty(PutEmail.SMTP_HOSTNAME, "smtp-host");
runner.setProperty(PutEmail.HEADER_XMAILER, "TestingNiFi");
runner.setProperty(PutEmail.HEADER_XMAILER, "TestingNíFiNonASCII");
runner.setProperty(PutEmail.FROM, "${from}");
runner.setProperty(PutEmail.MESSAGE, "${message}");
runner.setProperty(PutEmail.TO, "${to}");
@ -164,7 +164,7 @@ public class TestPutEmail {
assertEquals("Expected a single message to be sent", 1, processor.getMessages().size());
Message message = processor.getMessages().get(0);
assertEquals("\"test@apache.org\" <NiFi>", message.getFrom()[0].toString());
assertEquals("X-Mailer Header", "TestingNiFi", message.getHeader("X-Mailer")[0]);
assertEquals("X-Mailer Header", "TestingNíFiNonASCII", MimeUtility.decodeText(message.getHeader("X-Mailer")[0]));
assertEquals("the message body", message.getContent());
assertEquals(1, message.getRecipients(RecipientType.TO).length);
assertEquals("to@apache.org", message.getRecipients(RecipientType.TO)[0].toString());