[从Google Apps脚本发送到SendGrid时为空白PDF

问题描述 投票:1回答:1

我有一个应用脚本,可以从Google幻灯片创建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邮件功能:

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页面。有什么想法吗?这是我第一次使用base64encoding。我可能没有正确执行。

pdf google-apps-script base64 sendgrid
1个回答
0
投票

此修改如何?

修改点:

  • 从您的脚本中,将pdf_filevar pdf_file = DriveApp.getFileById(certificate.getId()).getAs('application/pdf');发送到sendGridEmail(toEmail,subject,body,fromEmail,pdf_file,subject +".pdf");。即,pdf_file是斑点,在sendGridEmail中用作myPDFfile
  • 在这种情况下,dataUtilities.base64Encode(data)必须为Byte[]

当上述内容反映到您的脚本时,请进行如下修改。

修改的脚本:

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

注意:

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

参考:

© www.soinside.com 2019 - 2024. All rights reserved.