我已经制作了一个绑定脚本来扫描其电子表格的记录,如果某些条件属实,则会向相应的员工发送电子邮件
更具体地说,脚本是通过列检查员工列表是否生日,而不是假值。我的脚本工作了几个星期,今天它停止发送电子邮件而不改变任何内容< / p>
我的代码
function send() {
//returns the current active spreadsheet
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet = spreadsheet.getActiveSheet();
var recipient;
var startRow = 2; // First row of data to process
var lastRow = sheet.getLastRow();//Last row to process ,the EOF
var emailSend = "FALSE";//flag to know if the mail has been sent
var d = new Date();//saving the date
var timeStamp = d.getYear();//specifing the years section
//take images location
var wishes_imageURL ="http://dekhnews.com/wp-content/uploads/... nielsen_imageURL="http://www.nielsen.com/content/dam/nielsenglobal/us
//change them to objects blobs
var wishesBlob = UrlFetchApp
.fetch(wishes_imageURL)
.getBlob()
.setName("wishesBlob");
var nielsenBlob = UrlFetchApp
.fetch(nielsen_imageURL)
.getBlob()
.setName("nielsenBlob");
//for every employee that the 4rth column is true(has_birthday) send email to his/her email address
for (var i =startRow ; i <= lastRow; i++) {
//take info about if the birthday mail has been send before to the employee
emailSend = sheet.getRange(i, 6).getValue();
//whoever has birthday and havent get email before send him/her mail
if( ( sheet.getRange(i, 5).getValue() == true) && (emailSend !="TRUE") && ( timeStamp == sheet.getRange(1, 7).getValue())){
recipient = sheet.getRange(i, 4).getValue();
MailApp.sendEmail(sheet.getRange(i, 4).getValue(),
"",
"BirthDay Wishes",
{ htmlBody:"<h3 style='text-align:center; color:blue;'><i>" + "Για τα γενέθλιά σου ευχόμαστε ολόψυχα Χρόνια Πολλά και κάθε προσωπική και επαγγελματική επιτυχία!" +
"</i></h3>" + "<center><img src='cid:wishes' style='width:500px; height:450px; align:center; position:relative; '/></center>" + "\n" +
"<h3 style = 'text-align:center;color:blue;'>" + "Βίκη – Σπύρος &" +"\n" + "Δ/νση Ανθρώπινου Δυναμικού" + "</h3>" + "\n"
+ "\n\n\n\n"+ "<center><img src='cid:nielsen'/></center>",
inlineImages:
{
wishes: wishesBlob,
nielsen: nielsenBlob
}
});
//after we sent the mail we "lock" this emplyee for the current year
sheet.getRange(i,6).setValue("TRUE");
}
}
我检查执行记录并且它没有显示是否发送了电子邮件。但是如果我使用这样的东西它可以工作
MailApp.sendEmail("recipient.address@gmail.com", // to
"sender.name@gmail.com", // from
"Your Subject Goes Here", // email subject
"What ever you want to say"); // email body
你能帮帮我..?提前谢谢
答案 0 :(得分:1)
首先,如果您确定脚本中没有任何更改,我会确保您的电子表格中没有任何更改。如果是这种情况,那么我将确保您的timestamp
变量仍然有效,因为这是新的一年。除此之外,一些调试技巧将是:
由于您的第二个代码块有效,但不是原始代码块,我会逐步从sendEmail
函数中逐步替换一个参数,该函数不适用于该示例。这样,您可以将其缩小到失败的特定参数。
我猜测它可能是“到”参数,您可能会从电子表格中获取错误的字段,或者“电子邮件正文”获取图片,网址可能会有变化等等。
答案 1 :(得分:0)
而非 MailApp 服务尝试使用较新的 GmailApp https://developers.google.com/apps-script/reference/gmail/gmail-app
答案 2 :(得分:0)
嗯,您可以在Google documentation中验证如何正确使用/设置MailApp.sendEmail
。
我在此SO question中也发现,如果脚本无效,脚本可能会遇到问题。
声明here版本是脚本的静态副本。保存版本后,将无法再修改该版本,仅删除该版本。当您处理经历了许多更改和迭代的脚本时,将使用此功能。版本允许您跟踪您的更改。
有关此内容的更多信息,请查看答案中的链接SO问题。希望它可以帮到你。