我有一个发送电子邮件的谷歌应用程序脚本,我设置了一个触发器,以便它在每个表单提交时发送电子邮件。问题是触发器在最初的几分钟内完全正常,但后来甚至在输入正确的数据之后。脚本不发送邮件,我必须手动按下脚本的执行按钮。这是我的代码
var EMAIL_SENT = "EMAIL_SENT";
function sendEmailsapp() {
var sheet = SpreadsheetApp.getActiveSheet();
var startRow = 2; // First row of data to process
var numRows = sheet.getLastRow(); // Number of rows to process
// Fetch the range of cells A2:B3
var dataRange = sheet.getRange(startRow, 1, numRows,8)
// Fetch values for each row in the Range.
var data = dataRange.getValues();
for (var i = 0; i < data.length; ++i) {
var row = data[i];
var emailAddress = row[4]; // First column
var message = row[5]; // Second column
var emailSent = row[7]; // Third column
var money=row[6]
if (emailSent != EMAIL_SENT) { // Prevents sending duplicates
var subject = "You have been registered for follwoing events:-";
var event;
MailApp.sendEmail(emailAddress, subject, "Please bring your college id and copy of this mail either in phone or printed paper"+
"\n\n"+"Name:-"+row[1]+"\n"+"USN:-"+row[2]+"\n"+"Mobile:-"+row[3]+"\n"+"Event:-"+ message+"\nMoney status:-"+money+"You registered on"+row[0]);
sheet.getRange(startRow + i, 8).setValue(EMAIL_SENT);
// Make sure the cell is updated right away in case the script is interrupted
SpreadsheetApp.flush();
}
}
}
代码工作正常。唯一的问题是触发器。
这是我的触发器的图像。 sendEmailsapp是触发器,sendEmailsweb是另一个也遇到同样问题的触发器。
这是日志
我唯一的问题是触发器没有被触发,而是没有发送电子邮件。
答案 0 :(得分:21)
即使脚本是正确的,我的触发器也不像你的那样工作。
解决方案非常愚蠢。我删除了触发器并添加了一个新触发器。完全相同的触发器。
答案 1 :(得分:10)
我的脚本遇到了这个问题,但我使用Time-Driven作为事件。我每分钟都设置它,但它不会做任何事情。使用上面写的日志记录方法,我发现触发器工作正常 - 我设置的每一分钟。但它实际上并没有像我明确点击“运行”按钮时那样做。
我怀疑它与以下行有关:
var sheet = SpreadsheetApp.getActiveSheet();
所以我玩了它并改为:
var spreadsheet = SpreadsheetApp.openById("INSERT_SPREADSHEET_ID_HERE");
var sheet = SpreadsheetApp.setActiveSheet(spreadsheet.getSheets()[0]);
它终于奏效了。
将INSERT_SPREADSHEET_ID_HERE
替换为电子表格的ID(来自您的网址https://docs.google.com/spreadsheets/d/INSERT_SPREADSHEET_ID_HERE/edit#gid=0)。
从getSheets()[0]
开始,0
将是您在该特定电子表格中可能多张的第一张。
我希望这会有所帮助。
答案 2 :(得分:1)
我觉得有用的是在&#34;资源&gt;当前项目触发器&#34;中立即设置通知。我设置它给我发错误邮件。该电子邮件包含您可以解决的问题的详细信息:)。
答案 3 :(得分:0)
我愿意打赌问题不是触发器。即使您的代码有效,也可能是阻止代码的条件部分工作的条件。您可以测试该功能是否实际触发,即使它没有给您预期的结果。在函数后立即放置Logger.log()
语句:
function sendEmailsapp() {
Logger.log('sendEmailsapp ran!');
然后查看LOGS。我无法相信该功能未被触发。电子邮件可能没有收到,但我愿意打赌你会得到msg&#39; sendEmailsapp跑了!&#39;打印到LOGS。所以,这是你需要做的第一件事。
您需要做的下一件事是在检索电子邮件后立即发出Logger.log()
语句:
var emailSent = row[7];
Logger.log('value of the email is: ' + emailSent);
然后检查LOGS以确定实际返回的值。如果返回的每个值都是&#34; EMAIL_SENT&#34;,则不会发送任何电子邮件。
我们需要知道实际结果是什么。您需要提供打印到LOGS的内容。
答案 4 :(得分:0)
这是一个老问题,但是有一个新的解决方案。请将您的运行时环境更改为V8。 V8似乎没有导致此错误。