I am using a batch class with 4 differnt VF templates to send emails to 4 different regional heads usingsingleemailmethod()
so I am using 4/10 singleemail methods in the batch class.
singleemail supports settargetId()
and not settargetIds()
as massemail, which makes it hard to specify multiple Id's too 🙁
http://www.salesforce.com/us/developer/docs/apexcode/Content/apex_classes_email_outbound_single.htm
singleemailmethod does not support setbcc,setcc etc...
when used with a templateID
, so I thought i would look into massemailmessage
() but the problem there is It does not support Vf templates.
INVALID_ID_FIELD, Visualforce templates are not currently supported for mass email.: []
I cannot use what Id too here because I have 4 different templates which needs to be used based on region,making it hard to run all this in a for loop.
Am I doing something totally off that can be corrected,I want to cc/bcc the email templates to some admin users who will get copy of all the emails that is being sent over from this class.How do I copy a template to multiple users?
code:
global class Schedule_report implements Schedulable
{
global void execute(SchedulableContext ctx)
{
list<EmailTemplate> lstEmailTemplates = [select Id,Name,DeveloperName from EmailTemplate where( Name=: 'NA' OR Name=: 'ASIA_Pacific' OR Name=: 'Europe' OR Name=: 'Japan')];
map<string,string> emailmap = new map<string,string>();
if(lstEmailTemplates!=null && lstEmailTemplates.size()>0)
{
for(emailtemplate e: lstEmailTemplates){
emailmap.put(e.name,e.id);
}
}
if(emailmap.containsKey('NA')){
Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();
mail.setTargetObjectId('005d0000001TT4P');
mail.setTemplateId(emailmap.get('NA'));
mail.setSaveAsActivity(false);
Messaging.SendEmailResult[] resultMail = Messaging.sendEmail(new Messaging.SingleEmailMessage[] { mail });
}
if(emailmap.containsKey('ASIA_Pacific')){
Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();
mail.setTargetObjectId('005d0000001TT4Q');
mail.setTemplateId(emailmap.get('ASIA_Pacific'));
mail.setSaveAsActivity(false);
Messaging.SendEmailResult[] resultMail = Messaging.sendEmail(new Messaging.SingleEmailMessage[] { mail });
}
if(emailmap.containsKey('Europe')){
Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();
mail.setTargetObjectId('005d0000001TT4R');
mail.setTemplateId(emailmap.get('Europe'));
mail.setSaveAsActivity(false);
Messaging.SendEmailResult[] resultMail = Messaging.sendEmail(new Messaging.SingleEmailMessage[] { mail });
}
if(emailmap.containsKey('Japan')){
Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();
mail.setTargetObjectId('005d0000001TT4S');
mail.setTemplateId(emailmap.get('Japan'));
mail.setSaveAsActivity(false);
Messaging.SendEmailResult[] resultMail = Messaging.sendEmail(new Messaging.SingleEmailMessage[] { mail });
}
}
Best Answer
Well, you can only call sendEmail 10 times in a context. But each call can contain multiple messages. You have it coded to only use a single entry in the list for each send So where you have
You could have something like