mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-07 17:49:17 +00:00
Merged HEAD-BUG-FIX (5.0/Cloud) to HEAD (4.3/Cloud)
73072: Merged V4.2-BUG-FIX (4.2.3) to HEAD-BUG-FIX (4.3/Cloud) 72995: MNT-11488: Merged DEV to V4.2-BUG-FIX (4.2.3) 71868: MNT-11488: Duplicate notification when notification rule set for multiple users - Fix MailActionExecuter to send bulk message to all recipients only one time if template was not defined for rule. Add unit test for case. git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@74755 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -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<Pair<String, Locale>> recipients = getRecipients(ruleAction);
|
||||
|
||||
Pair<InternetAddress, Locale> 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.
|
||||
|
@@ -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<String> recipientsResult = new ArrayList<String>(Arrays.asList(recipientsArray)) ;
|
||||
|
||||
try
|
||||
{
|
||||
createUser(USER_1, null);
|
||||
createUser(USER_2, null);
|
||||
ArrayList<String> recipients = new ArrayList<String>(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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
Reference in New Issue
Block a user