【问题标题】:Sending mail with HTML body using for in Google Apps Script在 Google Apps 脚本中使用 for 发送带有 HTML 正文的邮件
【发布时间】:2015-05-08 00:23:20
【问题描述】:

我正在使用 Google Apps 脚本从 Google 表格进行非常基本的邮件合并。我有需要以 html 形式呈现的文本,但是当它发送消息正文时包含“[object Object]”而不是 HTML 内容。

function test(){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var howmany = ss.getRangeByName("howmany").getValue();
var emails = ss.getRangeByName("email").getValues();
var subjects = ss.getRangeByName("subject").getValues();
var text = ss.getRangeByName("text").getValues();

for (var i = 0; i < howmany; i++) {
MailApp.sendEmail(emails[i],subjects[i],{htmlBody: text[i]});
}

【问题讨论】:

    标签: html email google-apps-script


    【解决方案1】:

    get values 是一个二维数组,即使它只有一列宽。

    试试:

    MailApp.sendEmail(emails[i][0],subjects[i][0],"",{htmlBody: text[i][0]});
    

    【讨论】:

      【解决方案2】:

      查看 API 文档,您似乎需要使用 different overload of sendEmail

      MailApp.sendEmail(emails[i], subjects[i], text[i], { htmlBody: text[i] });
      

      第四个参数是一个设置高级选项的JS对象。这就是文档对htmlBody 的评价:

      如果设置,能够呈现 HTML 的设备将使用它而不是 必需的正文参数;您可以在其中添加一个可选的 inlineImages 字段 如果您的电子邮件有内联图像,则为 HTML 正文

      因此,我建议您还提供第三个参数的纯文本版本,以支持使用无法显示 HTML 的电子邮件的人。

      【讨论】:

      • 我对代码进行了更正,使其显示为'MailApp.sendEmail(emails[i],subjects[i],text[1],{ htmlBody: text[i] });'但是电子邮件现在显示为 [Ljava.lang.Object;@12c8f962 - 任何想法都非常感谢!
      【解决方案3】:

      text[i] 当前是一个 javascript 对象,函数 sendEmail 需要一个表示电子邮件正文的字符串。这种[object Object] 的打印发生在以 Google App Script 打印 javascript 对象时。

      您需要将非 html 正文和/或 html 正文指定为 see specification 字符串。

      发送到函数sendEmail(recipient, subject, body, options)。同样在选项散列中,分配给 htmlBody 的值需要是一个字符串。

      我建议您使用Logger.log(text[i]); 来检查 text[i] 中的内容是否符合您的预期。

      【讨论】:

      • 我使用了记录器,它显示了 [15-05-08 10:56:56:851 AEST] [test] 这是我的目标。我对代码进行了更正,使其显示为“MailApp.sendEmail(emails[i],subjects[i],text[1],{ htmlBody: text[i] });'但是电子邮件现在显示为 [Ljava.lang.Object;@12c8f962 - 任何想法都非常感谢!
      • 使用Logger.log(typeof text[1]); Logger.log(typeof text[i]); - 我们需要找出 text[1] 和 text[i] 的类型才能在此处前进。 [Ljava.lang.Object;@12c8f962 被返回,因为此类对象表示一个引用类型,它不是数组类型,因此返回类的二进制名称,如 Java 语言规范所指定,请参见此处:stackoverflow.com/questions/3442090/…跨度>
      • 返回:[15-05-08 11:16:45:957 AEST] 对象 [15-05-08 11:16:45:958 AEST] 对象
      • 嗨,克里斯 - 很抱歉回复缓慢。所以现在我们知道我们有两个对象。让我们看看他们有什么键:Logger.log(text[1].keys()); Logger.log(text[i].keys()); 我们正在寻找这些对象中的字符串。也请尝试Logger.log(String(text[1])); Logger.log(String(text[i]));,我们将尝试将这些对象直接转换为字符串
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-05
      • 2023-03-15
      相关资源
      最近更新 更多