Salesforce邮件发送带PDF附件的两种方式

本文介绍了在Salesforce中如何发送带有PDF附件的邮件的两种方式:一种是结合Visualforce组件、控制器和VF页面;另一种是直接通过Apex代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1,使用component+Controller+VF的方式,步骤如下:
》创建一个 Visualforce格式的Email Template;
》创建Apex Componet,例子伪代码如下

Public Class xxxxxCtrl {
   public String xxxId{get;set;} /** get set the variable for opportunity Id take value from visual component.**/
   public List<Product_Config_Item__c> getProductItems() {
        return [Select Id,...
                     from xxxxobj
                     where id=:xxxId
                     ];
   }
}
<!--组件名称为:XXXComponet-->
<apex:component controller="xxxxxCtrl " access="global">
 <apex:attribute access="global" assignTo="{!xxxId}" name="proConfigId" type="String" required="true" description="Product Config Id"/>
 <b>products Details</b>
 <br/>
 <br/>
 <table border="1" cellSpacing="0" cellpadding="0" width="100%" >
 <tr>
 <th>Product Name</th>
 <th>Quantity</th>
 </tr>
 <apex:repeat value="{!ProductItems}" var="product">
 <tr>
 <td>{!product.id}</td>
 <td>{!product.id}</td>
 </tr>
 <br/>
 </apex:repeat>
 </table>
 </apex:component>

》在邮件模板里编辑,调用上面创建的Component

<messaging:emailTemplate relatedToType="Object名称"
subject="Solution '{!relatedTo.Name}' Detail with Products" recipientType="User" >
    <messaging:htmlEmailBody >
    Hi,<br/>
    Project Solution '{!relatedTo.Name}' have been created.<br/>
    you can see products details in attachment.
    </messaging:htmlEmailBody>
     
    <messaging:attachment renderAs="pdf" filename="products.pdf"> <!-- Use the renderAs attribute here.-->
        <c:XXXComponet xxxId="{!relatedTo.Id}"></c:XXXComponet>
    </messaging:attachment>  
</messaging:emailTemplate>

》在apex里调用

//发送邮件的集合
List<Messaging.SingleEmailMessage> mesList = new List<Messaging.SingleEmailMessage>();
Messaging.SingleEmailMessage email = new Messaging.SingleEmailMessage(); 

for(String str : xxxx.keySet()){
	EmailTemplate template = [Select id from EmailTemplate where developername='xxx邮件模板名称'];
	
	//邮件
	Messaging.SingleEmailMessage mail = new Messaging.singleEmailMessage();
	mail.setTemplateId(template.Id);
	mail.setTargetObjectId(UserInfo.getUserId());
	mail.setWhatId(对象记录ID);
	mail.setSaveAsActivity(false);
	mail.setToAddresses( new List<String>{ str.substring(18, str.length()) } );
	
	mesList.add(mail);
}

2,使用apex代码

//发送邮件的集合
List<Messaging.SingleEmailMessage> mesList = new List<Messaging.SingleEmailMessage>();
Messaging.SingleEmailMessage email = new Messaging.SingleEmailMessage(); 
EmailTemplate template = [Select id from EmailTemplate where developername='xxx邮件模板名称'];

for(String str : xxxx.keySet()){
    //邮件
	Messaging.SingleEmailMessage mail = new Messaging.singleEmailMessage();
	mail.setTemplateId(template.Id);
	mail.setTargetObjectId(UserInfo.getUserId());
	mail.setWhatId(str.substring(0, 18));
	mail.setSaveAsActivity(false);
	mail.setToAddresses( new List<String>{ str.substring(18, str.length()) } );

	//附件
	Messaging.EmailFileAttachment attachment = new Messaging.EmailFileAttachment();
	attachment.setContentType(conType);
	attachment.setFileName('xxx.pdf');
	attachment.setinline(false);
	String fileBody = 'Testing';//mail.getHtmlBody();
	attachmentFile.setBody(blob.toPdf(fileBody));

	//邮件添加附件
	mail.setFileAttachments(new Messaging.EmailFileAttachment[] { attachment } );  

	// Messaging.sendEmail( new List<Messaging.Email>{em} );
	mesList.add(mail);
}  

  //一起发送
  try {
            if(!Test.isRunningTest()){
                Messaging.sendEmail(mesList,false);
			}          
  } catch (Exception e) {
            System.debug(e.getMessage());
  }        
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值