从Google Apps Script发送到SendGrid时空白PDF



我有一个应用程序脚本,它正在从谷歌幻灯片创建PDF。如果我使用Google的MailApp发送PDF,我可以正确接收PDF。

var pdf_file =   DriveApp.getFileById(certificate.getId()).getAs('application/pdf');
GmailApp.sendEmail(email, subject, body,{attachments: pdf_file,name: subject});

所以现在我不想使用 GMail 而是使用 SendGrid,我只更改了上面的一行,不再调用 GMailApp.sendEmail,现在使用这个新的 sendGridEmail 函数:

sendGridEmail(toEmail,subject,body,fromEmail,pdf_file,subject +".pdf"); 

这是我的SendGrid Mail功能:

function sendGridEmail(toEmail,subject,body_details,fromEmail,myPDFfile,certificateName) {
var SENDGRID_KEY ='xxxxxxxxxxxxxxxxxxxxxxxxxxx';
var headers = {
"Authorization" : "Bearer "+ SENDGRID_KEY, 
"Content-Type": "application/json" 
}
var cert = Utilities.base64Encode(myPDFfile);
var body =
{
"personalizations": [
{
"to": [
{
"email": toEmail
}
],
"subject": subject
}
],
"from": {
"email": fromEmail
},
"template_id":"d-xxxxxxxxxxxxxxxxxxxxxxxxxxx",
"attachments": [
{
content: cert,
filename: certificateName,
type: "application/pdf",
}
]
}
var options = {
'method':'post',
'headers':headers,
'payload':JSON.stringify(body)
}
var response = UrlFetchApp.fetch("https://api.sendgrid.com/v3/mail/send",options);
Logger.log(response);  
}

我收到了电子邮件。除 PDF 外的所有作品均为空白。我可以看到,当我将PDF发送到我的sendGridEmail函数(它在调试器中显示为PDF(并且一旦我执行base64Encode,我看到它是大量的数字,但是当我收到电子邮件时,我只看到一个空白的pdf页面。有什么想法吗?这是我第一次使用 base64 编码。我可能做得不正确。

这个修改怎么样?

修改点:

  • 从您的脚本中,var pdf_file = DriveApp.getFileById(certificate.getId()).getAs('application/pdf');pdf_file被发送到sendGridEmail(toEmail,subject,body,fromEmail,pdf_file,subject +".pdf");。也就是说,pdf_file是斑点,这在sendGridEmail中用作myPDFfile
  • 在这种情况下,需要Byte[]Utilities.base64Encode(data)data

当上述观点反映到您的脚本中时,请按如下方式修改。

修改后的脚本:

从:
var cert = Utilities.base64Encode(myPDFfile);
自:
var cert = Utilities.base64Encode(myPDFfile.getBytes());

注意:

如果这不是问题的直接解决方案,那么通过将标头添加到 base64 数据来测试脚本怎么样?

引用:

  • base64编码(数据(
  • getBytes((

最新更新