У меня есть класс APEX, который используется для отправки электронной почты каждый день в 19:00:
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}); } }
Когда я выполняю метод send () через экземпляр ReportBroadcaster через анонимный APEX доставляется так, как ожидалось. Однако, когда я планирую занятие, электронное письмо доставляется с пустым телом. Если я переключу тело письма на обычный текст, оно будет доставлено нормально (но это не сработает для меня).
Как мне заставить это работать?
ОБНОВЛЕНИЕ:
Вы не можете вызвать getContent () в экземплярах PageReference ни из запланированных методов APEX, ни из методов @future (я не уверен, почему это так, но это то, что есть). Я думаю, что решением будет создание веб-службы, которую я буду вызывать из метода @future. Кажется невероятно хакерским, но я не уверен, что еще я мог сделать.
ОКОНЧАТЕЛЬНОЕ ОБНОВЛЕНИЕ: Вот как отправлять электронные письма HTML из запланированного APEX:
Хотя этот подход окольный, он работает.