如何将电子邮件发送到任意地址并合并到Lead值?

时间:2012-02-13 21:58:42

标签: salesforce apex-code

我需要发送电子邮件:

  • 到任意电子邮件地址
  • 使用电子邮件模板
  • 合并来自潜在客户的价值

代码看起来像这样:

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

问题是,您不能使用LeadID的潜在客户ID。我没有向Lead发送电子邮件,所以我不能使用LeadObjectId的Lead。

这可能吗?

2 个答案:

答案 0 :(得分:1)

我认为这是不可能的,至少没有使用salesforce电子邮件模板。即使你能够设置一个导联作为whatId你也不能使用带有setToAddresses的模板,使用模板时必须使用setTargetObjectId:

  

电子邮件将发送到的联系人,潜在客户或用户的ID。

来自http://www.salesforce.com/us/developer/docs/apexcode/Content/apex_classes_email_outbound_single.htm?SearchType=Stem&Highlight=WhatId|whatId|whatIds

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

我会尝试将您需要的潜在客户记录中的所有信息放入您创建的联系人中以发送电子邮件,但这是一个可怕的黑客攻击。然后再次创建和删除联系人以发送电子邮件已经是如此的黑客攻击我无法想象这会让事情变得更糟。

答案 1 :(得分:1)

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

  • 通过动态加载模板并用引导字段替换本地标记(例如$ LEAD.NAME或其他)来自行替换模板
  • 暂时将Lead保存为受支持的对象(可能是帐户?),保留它,将其用作WhatId,发送电子邮件,然后回滚/删除(编辑:如上所述,回滚显然是“取消发送”电子邮件,所以不要使用它。)
  • 使用第三方或自定义的平台外邮件解决方案,提供基于模板的合并,比Apex更灵活,可能通过WS API

我玩过所有这些方法,但我唯一认真实施的方法是#3。选项1似乎是一个有吸引力的选择,假设你可以使它工作。

相关问题