function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
Raghavendra ARaghavendra A 

Visual force Email template Merge fields issue

Hi All,

I am working on a trigger that sends out an email everytime a Opprotunity record is created. I am using Visualforce email template and setting the TemplateId in the trigger code. But when I do this the merge fields are not Populated from the Opportunity record. Entire content of the Visualforce template is sent in the email except the merge field values. Following is the code:

trigger EmailOnOpp on Opportunity (after insert) {
Messaging.SingleEmailMessage email = new Messaging.SingleEmailMessage();
    String[] toRecipients;
    String[] ccRecipients;
    String templateApiName = 'New_VF_Template'; // This is the Visualforce template
    ID targetObjId;
    Id whatId;
    ID orgWideEmailId;
    Boolean saveAsActivity;
    Attachment[] attachList;
Id templateId;  
templateId = [select id, name from EmailTemplate where developername = : templateApiName].id;
    email.setTargetObjectId(opp.Assigned_User__c); // Lookup to the user record. 
    email.setSaveAsActivity(false);      // save email as activity on the targetObjId (i.e. Contact). Note activity can't be saved on Users

    Messaging.sendEmail(new Messaging.SingleEmailMessage[] {email});

Any help on this is highly appreciated. 

In reviewing the SingleEmailMessage documentation, I see there is a setWhatId() method:

It reads, "If you specify a contact for the targetObjectId field, you can specify an optional whatId as well. This helps to further ensure that merge fields in the template contain the correct data."

I'm not sure if this means that you cannot use this method if you are setting the targetObjectId to a User Id, but I'd say it's worth trying to set your Opportunity Id as the WhatId.

I look forward to hearing how it goes!