首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过多个标签发送电子邮件-两个用于循环?

通过多个标签发送电子邮件-两个用于循环?
EN

Stack Overflow用户
提问于 2020-04-13 15:18:25
回答 2查看 159关注 0票数 0

这里的初学者-读过许多类似的问题,但不知道我需要什么。非常感谢您的指导!

我有一个谷歌表与4个标签。表1是摘要表,可以忽略。表2-4有我想在电子邮件中发送的电子邮件地址和其他信息的列表。下面是我尝试的一个脚本,它循环遍历除“摘要”选项卡之外的所有工作表,并向选项卡中列出的电子邮件地址发送测试电子邮件。(注意,在表2-4中,A列显示姓名,B列显示电子邮件地址。)

下面的脚本当前抛出一个‘异常:无效的电子邮件:电子邮件(第25行,文件“代码”)错误-导致我认为我有一些问题的脚本找到我的数据在床单。

代码语言:javascript
复制
function sendEmailLoop() {

var sheets =   SpreadsheetApp.getActiveSpreadsheet().getSheets();
sheets.forEach(function(sheet) {
var range = sheet.getDataRange();

if (sheet.getName() == "Summary") //Disregard tab named 'Summary' 
{      
}
else
{    
  var range = sheet.getDataRange(); //to set the range as array
  var values = range.getDisplayValues(); //to get the value in the array
  var lastRow = range.getLastRow();
  var ss = SpreadsheetApp.getActiveSpreadsheet();  //declare the spreadsheet
  var sheet = ss.getSheetByName("Sheet1");
  var i;
  var logContent = '';

  for (i = 0; i < lastRow; i++) 
  {   
  var Name = values[i][0];       //[Name] cell A++
  var Email = values[i][1];      // [Email] cell B++

MailApp.sendEmail({
 to: Email,
 subject: Name + 'Test',
 message: 'This is a test message ' + Email + Name});

}; //end for loop - email tab data
};   // end 'else'
}); // end function(sheet)       
 } // end SendEmailLoop()  

注意-我也尝试过几个类似的循环功能,但都没有效果:

1:

代码语言:javascript
复制
var allsheets = ss.getSheets(); 
for (var s in allsheets){  

2:

代码语言:javascript
复制
ss = SpreadsheetApp.getActiveSpreadsheet(); 
for (var i = 0; i < tabs.length; i++)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-21 08:08:53

答案:

您从电子邮件的工作表中检索的范围是不正确的。

更多资料:

在您提供的表格中,输入电子邮件的单元格从第4行开始,而不是从第1行开始。请参见下面的图像:

您用来遍历电子邮件的逻辑如下:

代码语言:javascript
复制
var range = sheet.getDataRange();
var values = range.getDisplayValues();
for (var i = 0; i < lastRow; i++) {   
  var Name = values[i][0];
  var Email = values[i][1];
}

但是,由于您已经获得了整个数据范围,而不仅仅是您想要的数据,从电子邮件开始,values数组也包含标题--在本例中,对象如下所示:

代码语言:javascript
复制
[[www.google.com], [], [EmpEmail], [EmpName1@blah.com], [EmpName2@blah.com]]

因此,当您调用MailApp.sendEmail()并将Email指定为该数组的第一个时,当您试图向www.google.com发送电子邮件时,将得到Exception: Invalid email: Email错误。

代码修复:

幸运的是,这是一个简单的修复。由于数组中已经有数据集,所以可以更改循环的边界,从3开始,而不是从0开始。

代码语言:javascript
复制
for (i = 3; i < lastRow; i++) {   
  var Name = values[i][0];
  var Email = values[i][1];
  
  MailApp.sendEmail({
    to: Email,
    subject: Name + Title + 'Test',
    message: 'This is a test message for the training that can be found at ' + URL});
}

参考文献:

票数 0
EN

Stack Overflow用户

发布于 2020-04-13 18:30:48

我稍微重写了您的代码,它正在为我工作:

代码语言:javascript
复制
function sendEmails() {
var sheets =   SpreadsheetApp.getActiveSpreadsheet().getSheets();
sheets.forEach(function(sheet) {
  if (sheet.getName() == "Sheet1") {
    var values = sheet.getDataRange().getDisplayValues();
    for (var i = 0; i < values.length; i++) {
      var Name = values[i][0];
      var Email = values[i][1]; 
      MailApp.sendEmail({
 to: Email,
 subject: Name + ' Test',
 message: 'This is a test message ' + Email + Name});
    }
}
});
}

我的sheet1看起来是这样的:

代码语言:javascript
复制
name1 email1@email.com
name2 email2@email.com

如果仍然遇到相同的问题,工作表或电子邮件格式中的单元格格式可能是不正确的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61191002

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档