【问题标题】:google script email form accept/reject谷歌脚本电子邮件表单接受/拒绝
【发布时间】:2015-03-04 18:33:17
【问题描述】:

我编写了一些宏代码来根据表单提交向经理发送电子邮件(用于费用/审批流程),这是我使用谷歌表单/电子表格的第一个项目,所以也许我可能会遗漏一些简单的东西,但我为此浏览了 2 个教程,我的代码与重要的部分相匹配。

第一部分,SendEmail,完美运行,并通过电子邮件向经理提供了做出决定所需的几个必要的列。以及 2 个用于批准或拒绝的链接。这些链接是使用我发布代码时生成的 URL 构建的,并附加了approval=true 和提交表单请求的人的电子邮件。

下一部分 doGet(e) 应该在单击经理电子邮件中的链接时触发,然后生成一封电子邮件发送给请求者,但是,当单击链接时,它只会将我带到一个页面即使顶部的 URL 包含所有正确的信息,也会显示“无效的电子邮件:未定义”。

我在这里错过了什么?

编辑:我正在使用这个视频来获取大部分代码的布局:https://www.youtube.com/watch?v=eduG0XZ9mDs

代码:

function sendEmail(e){
  /**
 var email = e.values[1];
 var item = e.values[2]; 
 var cost = e.values[3];
  */
  var serviceInformation = e.values[1];
  var language = e.values[2];
  var meetingType = e.values[3];
  var eventDate = e.values[4];
  var clientName = e.values[5];
  var detailedDirections = e.values[6];
  var onSitePOCName = e.values[7];
  var onSitePOCNumber = e.values[8];
  var department = e.values[9];
  var contactPhoneNumber = e.values[10];
  var approval = e.values[11];  //the one we need to modify
  var requestorEmail = e.values[12];
  var managerEmail = e.values[13];
  var Language2 = e.values[14];
  var interpreterName = e.values[15];
  var interpreterAgency = e.values[16];
  var dateConformationSent = e.values[17];
  var specialNotes = e.values[18];
  
  
  var url = 'https://script.google.com/a/macros/richmond.k12.va.us/s/AKfycbwuRr1boKTH0v1mprWmc7PE66_mQ_dmPE0lyWb7vkfiyW3pn31b/exec';
 
  
  /**might be that the & needs to be a ?*/
  var approve = url + '?approval=true'+'?reply='+requestorEmail;
  var reject = url + '?approval=false'+'?reply='+requestorEmail;
  
  var html = "<HTML><body>"+
               "<h2>please review</h2><br />"
  +"<P>" + language +"  " + serviceInformation
  +"<p>" + meetingType+ "  on   "+ eventDate + "    for " +clientName
  +"<p>" + "Location: "+ department
  +"<p>" + "requester: "+ requestorEmail+ "  "+
    "<p>"+
    
    "<a href="+ approve +">Approve</a><br />"+
      "<p>"+
              
    "<a href=" +reject+">Reject</a><br />"+
              "</HTML></body>";
                   

MailApp.sendEmail(managerEmail, "Approval Request", "what no html?", {htmlBody: html});
  
}


function doGet(e) {
 
  
  var app = UiApp.createApplication();
  
  var aprovalResponce = (e.parameter.approval == 'true') ? 'Approved.' : 'Sorry, you need to reschedule';
  
  var msg = "Your manager said :" + aprovalResponce;
  
  var replyEmail = e.parameter.reply;
Logger.log(replyEmail);
  
  MailApp.sendEmail(replyEmail, "Approval Request", msg);
  
  var helloWorldLabel = app.createLabel(msg);
  app.add(helloWorldLabel);
  

  return app;
}

【问题讨论】:

    标签: javascript google-apps-script google-sheets google-forms


    【解决方案1】:

    更新答案

    哦,那个视频是在 UI Service 服务被弃用之前制作的,这就是你在 doGet() 的第一行调用的内容。 Google 停止支持这一点,转而支持不同的服务,HTML Service 因此,即使从视频中完美转录,此 doGet() 部分也可能无法使用。

    【讨论】:

    • 我将它添加到上面的代码以及我作为工作副本的代码中,
    • 我将它添加到上面的代码以及我作为工作副本的代码中,似乎它正在拉回未定义,但可能是因为我称它错误?据我所知,它看起来像是在没有真正输入 e 的情况下运行它(应该是在 ? 之后带有附加信息的 URL 链接)。在使用实际表单向数据添加几行并发送第一封带有批准或拒绝链接的电子邮件后,我点击了其中的一些,然后检查了代码中的日志,它仍然是空白的。跨度>
    • 在 doGet 上使用调试模式会在此代码行上从 undefined 中显示“无法读取属性“批准”(我的猜测是由于缺少实际输入): var aprovalResponce = (e.parameter.批准 == 'true') ? '已批准。' : '对不起,你需要重新安排';
    • 就是这样,让电子邮件双向工作,只需要更改 2 行代码。
    • 您是否知道如何通过我的 doGet() 方法更新电子表格中的字段?我认为我需要的只是打开数据电子表格并根据从 URL 传入的值更新已批准字段的方法。我可能需要在 URL 中添加另一个标识符(如行号或时间戳)来选择正确的
    猜你喜欢
    • 2013-04-04
    • 2017-07-31
    • 2017-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-15
    • 2016-09-12
    • 1970-01-01
    相关资源
    最近更新 更多