MailApp.sentEmail l不再起作用(谷歌应用程序脚本)

时间:2017-01-09 14:44:45

标签: javascript google-apps-script

我已经制作了一个绑定脚本来扫描其电子表格的记录,如果某些条件属实,则会向相应的员工发送电子邮件

更具体地说,脚本是通过列检查员工列表是否生日,而不是假值。我的脚本工作了几个星期,今天它停止发送电子邮件而不改变任何内容< / 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

你能帮帮我..?提前谢谢

3 个答案:

答案 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问题。希望它可以帮到你。