我有一个应用程序脚本,它正在从谷歌幻灯片创建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((