Salesforce 如何将电子邮件发送到任意地址并合并潜在客户价值?

Salesforce 如何将电子邮件发送到任意地址并合并潜在客户价值?,salesforce,apex-code,Salesforce,Apex Code,我需要发送一封电子邮件: 发送到任意电子邮件地址 使用电子邮件模板 从潜在客户处合并价值观 代码如下所示: Messaging.SingleEmailMessage msg = new Messaging.SingleEmailMessage(); msg.setToAddresses(new String[] { 'me@somedomain.com' }); msg.setSaveAsActivity(false); // this causes a runtime error. Le

我需要发送一封电子邮件:

  • 发送到任意电子邮件地址
  • 使用电子邮件模板
  • 从潜在客户处合并价值观
代码如下所示:

Messaging.SingleEmailMessage msg = new Messaging.SingleEmailMessage();
msg.setToAddresses(new String[] { 'me@somedomain.com' });
msg.setSaveAsActivity(false);

// this causes a runtime error. Lead ID not allowed 
msg.setWhatId(lead.Id);

msg.setTemplateId(templateID);
messages.add(msg);
问题是,您不能为WhatID使用Lead ID。我没有向潜在客户发送电子邮件,因此无法将潜在客户用于TargetObjectId


这可能吗?

我认为这是不可能的,至少在salesforce电子邮件模板中是不可能的。即使您能够将lead设置为whatId,也不能使用带有SetToAddress的模板,使用模板时setTargetObjectId是必需的:

将向其发送电子邮件的联系人、潜在客户或用户的ID

为了解决这个问题,我必须创建一个联系人,填充它的电子邮件,保存它,发送电子邮件,然后删除该联系人(Database.rollback将“取消发送”电子邮件,因此它在这里不起作用)


我会尝试将你需要的lead记录中的所有信息放入你创建的联系人中以发送电子邮件,但这是一个可怕的黑客行为。然后再重复一遍,创建和删除联系人以发送电子邮件已经是一个非常棘手的问题,我无法想象这会让事情变得更糟。

令人沮丧的是,SFDC仍然不支持更灵活的模板上下文,不是吗?考虑到您的限制,我认为您有以下选择:

  • 通过动态加载模板并用lead字段(例如$lead.NAME或其他任何字段)替换自行生成的标记来进行模板替换
  • 暂时将Lead保存为受支持的对象(可能是帐户?),将其持久化,将其用作WhatId,发送电子邮件,然后回滚/删除(编辑:如上所述,回滚显然是“未发送”的电子邮件,因此不要使用该选项。)
  • 使用第三方或定制的非平台邮件解决方案,该解决方案提供基于模板的合并,比Apex更灵活,可能通过WS-API实现

我已经使用了所有这些方法,但我唯一认真实施的方法是#3。选项1似乎是一个很有吸引力的选项,假设你能让它工作。

我还没有尝试过它,但你的电子邮件模板不能创建一个带有常规HTML或纯文本输出(内容类型受控)的vforce页面吗?至少在理论上,这将允许您使用控制器+扩展方法来引导(通过目标),您可以从中加载绑定所需的其他内容。