diff --git a/source/java/org/alfresco/repo/action/executer/MailActionExecuter.java b/source/java/org/alfresco/repo/action/executer/MailActionExecuter.java index 539e50c49a..15bb9086d5 100644 --- a/source/java/org/alfresco/repo/action/executer/MailActionExecuter.java +++ b/source/java/org/alfresco/repo/action/executer/MailActionExecuter.java @@ -201,6 +201,7 @@ public class MailActionExecuter extends ActionExecuterAbstractBase */ private boolean testMode = false; private MimeMessage lastTestMessage; + private int testSentCount; private TemplateImageResolver imageResolver; @@ -519,6 +520,16 @@ public class MailActionExecuter extends ActionExecuterAbstractBase private MimeMessageHelper[] prepareEmails(final Action ruleAction, final NodeRef actionedUponNodeRef) { + Serializable ref = ruleAction.getParameterValue(PARAM_TEMPLATE); + String templateRef = (ref instanceof NodeRef ? ((NodeRef)ref).toString() : (String)ref); + if (templateRef == null) + { + // send as bulk message if there is no template + MimeMessageHelper[] messages = new MimeMessageHelper[1]; + messages[0] = prepareEmail(ruleAction, actionedUponNodeRef, null, null); + return messages; + } + List> recipients = getRecipients(ruleAction); Pair from = getFrom(ruleAction); @@ -941,6 +952,7 @@ public class MailActionExecuter extends ActionExecuterAbstractBase else { lastTestMessage = preparedMessage.getMimeMessage(); + testSentCount++; } } catch (MailException e) @@ -1479,6 +1491,16 @@ public class MailActionExecuter extends ActionExecuterAbstractBase return lastTestMessage; } + public int getTestSentCount() + { + return testSentCount; + } + + public int resetTestSentCount() + { + return testSentCount = 0; + } + /** * Used when test mode is enabled. * Clears the record of the last message that was sent. diff --git a/source/test-java/org/alfresco/repo/action/executer/AbstractMailActionExecuterTest.java b/source/test-java/org/alfresco/repo/action/executer/AbstractMailActionExecuterTest.java index 230400f712..e974a15a8a 100644 --- a/source/test-java/org/alfresco/repo/action/executer/AbstractMailActionExecuterTest.java +++ b/source/test-java/org/alfresco/repo/action/executer/AbstractMailActionExecuterTest.java @@ -20,20 +20,22 @@ package org.alfresco.repo.action.executer; import java.io.IOException; import java.io.Serializable; +import java.util.ArrayList; import java.util.Arrays; import java.util.Date; import java.util.HashMap; +import java.util.List; import java.util.Map; import javax.mail.Address; import javax.mail.Message; import javax.mail.MessagingException; +import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import org.alfresco.model.ContentModel; import org.alfresco.repo.management.subsystems.ApplicationContextFactory; import org.alfresco.repo.security.authentication.AuthenticationUtil; -import org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork; import org.alfresco.repo.tenant.TenantService; import org.alfresco.repo.tenant.TenantUtil; import org.alfresco.repo.tenant.TenantUtil.TenantRunAsWork; @@ -429,4 +431,51 @@ public abstract class AbstractMailActionExecuterTest AuthenticationUtil.clearCurrentSecurityContext(); } + + /** + * Test for MNT-11488 + * @throws Exception + */ + @Test + public void testSendingToMultipleUsers() throws IOException, MessagingException + { + final String USER_1 = "recipient1"; + final String USER_2 = "recipient2"; + final String[] recipientsArray = { USER_1 + "@email.com", USER_2 + "@email.com" }; + final List recipientsResult = new ArrayList(Arrays.asList(recipientsArray)) ; + + try + { + createUser(USER_1, null); + createUser(USER_2, null); + ArrayList recipients = new ArrayList(2); + recipients.add(USER_1); + recipients.add(USER_2); + + Action mailAction = ACTION_SERVICE.createAction(MailActionExecuter.NAME); + mailAction.setParameterValue(MailActionExecuter.PARAM_FROM, "sender@example.com"); + mailAction.setParameterValue(MailActionExecuter.PARAM_TO_MANY, recipients); + mailAction.setParameterValue(MailActionExecuter.PARAM_SUBJECT, "Testing"); + mailAction.setParameterValue(MailActionExecuter.PARAM_TEMPLATE_MODEL, (Serializable) getModel()); + + ACTION_EXECUTER.resetTestSentCount(); + + ACTION_SERVICE.executeAction(mailAction, null); + + MimeMessage message = ACTION_EXECUTER.retrieveLastTestMessage(); + Assert.assertNotNull(message); + Assert.assertEquals("One email should be sent", 1, ACTION_EXECUTER.getTestSentCount()); + Assert.assertEquals("All recipients should receive single message", 2, message.getAllRecipients().length); + + Assert.assertTrue("Both users should receive message", recipientsResult.contains(((InternetAddress) message.getAllRecipients()[0]).getAddress())); + Assert.assertTrue("Both users should receive message", recipientsResult.contains(((InternetAddress) message.getAllRecipients()[1]).getAddress())); + } + finally + { + // tidy up + PERSON_SERVICE.deletePerson(USER_1); + PERSON_SERVICE.deletePerson(USER_2); + } + } + }