[ 
https://issues.apache.org/jira/browse/NIFI-4326?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16150505#comment-16150505
 ] 

ASF GitHub Bot commented on NIFI-4326:
--------------------------------------

Github user btwood commented on a diff in the pull request:

    https://github.com/apache/nifi/pull/2111#discussion_r136572476
  
    --- Diff: 
nifi-nar-bundles/nifi-email-bundle/nifi-email-processors/src/main/java/org/apache/nifi/processors/email/ExtractEmailHeaders.java
 ---
    @@ -168,21 +173,40 @@ public void process(final InputStream rawIn) throws 
IOException {
                                 }
                             }
                         }
    -                    if 
(Array.getLength(originalMessage.getAllRecipients()) > 0) {
    -                        for (int toCount = 0; toCount < 
ArrayUtils.getLength(originalMessage.getRecipients(Message.RecipientType.TO)); 
toCount++) {
    -                            attributes.put(EMAIL_HEADER_TO + "." + 
toCount, 
originalMessage.getRecipients(Message.RecipientType.TO)[toCount].toString());
    +
    +                    // Get Non-Strict Recipient Addresses
    +                    InternetAddress[] recipients;
    +                    if 
(originalMessage.getHeader(Message.RecipientType.TO.toString(), ",") != null) {
    +                        recipients = 
InternetAddress.parseHeader(originalMessage.getHeader(Message.RecipientType.TO.toString(),
 ","), false);
    +                        for (int toCount = 0; toCount < 
ArrayUtils.getLength(recipients); toCount++) {
    +                            attributes.put(EMAIL_HEADER_TO + "." + 
toCount, recipients[toCount].toString());
                             }
    -                        for (int toCount = 0; toCount < 
ArrayUtils.getLength(originalMessage.getRecipients(Message.RecipientType.BCC)); 
toCount++) {
    -                            attributes.put(EMAIL_HEADER_BCC + "." + 
toCount, 
originalMessage.getRecipients(Message.RecipientType.BCC)[toCount].toString());
    +                    }
    +                    if 
(originalMessage.getHeader(Message.RecipientType.BCC.toString(), ",") != null) {
    +                        recipients = 
InternetAddress.parseHeader(originalMessage.getHeader(Message.RecipientType.BCC.toString(),
 ","), false);
    +                        for (int toCount = 0; toCount < 
ArrayUtils.getLength(recipients); toCount++) {
    +                            attributes.put(EMAIL_HEADER_BCC + "." + 
toCount, recipients[toCount].toString());
                             }
    -                        for (int toCount = 0; toCount < 
ArrayUtils.getLength(originalMessage.getRecipients(Message.RecipientType.CC)); 
toCount++) {
    -                            attributes.put(EMAIL_HEADER_CC + "." + 
toCount, 
originalMessage.getRecipients(Message.RecipientType.CC)[toCount].toString());
    +                    }
    +                    if 
(originalMessage.getHeader(Message.RecipientType.CC.toString(), ",") != null) {
    +                        recipients = 
InternetAddress.parseHeader(originalMessage.getHeader(Message.RecipientType.CC.toString(),
 ","), false);
    +                        for (int toCount = 0; toCount < 
ArrayUtils.getLength(recipients); toCount++) {
    +                            attributes.put(EMAIL_HEADER_CC + "." + 
toCount, recipients[toCount].toString());
                             }
                         }
    -                    // Incredibly enough RFC-2822 specified From as a 
"mailbox-list" so an array I returned by getFrom
    -                    for (int toCount = 0; toCount < 
ArrayUtils.getLength(originalMessage.getFrom()); toCount++) {
    -                        attributes.put(EMAIL_HEADER_FROM + "." + toCount, 
originalMessage.getFrom()[toCount].toString());
    +
    +                    // Get Non-Strict Sender Addresses
    +                    InternetAddress[] sender = null;
    +                    if (originalMessage.getHeader("From",",") != null) {
    +                        sender = 
(InternetAddress[])ArrayUtils.addAll(sender, 
InternetAddress.parseHeader(originalMessage.getHeader("From", ","), false));
    +                    }
    +                    if (originalMessage.getHeader("Sender",",") != null) {
    +                        sender = 
(InternetAddress[])ArrayUtils.addAll(sender, 
InternetAddress.parseHeader(originalMessage.getHeader("Sender", ","), false));
    --- End diff --
    
    It absolutely would be possible. Instead of setting it manually to "false", 
we just need a variable set by the processor config. And pass that to 
getHeader(header, strict). I'm not certain how to accomplish that yet, but I'll 
look into it.
    
    My day job is catching up with me today. I don't have free cycles at work 
at the moment that allow me to work on this. I will be free later this 
afternoon though.


> ExtractEmailHeaders.java unhandled Exceptions
> ---------------------------------------------
>
>                 Key: NIFI-4326
>                 URL: https://issues.apache.org/jira/browse/NIFI-4326
>             Project: Apache NiFi
>          Issue Type: Bug
>          Components: Core Framework
>    Affects Versions: 1.3.0
>         Environment: jdk 1.8.0_121-b13
>            Reporter: Benjamin Wood
>            Priority: Minor
>             Fix For: 1.4.0
>
>   Original Estimate: 0.5h
>  Remaining Estimate: 0.5h
>
> The ExtractEmailHeaders  processor throws a NullPointerException if there is 
> no TO, CC, and BCC recipients.
> If there are no recipients "originalMessage.getAllRecipients()" returns NULL, 
> and not a 0 length array.
> If an address is empty (<> or " ") then getRecipients() will throw an "Empty 
> Address" AddressException
> It's possible this is only an issue with Oracle Java.



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to