我有一个APEX课程,用于每天晚上7点发送电子邮件:
global class ReportBroadcaster implements Schedulable { global ReportBroadcaster() { } global void execute(SchedulableContext sc) { send(); } global void send() { PageReference page = new PageReference('/apex/nameofvfpage'); page.setRedirect(true); Messaging.SingleEmailMessage email = new Messaging.SingleEmailMessage(); email.setSubject('Example Subject'); email.setHtmlBody(page.getContent().toString()); email.setToAddresses(new String[]{'test@test.com'}); Messaging.sendEmail(new Messaging.SingleEmailMessage[]{email}); } }
当我通过匿名APEX通过ReportBroadcaster实例执行send()方法时,它按预期传递。但是,当我安排课程时,电子邮件将以空白正文发送。如果我将电子邮件正文切换为纯文本,它可以正常传送(但这对我不起作用)。
我如何使这项工作?
更新:
你不能从预定的APEX或@future方法调用PageReference实例上的getContent()(我不确定为什么会这样,但它就是这样)。我认为解决方案是创建一个我将从@future方法调用的Web服务。看起来非常黑客,但我不确定我还能做些什么。
最终更新: 这是如何从预定的APEX发送HTML电子邮件:
虽然这种方法很迂回,但它确实有效。
答案 0 :(得分:5)
getContent()
方法。请参见本页的最后一行:
http://www.salesforce.com/us/developer/docs/apexcode/Content/apex_scheduler.htm
答案 1 :(得分:1)
我不知道为什么这不起作用(它应该),但我可以建议一个解决方法。
您可以将您的vforce页面转换为vforce电子邮件模板(如果您还在其他地方使用该页面,则可以基于旧版本创建新的),然后使用该模板作为电子邮件的来源。在文档中检查的要点包括{a}文档中的SingleEmailMessage.setTemplateId
和vforce文档中的<messaging:*>
组件。
答案 2 :(得分:1)
我也遇到了同样的问题,并且能够找到解决方法。我在这里记录了我的解决方案,并希望它能帮助其他人。
此致 Jitendra Zaa