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()),
参考文献:
我正在尝试使用 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()),