Salesforce 为什么由APEX可调度类发送的HTML电子邮件带有空白正文?

Salesforce 为什么由APEX可调度类发送的HTML电子邮件带有空白正文?,salesforce,apex-code,Salesforce,Apex Code,我有一个APEX课程,用于每天晚上7点发送电子邮件: global class ReportBroadcaster implements Schedulable { global ReportBroadcaster() { } global void execute(SchedulableContext sc) { send(); } global void send() { PageReference page = new

我有一个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}); } } 全局类ReportBroadcaster实现可调度{ 全球报告广播公司(){ } 全局无效执行(SchedulableContext sc){ send(); } 全局无效发送(){ PageReference页面=新页面引用('/apex/nameofvfpage'); page.setRedirect(true); Messaging.SingleEmailMessage email=新建消息。SingleEmailMessage(); email.setSubject(“示例主题”); email.setHtmlBody(page.getContent().toString()); email.setToAddresss(新字符串[]{'test@test.com'}); Messaging.sendmail(newmessaging.SingleEmailMessage[]{email}); } } 当我通过匿名APEX通过ReportBroadcaster的实例执行send()方法时,它会按预期交付。然而,当我安排课程时,电子邮件是以空白正文发送的。如果我将邮件正文改为纯文本,它的效果会很好(但这对我不起作用)

我该怎么做

更新:

您不能从scheduled APEX或@future方法调用PageReference实例上的getContent()(我不确定为什么会这样,但事实就是这样)。我认为解决方案是创建一个web服务,我将从@future方法调用它。看起来令人难以置信的骇客,但我不确定我还能做什么

最后更新: 以下是如何从预定的APEX发送HTML电子邮件:

  • 创建一个实现可调度接口的类
  • 让execute()方法调用@future方法
  • 让@future方法调用发送电子邮件的类中启用web服务的方法

虽然这种方法是迂回的,但它是有效的。

我不知道为什么它不起作用(它应该起作用),但我可以建议一种解决方法

您可以将vforce页面转换为vforce电子邮件模板(如果您还在其他地方使用该页面,则可以基于旧模板创建新模板),然后将该模板用作电子邮件的源。文档中要检查的关键点是apex文档中的
SingleEmailMessage.setTemplateId
和vforce文档中的
组件。

getContent()
方法在apex中不受支持。请参见本页最后一行:


我也面临同样的问题,能够找到解决办法。我在这里记录了我的解决方案,希望它能帮助其他人

问候,,
Jitendra Zaa

出于兴趣,正在运行的用户是否可以访问所使用的页面?是。我以系统管理员的身份运行,可以访问该页面。您是使用HTTP请求调用webservice方法,还是直接从@future方法调用?你能粘贴一个代码示例吗?我刚刚试过这个。计划类'execute()>@future>webservice方法。PDF已发送,但为空。是否有人找到此问题的解决方案。我遇到了同样的问题。哇。真不敢相信我居然没看到。奇怪的是,如果页面非常小,它不会抛出错误,并且实际上可以工作。你知道如何在不依赖外部系统触发执行的情况下绕过这个问题吗?有一种方法可以通过web服务实现,我不知道确切的细节,但我已经看到了。这一切都在salesforce内部,但salesforce自己调用web服务,就好像它是一个外部系统一样。希思·罗宾逊会感到骄傲的。祝你好运,谢谢你,对不起,我帮不了你了。我刚刚实现了一种类似的方法,而且效果很好。我用这个方法更新了我上面的问题。这已经不起作用了。你找到其他的解决办法了吗?