From bc6a33eb7ce0a38a9094c1a39d56e31177cf7613 Mon Sep 17 00:00:00 2001 From: Mike McKay <mfmckay@wustl.edu> Date: Mon, 19 Sep 2016 13:43:23 -0500 Subject: [PATCH] XNAT-4463 Made PAR requests not fail when one project owner had an invalid email (also prevented similar failures on PAR acceptance/denial). --- .../modules/actions/ProcessAccessRequest.java | 28 +++++++++++------ .../modules/actions/RequestAccess.java | 30 ++++++++++++------- 2 files changed, 38 insertions(+), 20 deletions(-) diff --git a/src/main/java/org/nrg/xnat/turbine/modules/actions/ProcessAccessRequest.java b/src/main/java/org/nrg/xnat/turbine/modules/actions/ProcessAccessRequest.java index 9791f518..fbbb147e 100644 --- a/src/main/java/org/nrg/xnat/turbine/modules/actions/ProcessAccessRequest.java +++ b/src/main/java/org/nrg/xnat/turbine/modules/actions/ProcessAccessRequest.java @@ -101,8 +101,7 @@ public class ProcessAccessRequest extends SecureAction { try { XDAT.getMailService().sendHtmlMessage(from, other.getEmail(), user.getEmail(), XDAT.getSiteConfigPreferences().getAdminEmail(), subject, message); } catch (Exception e) { - logger.error("Unable to send mail",e); - throw e; + logger.error("Unable to send denial email",e); } } @@ -151,7 +150,7 @@ public class ProcessAccessRequest extends SecureAction { } try { - for (Map.Entry<String, UserGroupI> entry:Groups.getGroupsForUser(user).entrySet()){ + for (Map.Entry<String, UserGroupI> entry:Groups.getGroupsForUser(other).entrySet()){ if (entry.getValue()!=null && entry.getValue().getTag()!=null && entry.getValue().getTag().equals(project.getId())){ Groups.removeUserFromGroup(other, user, entry.getValue().getId(), c); } @@ -197,12 +196,23 @@ public class ProcessAccessRequest extends SecureAction { template.merge(context,sw); String message= sw.toString(); - try { - XDAT.getMailService().sendHtmlMessage(from, to, cc, bcc, subject, message); - } catch (Exception e) { - logger.error("Unable to send mail",e); - throw e; - } + try { + XDAT.getMailService().sendHtmlMessage(from, to, cc, bcc, subject, message); + } catch (Exception exception) { + logger.error("Send failed. Retrying by sending each email individually.", exception); + int successfulSends = 0; + for (String recipient : to) { + try { + XDAT.getMailService().sendHtmlMessage(from, new String[]{recipient}, null, bcc, subject, message); + successfulSends++; + } catch (Exception e) { + logger.error("Unable to send mail to " + recipient + ".", e); + } + } + if (successfulSends == 0) { + logger.error("Unable to send mail", exception); + } + } } /* (non-Javadoc) diff --git a/src/main/java/org/nrg/xnat/turbine/modules/actions/RequestAccess.java b/src/main/java/org/nrg/xnat/turbine/modules/actions/RequestAccess.java index a769213b..602fb4c0 100644 --- a/src/main/java/org/nrg/xnat/turbine/modules/actions/RequestAccess.java +++ b/src/main/java/org/nrg/xnat/turbine/modules/actions/RequestAccess.java @@ -10,11 +10,6 @@ */ package org.nrg.xnat.turbine.modules.actions; -import java.io.StringWriter; -import java.util.ArrayList; - -import javax.mail.MessagingException; - import org.apache.log4j.Logger; import org.apache.turbine.util.RunData; import org.apache.velocity.Template; @@ -24,12 +19,14 @@ import org.nrg.xdat.XDAT; import org.nrg.xdat.display.DisplayManager; import org.nrg.xdat.om.XnatProjectdata; import org.nrg.xdat.turbine.modules.actions.SecureAction; -import org.nrg.xdat.turbine.utils.AdminUtils; import org.nrg.xdat.turbine.utils.TurbineUtils; import org.nrg.xft.security.UserI; import org.nrg.xnat.turbine.utils.ArcSpecManager; import org.nrg.xnat.turbine.utils.ProjectAccessRequest; +import java.io.StringWriter; +import java.util.ArrayList; + public class RequestAccess extends SecureAction { static Logger logger = Logger.getLogger(RequestAccess.class); @@ -74,7 +71,7 @@ public class RequestAccess extends SecureAction { throw exception; } - String[] to = null; + String[] to = {}; if (ownerEmails != null && ownerEmails.size() > 0) { to = ownerEmails.toArray(new String[ownerEmails.size()]); } @@ -89,11 +86,22 @@ public class RequestAccess extends SecureAction { try { XDAT.getMailService().sendHtmlMessage(from, to, null, bcc, subject, message); - } catch (MessagingException exception) { - logger.error("Unable to send mail", exception); - throw exception; + } catch (Exception exception) { + logger.error("Send failed. Retrying by sending each email individually.", exception); + int successfulSends = 0; + for (String recipient : to) { + try { + XDAT.getMailService().sendHtmlMessage(from, new String[]{recipient}, null, bcc, subject, message); + successfulSends++; + } catch (Exception e) { + logger.error("Unable to send mail to " + recipient + ".", e); + } + } + if (successfulSends == 0) { + logger.error("Unable to send mail", exception); + } } - + data.setMessage("Access request sent."); data.setScreenTemplate("Index.vm"); } -- GitLab