要在 Salesforce 中实现自动发送邮件并创建相应的 EmailMessage
对象,同时处理用户回复的邮件并将其绑定到特定的机会(Opportunity),需要结合几个 Salesforce 功能和编程技巧。以下是实现这一功能的步骤:
1. 自动发送邮件并创建 EmailMessage
对象
首先,通过 Apex 代码发送邮件,并在发送邮件时创建一个 EmailMessage
对象,将其与机会(Opportunity)关联。
示例 Apex 代码
public class EmailService {
public static void sendEmailAndCreateEmailMessage(Id oppId, String recipientEmail, String subject, String body) {
// 发送邮件
Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();
mail.setToAddresses(new String[] { recipientEmail });
mail.setSubject(subject);
mail.setPlainTextBody(body);
// 设置“回复到”地址(如果需要)
mail.setReplyTo(UserInfo.getUserEmail());
Messaging.sendEmail(new Messaging.SingleEmailMessage[] { mail });
// 创建 EmailMessage 对象并将其与 Opportunity 关联
EmailMessage emailMessage = new EmailMessage(
Subject = subject,
HtmlBody = body,
ToAddress = recipientEmail,
FromAddress = UserInfo.getUserEmail(),
ParentId = oppId, // 关联的 Opportunity ID
Status = '3' // 设定状态,3表示已发送(Sent)
);
// 插入 EmailMessage 对象
insert emailMessage;
}
}
2. 处理用户回复并将其绑定到机会
要处理用户回复的邮件并将其自动关联到特定的机会,您需要使用 Salesforce 的 Email-to-Case 或 Inbound Email Service 功能。这些功能可以帮助您将用户回复的邮件转化为 EmailMessage
对象,并将其与正确的机会关联。
方案 A: 使用 Email-to-Case
-
设置 Email-to-Case:
- 在 Salesforce 设置中,搜索并选择“Email-to-Case”。
- 配置电子邮件服务以处理用户回复的邮件,并将其转化为案例(Case)记录。
-
自定义触发器:
- 创建一个触发器,将创建的案例与机会关联。您可以在案例创建时,通过案例的
ParentId
字段来找到对应的机会。
trigger CaseTrigger on Case (after insert) { for (Case caseRecord : Trigger.new) { if (caseRecord.Origin == 'Email') { // 获取与案例关联的机会 Opportunity opp = [SELECT Id FROM Opportunity WHERE CaseId = :caseRecord.Id LIMIT 1]; if (opp != null) { // 创建一个 EmailMessage 对象并将其与机会关联 EmailMessage emailMessage = new EmailMessage( Subject = caseRecord.Subject, HtmlBody = caseRecord.Description, ToAddress = caseRecord.SuppliedEmail, ParentId = opp.Id, Status = 'Received' ); insert emailMessage; } } } }
- 创建一个触发器,将创建的案例与机会关联。您可以在案例创建时,通过案例的
方案 B: 使用 Inbound Email Service
-
创建 Inbound Email Service:
- 在 Salesforce 设置中,搜索并选择“Inbound Email Services”。
- 创建一个新的 Email Service,并配置它以处理传入的邮件。
-
实现 Email Handler:
- 创建一个 Apex 类来处理传入的邮件,解析邮件内容,并将其与相应的机会关联。
global class EmailHandler implements Messaging.InboundEmailHandler { global Messaging.InboundEmailResult handleInboundEmail(Messaging.InboundEmail email, Messaging.InboundEnvelope envelope) { Messaging.InboundEmailResult result = new Messaging.InboundEmailResult(); // 查找与邮件关联的机会 Opportunity opp = [SELECT Id FROM Opportunity WHERE Email__c = :email.fromAddress LIMIT 1]; if (opp != null) { // 创建 EmailMessage 对象并将其与机会关联 EmailMessage emailMessage = new EmailMessage( Subject = email.subject, HtmlBody = email.htmlBody, ToAddress = email.fromAddress, ParentId = opp.Id, Status = 'Received' ); insert emailMessage; } result.success = true; return result; } }
3. 结合以上方案
- 使用 Email-to-Case 适合将用户回复转化为案例,并通过触发器将其关联到机会。
- 使用 Inbound Email Service 适合直接处理传入的邮件,并将其转化为
EmailMessage
对象并与机会关联。
注意事项
- 权限: 确保您有权限配置电子邮件服务和创建触发器。
- 数据完整性: 确保数据字段和状态值在您的 Salesforce 实例中是正确的,并符合您的业务逻辑。
通过这些步骤,您可以自动发送邮件并处理用户回复,将其与机会关联。如果您有其他问题或需要进一步的帮助,请告诉我!