Всем привет!
Есть у меня такой код:
PageReference pdf = Page.ReceiptNo;
pdf.getParameters().put('id',don.id);
pdf.setRedirect(true);
Blob b = pdf.getContent();
Messaging.EmailFileAttachment efa = new Messaging.EmailFileAttachment();
efa.setFileName('Receipt No '+don.Name+'.pdf');
efa.setBody(b);
Messaging.SingleEmailMessage email = new Messaging.SingleEmailMessage();
List<String> adresses= new List<String>();
adresses.Add(don.Personal_Account__r.PersonEmail);
email.setToAddresses(adresses);
String body= 'Dear '+ don.Personal_Account__r.Name;
email.setHtmlBody(body);
email.setFileAttachments(new Messaging.EmailFileAttachment[] {efa});
mails.Add(email);
Messaging.sendEmail(mails);
Интересный факт.
Если открыть блокнотам эти pdf, то в битой(коротая не открывается) содержится html код, а в нормальной как и положено.
А html какой? Со страницей ошибки может?
Нет, кусок js кода SF.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE"><script>
if (this.SfdcApp && this.SfdcApp.projectOneNavigator) { SfdcApp.projectOneNavigator.handleRedirect('https://cityoftoronto--WSDEV.cs41.my.salesforce.com?ec=302&startURL=%2Fvisualforce%2Fsession%3Furl%3Dhttps%253A%252F%252Fcityoftoronto--WSDEV--c.cs41.visual.force.com%252Fapex%252Ftestpdfpage%253Finline%253D1'); } else
if (window.location.replace){
window.location.replace('https://cityoftoronto--WSDEV.cs41.my.salesforce.com?ec=302&startURL=%2Fvisualforce%2Fsession%3Furl%3Dhttps%253A%252F%252Fcityoftoronto--WSDEV--c.cs41.visual.force.com%252Fapex%252Ftestpdfpage%253Finline%253D1');
} else {;
window.location.href ='https://cityoftoronto--WSDEV.cs41.my.salesforce.com?ec=302&startURL=%2Fvisualforce%2Fsession%3Furl%3Dhttps%253A%252F%252Fcityoftoronto--WSDEV--c.cs41.visual.force.com%252Fapex%252Ftestpdfpage%253Finline%253D1';
}
</script></head>
</html><!-- Body events -->
<script type="text/javascript">function bodyOnLoad(){if(window.PreferenceBits){window.PreferenceBits.prototype.csrfToken="null";};}function bodyOnBeforeUnload(){}function bodyOnFocus(){}function bodyOnUnload(){}</script>
</body>
</html>
<!--
...................................................................................................
...................................................................................................
...................................................................................................
...................................................................................................
-->
Авторизация не прошла. Скорее всего страница с пдф контентом не доступна гостевому профилю.
Я так и подумал. Сделал рассылку через Scheduled Jobs
чет я сразу не вспомнил,
этот страничный метод не вернет ПДФ если нет сессии, а ее нет у сайтового юзера, а также например как в Email listener. Удивляюсь что это работает в Scheduled Jobs, там ведь тоже нет сессии
я использовал другой метод Blob.toPdf(stringToConvert), он более стабильный, но HTML стринг приходится конечно в коде собирать "ручками"
Интересный вариант. Надо попробовать.
Однако работает, и работает хорошо