I have below method to send email. Now I need to do the same from a separate utility class where I will have to pass toAddress , ccaddress , parameter string which has a map with Email template , suppose (A -> 'Email Template 1' , B -> 'Email Template 2' etc.)

Can someone let me know how to create such an utility or if such available to feed directly?

Publish method:

public void Publish() {
    Set < String > tempSet = new Set < String > ();
    List < String > sendTo = new List < String > ();
    List < ID > CIdlist = new List < ID > (); //Send to future
    chkpublish = true;
    ispublish = true; //Connfirm button hide
    List < Compliance_Incident_abv__c > selIncs = (List < Compliance_Incident_abv__c > ) contr.getSelected();
    for (Compliance_Incident_abv__c inc: selIncs) {

        inc.status_abv__c = 'Open';
        inc.Publish_Date_abv__c = Date.today();
        if (inc.Rep_abv__c != null) inc.OwnerId = inc.Rep_abv__c;

        CIdlist.add(inc.id); //Add id
    update selIncs;

    List < Compliance_Incident_Transaction_abv__c > CIRec = [select ID, Name, Call_abv__c from Compliance_Incident_Transaction_abv__c where Compliance_Incident_abv__c in : selIncs];
    for (Compliance_Incident_Transaction_abv__c CT: CIRec) {
        if (CT.Call_abv__c != null) CT.Publish_Check_abv__c = true;

    update CIRec;
    /*Map<Id,String> ManagerMap= new Map<Id,String>(); 
    Map<Id,String> RepMap= new Map<Id,String>(); 
    Map<Id,String> RepNameMap= new Map<Id,String>(); */
    Map < Id, Compliance_Incident_abv__c > OneMap = new Map < Id, Compliance_Incident_abv__c > ();
    for (Compliance_Incident_abv__c myContact: [select ID, ManagerEmail_abv__c, RepEmail_abv__c, Rep_abv__c, Rep_abv__r.Name, Rep_abv__r.ManagerId, Rep_abv__r.Manager.Name, Name from Compliance_Incident_abv__c where ID in : selIncs]) {

        OneMap.put(mycontact.id, mycontact);
        system.debug('OneMap@' + OneMap);


    List < Messaging.SingleEmailMessage > mails = new List < Messaging.SingleEmailMessage > ();
    List < Messaging.SingleEmailMessage > mailsDM = new List < Messaging.SingleEmailMessage > ();
    for (Compliance_Incident_abv__c myContact: selIncs) {

        Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();

        Messaging.SingleEmailMessage mailDM = new Messaging.SingleEmailMessage();
        /*  SendToSet.addall(sendTo);

        mail.setSenderDisplayName('Abbvie IT Team');
        mailDM.setSenderDisplayName('Abbvie IT Team');
        if (OneMap.get(mycontact.ID).ManagerEmail_abv__c != null) {
        Manage = OneMap.get(mycontact.ID).ManagerEmail_abv__c;
        //  mail.setTargetObjectId(OneMap.get(mycontact.ID).Rep_abv__c);
        // mailDM.setTargetObjectId(OneMap.get(mycontact.ID).Rep_abv__r.ManagerID);
        mail.setSubject('Attention Required:  NEW ABS incident ' + OneMap.get(mycontact.ID).Name + ' in iREP'); 
        mailDM.setSubject('Action Required: NEW ABS incident ' + OneMap.get(mycontact.ID).Name + ' in iREP'); 
        String body = 'Dear ' + OneMap.get(mycontact.ID).Rep_abv__r.Name + ', ';
        body += '<br><br>What you need to know: ';
        body += '<br>New ABS Incident(s) have been generated in iREP. Please review these incident(s) with your DM or Applicable Manager. There is no other action for you to complete in iREP.';
        body += '<br>To view your open incident(s):<br>';
        body += '<ul style="list-style-type:disc"><li>Log into iREP Online and select "Compliance Incidents."</li><li>Select "Open Incidents" in the drop down.</li><li>Click the Incident ID to view details of your incident(s).</li></ul>If you need assistance, please call the Field Help Desk at 1-800-344-6776.<br>';

        String bodyDM = 'Dear ' + OneMap.get(mycontact.ID).Rep_abv__r.Manager.Name + ', ';
        bodyDM += '<br><br>What you need to know:';
        bodyDM += '<br>New ABS Incident(s) have been published in iREP for a direct report.';
        bodyDM += '<br>What you need to do:'; //Bullets
        bodyDM += '<ul style="list-style-type:disc"><li>Review the incident(s) in iREP by clicking on "Compliance Incidents" and selecting "Open Incidents" in the View drop down.</li><li>Coach your direct report.</li><li>Attest to the incident and submit within two weeks, per ABS policy.</li></ul>';
        bodyDM += 'If you need assistance, please call the Field Help Desk at 1-800-344-6776.';
        //body1='<p style="font-family:Calibri"> body</p>';
        mail.setHtmlBody('<style>.myStyle{font-family:Calibri;font-size: 14.7px;}</style><span class="myStyle" >' + body + '</span>');
        // mail.setHtmlBody('<p style="font-family:Calibri"> </p>');
        mailDM.setHtmlBody('<style>.myStyle{font-family:Calibri;font-size: 14.7px;}</style><span class="myStyle" >' + bodyDM + '</span>');
        if (OneMap.get(mycontact.ID).ManagerEmail_abv__c != null) {
        system.debug('@mails@' + mails);

    // Step 6: Send all emails in the master list*/
    //if (Manage != null) {
        Messaging.sendEmail(mailsDM); //Change incorporated
    ApexPages.addmessage(new ApexPages.message(ApexPages.severity.INFO, 'Successfully Published'));

    //11th- Future Callout asynch.
    //Call_StamperFutureClass CSFuture= new Call_StamperFutureClass();
    //  Call_StamperFutureClass.CIFutureMethod(CIdlist);//Call future method with List of CI ids to be proceesed asynch.
    // CallBatch M = new CallBatch ();
    Datetime sysTime = System.now();
    sysTime = sysTime.addSeconds(300); //add 5min in current time
    String chron_exp = '' + sysTime.second() + ' ' + sysTime.minute() + ' ' + sysTime.hour() + ' ' + sysTime.day() + ' ' + sysTime.month() + ' ? ' + sysTime.year();

    CallStamperScheduler CallStamperScheduler1 = new CallStamperScheduler(); //CALL Scheduler after a delay of chron. set 600s
    String jobID = System.schedule('Compliance Incident Sch ' + sysTime.getTime(), chron_exp, CallStamperScheduler1);
    System.debug('==Scheduler Job ID==' + jobId);

  • I looked into Connect API, however there are no direct methods to make a call for Chatter Feed items. However about your question, what do you mean to create a utility class out of your code? Dec 4, 2015 at 7:39

1 Answer 1


You would create a class that looks something like this:

public with sharing class MyEmailHandler{

//declare public variables (possibly with {get;} but no setters)


    public void MyEmailHandler(list<string> toAddresses, list<string> ccaddresses, map<string,string>param2Emailtemplate){

        // You can use this.toAddresses = toAddresses type notation if you wish 
        // provided you declared the variables in 1st section above.

        // You can call a method to process the above variables, simply put all the code here
        // from your original class, or allow that code to follow below. 

        // It's unclear to me which portions you want to include, so I've omitted.


    //You could also use a no constructor class and just declare a method as below that 
    //you go directly to OR just do all the work in your constructor as above
    // except the DML which cannot be done in a constructor.

    public void MyEmailHandlerMethod(list<string> toAddresses, list<string> ccaddresses, map<string,string>param2Emailtemplate){

       // code for processing the above data that also does the email DML or calls other methods
       // to do various parts of the work, but returns nothing (thus the reason for keyword void). 



Note: I don't think you need to use the static keyword, only void. I could be mistaken on not needing to use static.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .