Reputation: 959
Is there any way to send mails to certain users based on a condition in ECM 2.1 . For example, I want to send mails to only those users whose user profile property Country='USA'. Is there a way to do this in ECM 2.1?
Earlier for ECM 1.3 we used to use a third party segmentation module below
https://marketplace.sitecore.net/en/Modules/Sitecore_EmailCampaign_Segment.aspx
But it does not support ECM 2.1. So I was wondering how to implement it in ECM 2.1 . By the way we are using Sitecore 7.2
Upvotes: 1
Views: 208
Reputation: 3216
If you don't mind extending ECM slightly you could tap into the DispatchNewsletter
Pipline.
If you add processor like the following, you could get all the users dynamically and add them to the subscribers list. You just need to make sure that this only fires on certain scenarios to avoid this interfering with the core product functionality.
public class GetUSASubscribers
{
public void Process(DispatchNewsletterArgs args)
{
if(CanProcessEmail(args))
{
var matches = UserManager.GetUsers().Where(usr => usr.Profile["Country"].Equals("USA")).ToList();
foreach (var username in matches)
{
if (User.Exists(username.Name))
{
var contact = Contact.FromName(username.LocalName);
args.Message.Subscribers.Add(contact);
args.Message.SubscribersNames.Add(contact.Name);
}
}
}
}
}
You can register the processor as follows in your Sitecore.EmailCampaign.config
<DispatchNewsletter>
<processor type="Sitecore.Modules.EmailCampaign.Core.Pipelines.DispatchNewsletter.CheckPreconditions, Sitecore.EmailCampaign" />
<processor type="YourClass, YourNamespace" />
........................
</DispatchNewsletter>
To make it more dynamic you could add a Rules engine field to each message item to determine which users are added to the subscriber list. So the logic e.g where user profile["country"] equals 'USA' could be in the rules field.
For reference, some more detail on the set up of rules in Sitecore.
Upvotes: 2