From f90c36cc580460cb0551aab1b3498946ed2f72b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Sexenian?= <99925035+tomas-sexenian@users.noreply.github.com> Date: Wed, 30 Apr 2025 12:29:31 -0300 Subject: [PATCH 1/3] Add a third way of trying to get email adresses from mail headers Issue: 204396 --- .../genexus/internet/POP3SessionJavaMail.java | 47 +++++++++++++++---- 1 file changed, 39 insertions(+), 8 deletions(-) diff --git a/gxmail/src/main/java/com/genexus/internet/POP3SessionJavaMail.java b/gxmail/src/main/java/com/genexus/internet/POP3SessionJavaMail.java index cd8d23c5d..25e1cc4c2 100644 --- a/gxmail/src/main/java/com/genexus/internet/POP3SessionJavaMail.java +++ b/gxmail/src/main/java/com/genexus/internet/POP3SessionJavaMail.java @@ -210,17 +210,48 @@ private MailRecipientCollection processRecipients(Message message, Message.Recip semicolons. This is a hack to consider the case where the list of addresses is separated with semicolons which produces an exception because the InternetAddress class used by jakarta mail to parse the addresses expects the list to be separated by commas */ - String[] addresses = message.getHeader(rType.toString()); - if (addresses != null && addresses.length > 0) { - for (String address: addresses) { - String[] splitAddresses = address.split(";"); - for (String splitAddress: splitAddresses) { - InternetAddress ia = new InternetAddress(splitAddress); - mailRecipient.addNew(ia.getPersonal(), ia.getAddress()); + try { + String[] addresses = message.getHeader(rType.toString()); + if (addresses != null && addresses.length > 0) { + for (String address : addresses) { + String[] splitAddresses = address.split(";"); + for (String splitAddress : splitAddresses) { + InternetAddress ia = new InternetAddress(splitAddress); + mailRecipient.addNew(ia.getPersonal(), ia.getAddress()); + } } } + return mailRecipient; + + } catch (Exception originalException) { + try { + String[] headers = message.getHeader(rType.toString()); + if (headers != null) { + for (String header : headers) { + try { + String normalized = header.replace(";", ",").trim(); + int garbageIndex = normalized.indexOf('('); + if (garbageIndex != -1) { + normalized = normalized.substring(0, garbageIndex).trim(); + } + normalized = normalized.replaceAll(",\\s*$", ""); + + InternetAddress[] parsedAddresses = InternetAddress.parse(normalized, true); + for (InternetAddress ia : parsedAddresses) { + mailRecipient.addNew(ia.getPersonal(), ia.getAddress()); + } + } catch (AddressException ae) { + logger.error("Failed to parse email addresses from fallback header: " + header, ae); + throw ae; + } + } + } + return mailRecipient; + } catch (Exception fallbackException) { + logger.error("Failed to extract email addresses.", fallbackException); + throw new MessagingException("Unable to extract recipient addresses from headers", fallbackException); + } } - return mailRecipient; } } From ccdbed609a45f102e9430fdc1bf07c85d05cc1b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Sexenian?= <99925035+tomas-sexenian@users.noreply.github.com> Date: Wed, 30 Apr 2025 15:10:04 -0300 Subject: [PATCH 2/3] Revert "Add a third way of trying to get email adresses from mail headers" This reverts commit f90c36cc580460cb0551aab1b3498946ed2f72b6. --- .../genexus/internet/POP3SessionJavaMail.java | 47 ++++--------------- 1 file changed, 8 insertions(+), 39 deletions(-) diff --git a/gxmail/src/main/java/com/genexus/internet/POP3SessionJavaMail.java b/gxmail/src/main/java/com/genexus/internet/POP3SessionJavaMail.java index 25e1cc4c2..cd8d23c5d 100644 --- a/gxmail/src/main/java/com/genexus/internet/POP3SessionJavaMail.java +++ b/gxmail/src/main/java/com/genexus/internet/POP3SessionJavaMail.java @@ -210,48 +210,17 @@ private MailRecipientCollection processRecipients(Message message, Message.Recip semicolons. This is a hack to consider the case where the list of addresses is separated with semicolons which produces an exception because the InternetAddress class used by jakarta mail to parse the addresses expects the list to be separated by commas */ - try { - String[] addresses = message.getHeader(rType.toString()); - if (addresses != null && addresses.length > 0) { - for (String address : addresses) { - String[] splitAddresses = address.split(";"); - for (String splitAddress : splitAddresses) { - InternetAddress ia = new InternetAddress(splitAddress); - mailRecipient.addNew(ia.getPersonal(), ia.getAddress()); - } + String[] addresses = message.getHeader(rType.toString()); + if (addresses != null && addresses.length > 0) { + for (String address: addresses) { + String[] splitAddresses = address.split(";"); + for (String splitAddress: splitAddresses) { + InternetAddress ia = new InternetAddress(splitAddress); + mailRecipient.addNew(ia.getPersonal(), ia.getAddress()); } } - return mailRecipient; - - } catch (Exception originalException) { - try { - String[] headers = message.getHeader(rType.toString()); - if (headers != null) { - for (String header : headers) { - try { - String normalized = header.replace(";", ",").trim(); - int garbageIndex = normalized.indexOf('('); - if (garbageIndex != -1) { - normalized = normalized.substring(0, garbageIndex).trim(); - } - normalized = normalized.replaceAll(",\\s*$", ""); - - InternetAddress[] parsedAddresses = InternetAddress.parse(normalized, true); - for (InternetAddress ia : parsedAddresses) { - mailRecipient.addNew(ia.getPersonal(), ia.getAddress()); - } - } catch (AddressException ae) { - logger.error("Failed to parse email addresses from fallback header: " + header, ae); - throw ae; - } - } - } - return mailRecipient; - } catch (Exception fallbackException) { - logger.error("Failed to extract email addresses.", fallbackException); - throw new MessagingException("Unable to extract recipient addresses from headers", fallbackException); - } } + return mailRecipient; } } From 25c9d6b18ae033db3a15d850fe52432991796e78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Sexenian?= <99925035+tomas-sexenian@users.noreply.github.com> Date: Wed, 30 Apr 2025 15:18:52 -0300 Subject: [PATCH 3/3] Skip incorrect email --- .../java/com/genexus/internet/POP3SessionJavaMail.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/gxmail/src/main/java/com/genexus/internet/POP3SessionJavaMail.java b/gxmail/src/main/java/com/genexus/internet/POP3SessionJavaMail.java index cd8d23c5d..06f634484 100644 --- a/gxmail/src/main/java/com/genexus/internet/POP3SessionJavaMail.java +++ b/gxmail/src/main/java/com/genexus/internet/POP3SessionJavaMail.java @@ -213,10 +213,14 @@ private MailRecipientCollection processRecipients(Message message, Message.Recip String[] addresses = message.getHeader(rType.toString()); if (addresses != null && addresses.length > 0) { for (String address: addresses) { - String[] splitAddresses = address.split(";"); + String[] splitAddresses = address.replace(";", ",").split(","); for (String splitAddress: splitAddresses) { - InternetAddress ia = new InternetAddress(splitAddress); - mailRecipient.addNew(ia.getPersonal(), ia.getAddress()); + try { + InternetAddress ia = new InternetAddress(splitAddress); + mailRecipient.addNew(ia.getPersonal(), ia.getAddress()); + } catch (AddressException ae) { + logger.info("Invalid email address" + splitAddress); + } } } }