如何在Salesforce中向自定义对象实体发送邮件(APEX解决方案)
解决Salesforce中给自定义对象发送邮件的问题
我之前也踩过一模一样的坑!Salesforce的标准邮件工具不管是UI操作还是常规Apex方法,都默认绑定User、Contact或者Person Account记录,想用自定义对象当收件人确实卡得头疼。不过用Apex有个绕开限制的办法,亲测有效:
核心思路
别用setContactIds()或setTargetObjectIds()这类绑定标准对象的方法,直接用setToAddresses()传入自定义对象里的邮箱字符串就行,完全摆脱必须关联User/Contact的要求。
代码示例
假设你的自定义对象叫External_Entity__c,存邮箱的字段是Email__c,下面是完整的Apex实现代码:
// 获取目标自定义对象记录 External_Entity__c targetEntity = [SELECT Id, Name, Email__c FROM External_Entity__c WHERE Id = '你的记录ID' LIMIT 1]; // 先校验邮箱格式有效性 if(String.isNotEmpty(targetEntity.Email__c) && targetEntity.Email__c.contains('@')){ // 创建单邮件消息实例 Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage(); // 设置邮件基本信息 mail.setSubject('测试邮件:给自定义实体发送'); mail.setPlainTextBody('这是发给自定义实体「'+targetEntity.Name+'」的测试邮件内容'); // 关键操作:直接传入邮箱地址,无需绑定标准对象ID mail.setToAddresses(new List<String>{targetEntity.Email__c}); // 执行发送 Messaging.SendEmailResult[] results = Messaging.sendEmail(new List<Messaging.SingleEmailMessage>{mail}); // 处理发送结果 for(Messaging.SendEmailResult result : results){ if(result.isSuccess()){ System.debug('邮件发送成功!'); } else { System.debug('发送失败,错误信息:'+result.getErrors()[0].getMessage()); } } } else { System.debug('自定义对象的邮箱字段无效,请检查'); }
注意事项
- 建议给自定义对象的邮箱字段加验证规则,提前拦截格式错误的邮箱,减少发送失败概率。
- Salesforce有单日邮件发送额度限制,免费版和付费版额度不同,批量发送时要注意控制数量。
- 如果是批量给多个自定义对象发邮件,同样用
setToAddresses传入邮箱列表即可,不用绑定任何标准对象ID。
内容的提问来源于stack exchange,提问作者Rod




