首页 > 解决方案 > 谷歌应用脚​​本:从 js 文件发送邮件、inlineImage

问题描述

我使用google.script.run在 google 应用程序脚本中使用MailApp API ,并传递这样的邮件对象:

google.script.run.sendMail(mail);

邮件对象的结构如下:

  var mail = {
    to:"",
    cc:"",
    subject:"",
    htmlBody:"",
    inlineImages: inlineImages
  }

inlineImages是一个 Javascript 对象,它将键字符串映射到来自谷歌资源的图像数据 (BlobSource)

但是后来我在inlineImages中传递了File对象,但由于非法值,我得到了 Failed 。

编辑 :

我得到这样的inlineImages

var inlineImages

function createImages(event) {
    var file = event.target.files[0];
    var key = "image"+Object.keys(inlineImages).length;

    inlineImages[key] = file;
}

我也尝试获取 Image 对象:

function createImages(event) {
    var file = event.target.files[0];
    var key = "image"+Object.keys(inlineImages).length;

    var reader = new FileReader();
    reader.onload = function(e) {
        var img = new Image();
        img.src = e.target.result;

        inlineImages[key] = img;
    }

    reader.readAsDataURL(file);
}

标签: javascriptgoogle-apps-scriptweb-applications

解决方案


FileObject不是合法值。

合法参数和返回值是 JavaScript 原语,如
+ Number、
+ Boolean、
+ String 或
+ null,以及
由原语、对象和数组组成的 + JavaScript 对象和数组。
+ 页面内的表单元素作为参数也是合法的,但必须是函数的唯一参数,作为返回值是不合法的

您要通过上述从客户端到服务器的限制来获取文件的唯一方法是将 fileObject 转换为上述类型之一。我会选择表格:

如果您使用表单元素作为参数调用服务器函数,则表单将成为单个对象,其中字段名称作为键,字段值作为值。这些值都转换为字符串,除了文件输入字段的内容,它们成为Blob对象。


推荐阅读