在 GAS 中使用 mailjet 发送带附件的邮件

Send mail with attachment using mailjet in GAS

我正在尝试使用来自 Google Apps 脚本的 Mailjet 发送带有 PDF 附件的邮件。我可以毫无问题地发送普通邮件,但不太确定如何包含附件。

Mailjet 文档:https://dev.mailjet.com/guides/#sending-with-attached-files

我认为我的问题是 Base64Content。我真的不明白如何对附件进行编码。当我执行以下代码时,会发送一封带有 PDF 附件的电子邮件,但当我尝试打开 PDF 时,它会显示:"Cannot display PDF (test.pdf is of invalid format)".

var newDoc = DocumentApp.openById(newDocid)

var attachment = newDoc.getAs(MimeType.PDF);

var mailjeturl = "https://api.mailjet.com/v3.1/send";

var mailjetparams = {
    "Messages":[{
      "From": {"Email": 'myemail@domain.com',"Name": 'Robert'},
      "To": [{"Email": 'theiremail@domain.com'}],
      "Subject": 'subject',
      "HTMLPart": 'this message',
      "Attachments": [{"ContentType": "application/pdf",
                       "Filename": "test.pdf",
                       "Base64Content": Utilities.base64Encode(attachment)}]
    }]
  }

var mailjetoptions = {
    'method': 'post',
    'contentType': 'application/json',
    'payload': JSON.stringify(mailjetparams),
    'headers': {'Authorization': 'Basic ' + Utilities.base64Encode(MAILJET_KEY)}
  };

var response = JSON.parse(UrlFetchApp.fetch(mailjeturl, mailjetoptions))

尝试这样编码:

  var pdf = newDoc.getAs('application/pdf').getBytes();
  var attach = {fileName:'test.pdf',content:pdf, mimeType:'application/pdf'};

  var mailjetparams = {
    "Messages":[{
    "From": {"Email": 'sender@domain.com',"Name": 'Robert'},
    "To": [{"Email": 'reciever@domain.com'}],
    "Subject": 'subject',
    "HTMLPart": 'this message',
    "Attachments": [attach]
   }]
 }

下面的修改怎么样?我认为错误的原因可能是 Utilities.base64Encode(attachment).

修改点:

attachmentnewDoc.getAs(MimeType.PDF) 检索到的是 Blob。 Blob 无法使用 Utilities.base64Encode() 直接转换为 base64。所以请将Blob转换为字节数组,并转换为base64。

当这反映到您的脚本中时。修改部分如下

发件人:

var attachment = newDoc.getAs(MimeType.PDF);

收件人:

var attachment = newDoc.getAs(MimeType.PDF).getBytes();

var attachment = newDoc.getBlob().getBytes();

当 Google 文档作为 Blob 检索时,Google 会自动转换为 PDF。你也可以用这个。

参考:

如果我误解了你的问题,我很抱歉。