Apps 脚本使用 getBytes() 将 Gmail 附件发送到外部 API

Apps Script send Gmail attachment to external API using getBytes()

我正在尝试使用 Apps 脚本创建 Gmail 插件。这会调用用 C# 创建的第三方网站 API 将电子邮件内容 post 发送到另一个系统。

API方法使用POST,并接受正文中JSON格式的数据作为参数。

我现在可以 post 没有附件的消息。

我在方法中有一个附件参数,定义为: public byte[] paramName {get;设置;}.

我认为我可以使用 getBytes() 方法,并将其 return 作为参数发送给该方法。

代码片段:

var attachments = message.getAttachments();
  var lists = [];
  for(var i = 0; i < attachments.length; i++){
    var attachment = {
      "Id": id,
      "FileByte": attachments[i].getBytes(),
      "FileName": attachments[i].getName()
    }
    
    lists.push(attachment);

  }

  var data = {
    "Email": email,
    "Comment" : byteMsg,
    "Id": id,
    "List": lists, // attachments here
    "Type": type
  }
  
  var url = urlAPI
    var options = {
    method: 'post',
    contentType: 'application/json',
    muteHttpExceptions: true,
    headers: header,
    payload: JSON.stringify(data)
  };

检查日志显示数据(由于长度而被截断): 日志输出太大。截断输出。 [-119.0, 80.0, 78.0, 71.0, 13.0, 10.0, 26.0, 10.0, 0.0, 0.0, 0.0, 13.0, 73.0, 72.0, 68.0, 82.0, 0.0, 0.0, 0.0, -56.0, 0.0, 0.0,0, 6.0, 8.0, 6.0, 0.0, 0.0, 0.0, -28.0, -22.0, 8.0, 56.0, 0.0, 0.0, 0.0, 9.0, 112.0, 72.0, 89.0, 115.0, 0.0, 0.0, 18.0, 116.0,...

存在负值,我不确定它们是否有效。

我收到 'Object reference not set to an instance of an object' 错误。这类似于我在弄清楚它是如何工作时使用上面的 Comment 参数(也是一个字节 [])得到的错误。

有没有人做过类似的东西?任何帮助将不胜感激。

提前致谢!

从你问题中的以下情况来看,

Inspecting the logs shows the data (truncated due to length): Logging output too large. Truncating output. [-119.0, 80.0, 78.0, 71.0, 13.0, 10.0, 26.0, 10.0, 0.0, 0.0, 0.0, 13.0, 73.0, 72.0, 68.0, 82.0, 0.0, 0.0, 0.0, -56.0, 0.0, 0.0, 0.0, -6.0, 8.0, 6.0, 0.0, 0.0, 0.0, -28.0, -22.0, 8.0, 56.0, 0.0, 0.0, 0.0, 9.0, 112.0, 72.0, 89.0, 115.0, 0.0, 0.0, 18.0, 116.0,...

There are negative values which I'm not sure if they are valid.

我认为在您的情况下,您可能需要使用 unit8array。当使用 Google Apps 脚本从 blob 中检索字节数组时,它是 int8array。为了从int8array转换为unit8array,下面的修改怎么样?

发件人:

"FileByte": attachments[i].getBytes(),

收件人:

"FileByte": Uint8Array.from(attachments[i].getBytes()),

参考文献: