8 triggers eventtrigger google-sheets google-apps-script google-forms
我有一个发送电子邮件的谷歌应用程序脚本,我设置了一个触发器,以便它在每个表单提交时发送电子邮件.问题是触发器在最初的几分钟内完全正常,但后来甚至在输入正确的数据之后.脚本不发送邮件,我必须手动按下脚本的执行按钮.这是我的代码
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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
代码工作正常.唯一的问题是触发器.
这是我的触发器的图像.sendEmailsapp是触发器,sendEmailsweb是另一个也遇到同样问题的触发器.
这是日志 
我唯一的问题是触发器没有被触发,它不是发送电子邮件.
小智 21
即使脚本是正确的,我的触发器也不像你的那样工作.
解决方案非常愚蠢.我删除了触发器并添加了一个新触发器.完全相同的触发器.
小智 10
我的脚本遇到了这个问题,但我使用Time-Driven作为事件.我每分钟设置它,但它不会做任何事情.使用上面写的日志记录方法,我发现触发器工作正常 - 我设置的每一分钟.但它实际上并没有像我明确点击"运行"按钮时那样做.
我怀疑它与以下行有关:
var sheet = SpreadsheetApp.getActiveSheet();
Run Code Online (Sandbox Code Playgroud)
所以我玩了它并改为:
var spreadsheet = SpreadsheetApp.openById("INSERT_SPREADSHEET_ID_HERE");
var sheet = SpreadsheetApp.setActiveSheet(spreadsheet.getSheets()[0]);
Run Code Online (Sandbox Code Playgroud)
它终于奏效了.
替换INSERT_SPREADSHEET_ID_HERE为电子表格的ID(来自您的网址https://docs.google.com/spreadsheets/d/INSERT_SPREADSHEET_ID_HERE/edit#gid=0).
从中getSheets()[0],这0将是您在该特定电子表格中可能的多张表格中的第一张.
我希望这有助于任何方式.
我愿意打赌问题不是触发因素。即使您的代码可以工作,也可能存在阻止代码的条件部分工作的条件。您可以测试该函数是否确实正在触发,即使它没有给您预期的结果。Logger.log()紧接着函数后面放置一条语句:
function sendEmailsapp() {
Logger.log('sendEmailsapp ran!');
Run Code Online (Sandbox Code Playgroud)
然后查看日志。我不敢相信该功能没有被触发。电子邮件可能不会发送,但我愿意打赌您会收到“sendEmailsapp run!”这条消息。打印到日志。所以,这是你需要做的第一件事。
您需要做的下一件事是Logger.log()在检索电子邮件后立即发表声明:
var emailSent = row[7];
Logger.log('value of the email is: ' + emailSent);
Run Code Online (Sandbox Code Playgroud)
然后检查日志以了解实际返回的值。如果返回的每个值都是“EMAIL_SENT”,则不会发送任何电子邮件。
我们需要知道实际结果是什么。您需要提供打印到日志的内容。
| 归档时间: |
|
| 查看次数: |
19645 次 |
| 最近记录: |