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());
}