从电子表格中获取值时,MailApp.sendEmail无法用于多个收件人

时间:2019-05-10 13:02:56

标签: google-apps-script appscript

我在Google工作表中有一些要发送邮件的电子邮件地址。 当我从代码表中获取这些地址并尝试发送电子邮件时,收到错误消息“无效的电子邮件地址xyz @ mydomain.com,pqr @ mydomain.com”

在以下功能中使用

        sendEmail(recipient, subject, body, options)

但是,当我手动在代码中写入电子邮件地址时 例如

   var recipients='xyz@mydomain.com,pqr@mydomain.com';
    MailApp.sendEmail(recipients, subject, message, {attachments: 
    [attach]});

效果很好!

我的代码

 var emailTo = contacts.getRange(1, 1, numRows, 1).getValues();
 MailApp.sendEmail(emailTo, subject, message, {attachments:[attach]});
 //or
 MailApp.sendEmail(emailTo.toString(), subject, message, {attachments: 
 [attach]});

它不起作用!!!

我无法理解emailTo.toString()和'xyz @ mydomain.com,pqr @ mydomain.com'有何区别。

使用“ if”条件比较这两个条件及其返回的false。当我打印这两个时,它们看起来完全一样。

1 个答案:

答案 0 :(得分:0)

为此只需设置一个测试表和脚本。

这是我的测试表示例:

test sheet

这是脚本:

function stringMail() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sh = ss.getSheetByName('mail-test');

  var range = sh.getDataRange();
  var numRows = range.getValues().length;

  var m1 = 'abc@mydomain.com,def@mydomain.com,ghi@mydomain.com';
  var m2 = sh.getRange(1, 1, numRows, 1).getValues();
  var m3 = m2.toString();

  Logger.log(m1);
  Logger.log(m2);
  Logger.log(m2.toString());
  Logger.log(m3);

  if (m1 == m2.toString()) {
    Logger.log('true');
  }
  if (m1 == m3) {
    Logger.log('also true');
  }
  if (m3 == m2.toString()) {
    Logger.log('still true');
  }
}

如您所见,我运行了一些基本的if语句来检查它们是否相同,如果是,则编写一个日志条目。

从日志输出中:

[19-05-13 09:38:23:178 BST] abc@mydomain.com,def@mydomain.com,ghi@mydomain.com
[19-05-13 09:38:23:179 BST] [[abc@mydomain.com,def@mydomain.com], [ghi@mydomain.com]]
[19-05-13 09:38:23:179 BST] abc@mydomain.com,def@mydomain.com,ghi@mydomain.com
[19-05-13 09:38:23:180 BST] abc@mydomain.com,def@mydomain.com,ghi@mydomain.com
[19-05-13 09:38:23:180 BST] true
[19-05-13 09:38:23:181 BST] also true
[19-05-13 09:38:23:181 BST] still true

如您所见,变量m1只是一串电子邮件地址,被认为与m2相同,后者是getValues().toString()中使用的MailApp.sendEmail()。我还定义了m3,而m2.toString()只是单独定义的,以确保也可以使用。

在测试之后,我们可以确定很可能是电子表格中的值引起了错误,您应该仔细检查是否有多余的空格或奇怪的字符。

只要正确拉出getValues(),然后使用toString()进行转换,就不会有任何问题。