Javascript 使用脚本触发自动电子邮件时出错

Javascript 使用脚本触发自动电子邮件时出错,javascript,google-apps-script,google-sheets,Javascript,Google Apps Script,Google Sheets,我使用的谷歌电子表格如下所示: A B C D 1 Name e-mail Identifer Status 2 Alex ax@gmail.com ERT ER A 3 Micke miike477@gmail.com Ejyu er w 4 John john778

我使用的谷歌电子表格如下所示:

   A             B                    C             D
1 Name        e-mail              Identifer       Status
2 Alex       ax@gmail.com         ERT ER          A
3 Micke      miike477@gmail.com   Ejyu er w       
4 John       john7788@tri.com     Arb Ed          C
我在
D
列中有一个下拉列表(比如说a、B和C),现在我希望每当值改变时(最初
D
列将为空)在
D列
中,针对特定的
名称
而不是通过下面提到的发件人id和内容自动触发
B列
中提到的电子邮件id

电子邮件中,无论何时在列<代码> d>代码>中的值更改都要触发,除了空白,如果先前的值是“B”,现在改为“C”,则邮件应该被触发。

寄件人-example@gmail.com
抄送-test1@gmail.com,test2@gmail.com

电子邮件正文:

Hi Alex(
应根据电子邮件触发器的名称从A列中选择)

这里有些句子。 此处带有您的ERT ER
应从C列中选取)的某些句子的状态为A
应从D列中选取)

问候,
示例
123456789

我正在尝试使用下面提到的脚本:

function onEdit(event){
    if(event.range.getColumn() == 4){ //A -> 1, B -> 2, etc
        function sendMyEmail(line){
    var sendTo = spreadsheet.getRange(row, 2).getValue();
    var cc     = 'test1@gmail.com'+","+'test2@gmail.com';
    var subject = "What is the: "+ spreadsheet.getRange(row, 3).getValue();
    var content = "Hi "+spreadsheet.getRange(row, 1).getValue();+","

                 +"what is the vlaue "+spreadsheet.getRange(row, 3).getValue();+ "with the status"+spreadsheet.getRange(row, 4).getValue();+ "."
    MailApp.sendEmail(sendTo,
        cc,
        subject,
        content);
}
    }
}

你有两个主要问题

  • (例如
    MailApp

  • 您使用的
    MailApp.sendmail()
    不正确,因为您正在将
    cc
    传递到应该传递主题或回复地址()的位置。参数顺序很重要

  • 要解决简单触发器的问题,只需在编辑时调用函数

    所有其他问题在下面的代码中解决

    function sendEmailToUser(event){
      var eventRange = event.range;
      var sheet = eventRange.getSheet();
      var sheetName = sheet.getName();
      var column = eventRange.getColumn();
      if (sheetName == "Sheet1" && column == 4){ // Make sure the edited column is in the correct sheet, otherwise editing Column D in Sheet3 might trigger this
        var row = eventRange.getRow(); // You need to know which row so you can send the email to the correct person
        var rowValues = sheet.getRange(row, 1, 1, 4).getValues();
        var name = rowValues[0][0];
        var sendTo = rowValues[0][1];
        var identifier = rowValues[0][2];
        var status = rowValues[0][3];
        if (status != "") { // Don't send the email if the status is blank
          var cc = "test1@example.com, test2@example.com";
          var subject = "What is the: " + identifier;
          var content = "Hi " + name + "\nWhat is the value " + identifier + " with the status " + status + "?";
          MailApp.sendEmail(sendTo, subject, content, {
            cc: cc
          });
        }
      }
    }
    

    你犯了什么错误?@Diego Missing;在声明之前。(第5行,文件“Code”)查看并回顾一下您是如何对ccsubject和'content'进行字符串连接的。@Diego谢谢……现在我遇到了一个错误:TypeError:无法从未定义中读取属性“range”。(第2行,文件“Code”)@Diego我想我会遇到这个错误,因为我在脚本编辑器中手动运行脚本,但我尝试更改了D列中的值,但没有收到电子邮件。非常感谢……它工作得非常好。我只想在
    Hi
    和下一行之间留出一行空间,在
    Next
    行和下一行之间留出一行空间。并且要加粗+标识符+和+状态+。@VectorJX是否看到“\n”?这是一个新行字符。添加另一个
    \n
    将得到一个空行。谢谢…粗体选项不可能??可以@VectorJX。您需要使用
    sendMail
    htmlBody
    高级参数。这意味着我必须以html格式创建整个电子邮件正文??