Salesforce 中的 Visualforce 电子邮件模板

已发表: 2021-05-13

使用 Visualforce 电子邮件模板,用户可以发送有针对性的个性化电子邮件。 模板创建者可以利用强大的 Visualforce 编程语言来创建模板化的电子邮件内容。

开发人员和管理员可以使用 Visualforce 创建电子邮件模板。 使用 Visualforce 优于标准 HTML 电子邮件模板的优势在于,Visualforce 使您能够对发送给收件人的数据执行高级操作。

所有 Visualforce 电子邮件模板都必须包含在单个 <messaging:emailTemplate> 标记中。 这类似于在单个 <apex:page> 标签中定义的常规 Visualforce 页面。

  • <messaging:emailTemplate> 标记必须包含单个 <messaging:htmlEmailBody> 标记或单个 <messaging:plainTextEmailBody> 标记。
  • <messaging:emailTemplate> 中无法使用多个标准 Visualforce 组件。 其中包括 <apex:detail>、<apex:pageBlock> 和所有相关的 pageBlock 组件,以及所有输入组件,例如 <apex:form>。 如果您尝试使用这些组件保存 Visualforce 电子邮件模板,则会显示错误消息。

执行以下操作之一:

  • 如果您有权编辑公共模板,请从“设置”中,在“快速查找”框中输入“电子邮件模板”,然后选择“经典电子邮件模板”。
  • 如果您没有编辑公共模板的权限,请转到您的个人设置。 在快速查找框中输入模板,然后选择电子邮件模板或我的模板——以出现的一个为准。
  • 1. 单击新建模板。
  • 2. 选择 V​​isualforce 并单击下一步。
  • 3. 您不能使用 Visualforce 电子邮件模板发送群发电子邮件。
  • 4. 选择一个文件夹来存储模板。
  • 5. 要使模板可供使用,请选中“可供使用”复选框。
  • 6. 在电子邮件模板名称中输入名称。
  • 7. 如有必要,更改模板唯一名称。 当您使用 Lightning 平台 API 时,此唯一名称是指组件。 在受管软件包中,此唯一名称可防止软件包安装中的命名冲突。 此名称只能包含下划线和字母数字字符,并且在您的组织中必须是唯一的。 它必须以字母开头,不包含空格,不以下划线结尾,并且不包含两个连续的下划线。 使用模板唯一名称字段,您可以更改受管软件包中某些组件的名称,这些更改会反映在订阅者的组织中。
  • 8. 如果需要,从编码下拉列表中选择不同的字符集。
  • 9. 输入模板说明。 模板名称和描述仅供您内部使用。
  • 10. 在电子邮件主题中输入模板的主题行。
  • 11. 在收件人类型下拉列表中,选择要接收从模板创建的电子邮件的收件人类型。
  • 12. 如果需要,在“相关类型”下拉列表中,选择模板从中检索合并字段数据的对象。
  • 13. 单击保存。
  • 14. 在 Salesforce Classic 中的查看和编辑电子邮件模板页面上,单击编辑模板。
  • 15. 为您的 Visualforce 电子邮件模板输入标记文本。

注意:如果您要包含图像,我们建议将其上传到“文档”选项卡以引用我们服务器上的图像副本。 例如:

<apex:image id=”Logo” value=”https://yourInstance.salesforce.com/servlet/servlet.ImageServer?
id=015D0000000Dpwc&oid=00DD0000000FHaG&lastMod=127057656800″ />

  • 1. 要指定 Visualforce 的版本以及与此电子邮件模板一起使用的 API,请单击版本设置。 如果您已从 AppExchange 安装受管软件包,您还可以指定每个受管软件包的哪个版本与此电子邮件模板一起使用。 通常,对所有版本使用默认值,将电子邮件模板与 Visualforce、API 和每个受管软件包的最新版本相关联。 要维护特定行为,您可以指定旧版本的 Visualforce 和 API。 要访问与最新软件包版本不同的组件或功能,您可以指定受管软件包的旧版本。
  • 2. 要查看模板的详细信息,请单击保存。 要继续编辑模板,请单击快速保存。 您的 Visualforce 标记必须有效,然后才能保存模板。
聘请销售人员开发人员

/********************* 电子邮件模板 1 *************/
示例 1:联系案例
接受者

<messaging:emailTemplate subject="帐户和案例信息{!recipient.Name}" receiverType="Contact" >
<消息:htmlEmailBody >
    <html>
    <头>
    </头>
    <身体>
        亲爱的{!recipient.Name},<br/>
        请找到您所有的未结案例:<br/>
        <表>
        <tr>
            <th>案例编号</th>
            <th>案例来源</th>
            <th>案件状态</th>
        </tr>
        <apex:repeat value="{!recipient.cases}" var="case">
        <tr>
            <td>{!case.CaseNumber}</td>
            <td>{!case.Origin}</td>
            <td>{!case.Status}</td>
        </tr> 
        </apex:重复>
        </table>
    </正文>
</html>
</messaging:htmlEmailBody>
<消息:plainTextEmailBody >
恭喜!
这是您的新 Visualforce 电子邮件模板。
</messaging:plainTextEmailBody>
</messaging:emailTemplate>

/******************** 电子邮件模板 2 ***************/
示例 2:帐户案例
收件人和相关人

<messaging:emailTemplate subject="Account Cases as Related To : {!relatedTo.Name}" receiverType="Contact" relatedToType="Account">
<消息:htmlEmailBody >
    <html>
    <头>
    </头>
    <身体>
        亲爱的 {!relatedTo.Name},<br/>
        请找到您所有的未结案例:<br/>
        <表>
        <tr>
            <th>案例编号</th>
            <th>案例来源</th>
            <th>案件状态</th>
        </tr>
        <apex:repeat value="{!relatedTo.cases}" var="case">
        <tr>
            <td>{!case.CaseNumber}</td>
            <td>{!case.Origin}</td>
            <td>{!case.Status}</td>
        </tr> 
        </apex:重复>
        </table>
    </正文>
</html>
</messaging:htmlEmailBody>
<消息:plainTextEmailBody >
恭喜!
这是您的新 Visualforce 电子邮件模板。
</messaging:plainTextEmailBody>
</messaging:emailTemplate>

示例 3:使用组件的学生费用详细信息

<messaging:emailTemplate subject="提交学生费用" receiverType="Contact" relatedToType="Student__c">
<消息:htmlEmailBody >
    <c:StudentFeesDetails stu></c:StudentFeesDetails>
</messaging:htmlEmailBody>
<消息:plainTextEmailBody >
恭喜!
这是您的新 Visualforce 电子邮件模板。
</messaging:plainTextEmailBody>
</messaging:emailTemplate>

/************* 结束电子邮件模板 ************/

/******************* 成分 ******************/

 <apex:component controller="StudentFeesController" access="global">
    <样式>
    表{边框:1px实心#000;}
        td,th {border: 1px solid #000}
    </style>
    <apex:attribute name="stuId"assignTo="{!studentId}" type="Id" description="Student Id" />
    <h1>您的费用交易</h1>
    <表>
    <tr>
        <th>日期</th>
        <th>金额</th>
    </tr>
    <apex:repeat value="{!feesDetails}" var="fee">
        <tr>
            <td><apex:outputField value="{!fee.date__c}" /></td>
            <td>{!fee.amount__c}</td>
        </tr>
    </apex:重复>
    </table>
</apex:组件>

/************** 班级 ******************/

 公共类 StudentFeesController{
    公共 ID studentId {get;set;}
    公共列表<费用__c> getFeesDetails(){
        返回 [select id, amount__c, date__c from fee__c where student_Id__c =: studentId];
    }
}

/******************* 页 **********************/

 <apex:page controller="SendVFEmailTemplateController">
    <顶点:形式>
        <顶点:页面块>
            <apex:pageBlockButtons>
                <apex:commandButton value="发送联系案例" action="{!sendCases}"/>
                <apex:commandButton value="Send Account Cases" action="{!sendAccountCases}"/>
                <apex:commandButton value="发送费用详情" action="{!sendFeeDetails}"/>
                
            </apex:pageBlockButtons>
        </apex:pageBlock>
    </apex:表单>
</apex:page>

/******************* 班级 ********************/

 公共类 SendVFEmailTemplateController{
    电子邮件模板等;
    公共 SendVFEmailTemplateController(){
    
    }
    
    公共无效sendCases(){
        et = [从 EmailTemplate 中选择 Id, Name where DeveloperName = 'Account_Cases'];
        Messaging.SingleEmailMessage semail = new Messaging.SingleEmailMessage();
        semail.setTargetObjectId('00328000005cwjF');
        semail.setTemplateId(et.Id);
        Messaging.sendEmail(new Messaging.SingleEmailMessage[] {semail});
    }
    
    public void sendAccountCases(){
        et = [从 EmailTemplate 中选择 Id, Name where DeveloperName = 'Account_s_Cases'];
        Messaging.SingleEmailMessage semail = new Messaging.SingleEmailMessage();
        semail.setTargetObjectId('00335672305cwjF');
        semail.setTemplateId(et.Id);
        semail.setWhatId('00123400006azlA');
        Messaging.sendEmail(new Messaging.SingleEmailMessage[] {semail});
    }
    
    public void sendFeeDetails(){
        et = [选择 Id, Name from EmailTemplate where DeveloperName = 'Student_Fees_Info'];
        Messaging.SingleEmailMessage semail = new Messaging.SingleEmailMessage();
        semail.setTargetObjectId('00335672305cwjF');
        semail.setTemplateId(et.Id);
        semail.setWhatId('a002320080DGNjx');
        Messaging.sendEmail(new Messaging.SingleEmailMessage[] {semail});        
    }
}

我们希望此博客能帮助您学习如何在 Salesforce 中使用 Visualforce 电子邮件模板。 如果您需要销售团队开发服务,请联系我们的销售团队咨询团队。