Sometimes we try to send some custom object information in mail. For sending mail Sales-force has provided 4 types of email template. We can design the template as per our requirement. We can use simple text template and use merge field to send custom object information. But that template will work perfectly only If we use in the workflow.
If we send mail from apex code then that merge field value will not be displayed, except we can display Lead ,Contact and User object information.
For example
Dear {!Contact.Name} -- It will display
Sub-- {!CustomObject.name}-- It will not display.
This functionality is not yet activated by Sales-force, Here is an idea regarding same.
https://success.salesforce.com/ideaView?id=08730000000BpYU
Why not CustomObject information ?
If we use the template in apex code (By using Messaging.SingleEmailmessage method) for sending mail then setTargetObjectId(ID) method is required , Here we can only give id of USER,CONTACT and LEAD.
For example
Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage() ;
mail.setTemplateId(some template id);
mail.setTargetObjectId(ID);
That 's the reason custom object merge field value will not be displayed in mail.
Solutions
Instead using the Sales-force Email template, design an template in apex code (using some HTMLtags depending according to your design).
Just make a query which information you want to send and then pass these value as parameter to a method.
List<CustomObject__c> listofCustomObjects = [SELECT id, Name,.Expiration__c ,Account_Name__c
FROM CustomObject__c]
for(CustomObject__c license:listofCustomObjects ) {
Integer numberDaysDue = System.Today().daysBetween(license.Expiration__c);
String name = license.Account_Name__c;
if(numberDaysDue == 30){
sendingmail(numberDaysDue ,name );
}
}
public void sendingmail( Integer noOfdays, String accountName){
Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage() ;
String[] toAddresses = new String[] {'jewell@test.com','neha.v@test.com','sexyRadha@test.com'};
mail.setToAddresses(toAddresses) ;
mail.setSubject('LMO:'+' '+accountName+' '+'licency expiry in'+' '+noOfdays+' '+'days');
String body = '<html lang="ja"><body>'+
'<br><br>'+'This email alert is to bring to your notice that the licence of the client :'+' '+'<b>'+accountName+'</b>'+' '+'is going to expiry within'+'<b>'+' '+noOfdays+' '+'</b>'+
'<br><br>'+'From LMO Alert Service'+'</body></html>';
mail.setHtmlBody(body);
Messaging.sendEmail(new Messaging.SingleEmailMessage[] { mail });
}
If we send mail from apex code then that merge field value will not be displayed, except we can display Lead ,Contact and User object information.
For example
Dear {!Contact.Name} -- It will display
Sub-- {!CustomObject.name}-- It will not display.
This functionality is not yet activated by Sales-force, Here is an idea regarding same.
https://success.salesforce.com/ideaView?id=08730000000BpYU
Why not CustomObject information ?
If we use the template in apex code (By using Messaging.SingleEmailmessage method) for sending mail then setTargetObjectId(ID) method is required , Here we can only give id of USER,CONTACT and LEAD.
For example
Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage() ;
mail.setTemplateId(some template id);
mail.setTargetObjectId(ID);
That 's the reason custom object merge field value will not be displayed in mail.
Solutions
Instead using the Sales-force Email template, design an template in apex code (using some HTMLtags depending according to your design).
Just make a query which information you want to send and then pass these value as parameter to a method.
List<CustomObject__c> listofCustomObjects = [SELECT id, Name,.Expiration__c ,Account_Name__c
FROM CustomObject__c]
for(CustomObject__c license:listofCustomObjects ) {
Integer numberDaysDue = System.Today().daysBetween(license.Expiration__c);
String name = license.Account_Name__c;
if(numberDaysDue == 30){
sendingmail(numberDaysDue ,name );
}
}
public void sendingmail( Integer noOfdays, String accountName){
Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage() ;
String[] toAddresses = new String[] {'jewell@test.com','neha.v@test.com','sexyRadha@test.com'};
mail.setToAddresses(toAddresses) ;
mail.setSubject('LMO:'+' '+accountName+' '+'licency expiry in'+' '+noOfdays+' '+'days');
String body = '<html lang="ja"><body>'+
'<br><br>'+'This email alert is to bring to your notice that the licence of the client :'+' '+'<b>'+accountName+'</b>'+' '+'is going to expiry within'+'<b>'+' '+noOfdays+' '+'</b>'+
'<br><br>'+'From LMO Alert Service'+'</body></html>';
mail.setHtmlBody(body);
Messaging.sendEmail(new Messaging.SingleEmailMessage[] { mail });
}
No comments:
Post a Comment