我有一个电子表格,存储工作表1上的任务。当一个任务完成时,就会发送一封电子邮件。表2保存了发送到、抄送和回复的特定电子邮件地址。我可以循环浏览第2页并获得每一栏的电子邮件地址。我想能够得到这些电子邮件地址到我的选项发送电子邮件在MailApp。无法从工作表2的循环中获取电子邮件地址。请参阅下面的代码。任何帮助都将不胜感激。
var EMAIL_SENT = "EMAIL_SENT";
function myFunction() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet1 = ss.getSheets()[0];
var sheet2 = ss.getSheets()[1];
var startRow = 2;
var lastRow1 = sheet1.getLastRow()-1;
var lastCol1 = sheet1.getLastColumn();
var lastRow2 = sheet2.getLastRow()-1;
var lastCol2 = sheet2.getLastColumn();
var sh1Range = sheet1.getRange(startRow, 1, lastRow1, lastCol1).getValues();
var sh2Range = sheet2.getRange(startRow, 1, lastRow2, lastCol2).getValues();
var subject = "Test Email";
//sheet2 Email Loop
for (var i = 0; i < sh2Range.length; ++i){
var emails = sh2Range[i];
var to = emails[0];
var cc = emails[1];
var replyTo = emails[2];
}
//sheet1 Data Loop and Send Email
for (var j = 0; j < sh1Range.length; ++j){
var data = sh1Range[j];
var pName = data[0];
var pID = data[1];
var pm = data[2];
var dd = Utilities.formatDate(new Date(data[3]), "America/New_York", "MMMM dd, yyyy");
var team1 = data[4];
var status = data[7];
if (team1 == "Task Completed" && status !== EMAIL_SENT){
var htmlBody;
htmlBody = "Project Name: "+pName+"<br>"+"Project ID: "+pID+"<br>"+"Project Manager: "+pm+"<br>"+"Due Date: "+dd+"<br>";
var optAdvancedArgs = {replyTo: replyTo, cc: cc, name: "Test Email", htmlBody: htmlBody};
//Logger.log(htmlBody);
//Logger.log(optAdvancedArgs);
}
}
}
这个问题有点宽泛,有很多方法可以做你所要做的事情。当您的应用程序的细节不清楚时,很难说您应该选择什么,比如第2页上有多少地址,以及您是否真的需要执行“if”语句,但我将在这里提供两个可能有用的解决方案。
解决方案1:我在上面的评论中试图确定的是,电子邮件地址列表是否与项目列表的长度相同(例如,如果表1上有10个项目,这是否意味着表2中有10行电子邮件地址)。我仍然不清楚,因为您在“抄送”地址中有一个电子邮件地址列表,而在“发送到”和“回复”地址中只有一个(所以您不需要在整个范围中循环,但这可能是项目的其他部分所需要的)。但是,如果是这种情况,那么您实际上可以在一个“for”循环中完成所有这些操作:
//sheet1 Data Loop and Send Email
for (var j = 0; j < sh1Range.length; ++j){
var data = sh1Range[j];
var pName = data[0];
var pID = data[1];
var pm = data[2];
var dd = Utilities.formatDate(new Date(data[3]), "America/New_York", "MMMM dd, yyyy");
var team1 = data[4];
var status = data[7];
if (team1 == "Task Completed" && status !== EMAIL_SENT){
var emails = sh2Range[i];
var to = emails[0];
var cc = emails[1];
var replyTo = emails[2];
var htmlBody;
htmlBody = "Project Name: "+pName+"<br>"+"Project ID: "+pID+"<br>"+"Project Manager: "+pm+"<br>"+"Due Date: "+dd+"<br>";
var optAdvancedArgs = {replyTo: replyTo, cc: cc, name: "Test Email", htmlBody: htmlBody};
//Logger.log(htmlBody);
//Logger.log(optAdvancedArgs);
}
}
解决方案2:否则,您可以在循环访问电子邮件地址时将它们放入一个数组:
var addresses = [];
for (var i = 0; i < sh2Range.length; ++i){
var emails = sh2Range[i];
var to = emails[0];
var cc = emails[1];
var replyTo = emails[2];
addresses.push([to,cc,replyTo])
}
var optAdvancedArgs = {replyTo: addresses[0][2], cc: addresses[j][1], name: "Test Email", htmlBody: htmlBody};
这两种解决方案都对你正在做的事情做了很多假设,但它们可能会引导你找到你正在寻找的答案,或者可能会给你一个更具体的想法,知道你在问什么样的问题。
是否可以在Gmail邮箱中搜索特定的标签/和或主题,并从电子邮件正文中提取电子邮件地址,然后保存到电子表格中? 电子邮件正文示例: 非常感谢,罗德
我有一个谷歌脚本的问题。基本上,我的目标是让脚本检查客户的案例是否得到解决,然后向他们发送电子邮件,告知问题已经解决。我已经完成了发送电子邮件的逻辑,但每次我尝试将其应用到电子表格中时,都会出现错误:
我正在用自己的谷歌账号玩谷歌的OAuth 2.0游乐场,但我似乎无法用游乐场恢复我的Gmail地址。 我使用的范围是: 但当我调用API时:
所以我想知道我是否可以访问我的签名从我的Gmail帐户和发送电子邮件连同它。是否可以使用Gmail API和应用程序脚本? 这是我目前得到的。
我正在使用Google表单将多条消息合并到一个每日电子邮件中,使用脚本和每日定时触发器发送(代码从这里复制,下面是我的版本)。 例如,一个电子邮件地址是abc@example.co.uk,他们收到了电子邮件,但在我的收件箱(xyz@example.co.uk)中是发送到abc@example.co.uk的电子邮件,但不是转发的消息或回复。 有什么办法阻止这一切吗?