电子邮件是在加载应用脚本时发送的,但需要发送电子邮件才能点击

时间:2016-12-08 15:58:59

标签: javascript google-apps-script

我创建了一个应用程序脚本,可以将电子邮件发送给登录用户和电子表格中提到的电子邮件ID。电子邮件将发送给活动用户和所有提到的电子邮件ID。 但是,我希望通过应用程序脚本将电子邮件发送给登录用户(已完成)和指定的电子邮件ID。

但是,当应用程序脚本加载时,邮件会发送到电子表格中所有提到的电子邮件ID,而邮件应该是onclick发送的,这不起作用。

function doGet() {
  return HtmlService
      .createTemplateFromFile('index')
      .evaluate();
}


function getData() {
  return SpreadsheetApp
      .openById('SS ID')
      .getDataRange()
      .getValues();
}

function sendMessage(ManagerID,proNo,proName){
 var email=Session.getActiveUser().getEmail();
  var eId=ManagerID;
  var subject="Feedback form initiated" ;
  var message="Feedback form initiated by "+eId;
  var message2="To fill the feedback form please follow the url: ";
  var url="googleform's ID";
  var subject2="Feedback Form";
  MailApp.sendEmail(eId, subject, message);

  MailApp.sendEmail(email,subject2,message2+url);
}





//index.html
<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
  </head>
  <body onload="document.getElementById('one').style.visibility='hidden'">

  <div id="initiateFb">
  <form>
    <? var data = getData(); ?>
<table border='1px solid black'>
  <? for (var i = 0; i < data.length; i++) { ?>
    <tr>
      <? for (var j = 0; j < data[i].length; j++) { ?>
        <td><?= data[i][j] ?></td>
        <?if(j==(data[i].length-1)&&i!=0) { ?>
        <td><input type="submit" name="submit" value="Initiate" 
        onclick="document.getElementById('initiateFb').style.display = 'none';
        document.getElementById('one').style.visibility='visible';
        <?var ManagerID=data[i][6];?> <?var proNo=data[i][1];?> <?var proName=data[i][2];?>
        document.getElementById('div1').innerHTML='<?=data[i][1] ?>';
        document.getElementById('div2').innerHTML='<?=data[i][2] ?>';
        document.getElementById('div3').innerHTML='<?=data[i][3] ?>';
        document.getElementById('div4').innerHTML='<?=data[i][4] ?>';
        document.getElementById('div5').innerHTML='<?=data[i][5] ?>';
        document.getElementById('div6').innerHTML='<?=data[i][6] ?>';
        document.getElementById('div7').innerHTML='<?=data[i][7] ?>';
        document.getElementById('div8').innerHTML='<?=data[i][8] ?>';
        document.getElementById('div9').innerHTML='<?=data[i][9] ?>';
        return false;"/>
        </td>
        <? } ?>
      <? } ?>
    </tr>
  <? } ?>
</table>

</form>
</div>
 <div id="one">
 <form>
 <table>
 <tr>

 <td>ca :</td>
 <td id="div1"></td>
 </tr>
 <tr>
 <td>cb :</td>
 <td id="div2"></td>
 </tr>
 <tr>
 <td>cc:</td>
 <td id="div3"></td>
 </tr>
 <tr>
 <td>cd :</td>
 <td id="div4"></td>
 </tr>
 <tr>
 <td>ce:</td>
 <td id="div5"></td>
 </tr>
 <tr>
 <td>cf:</td>
 <td id="div6"></td>
 </tr>
 <tr>
 <td>cg :</td>
 <td id="div7"></td>
 </tr>
 <tr>
 <td>ch :</td>
 <td id="div8"></td>
 </tr>
 <tr>
 <td>ci:</td>
 <td id="div9"></td>
 </tr>
 </table>
 <input type="submit" name="submit" value="Initiate Feedback" onclick="<?sendMessage(ManagerID,proNo,proName);?>"/>
 </form>
 </div>


  </body>
</html>

我附上了我的代码。

1 个答案:

答案 0 :(得分:1)

arturro在问题评论中是正确的。要进行异步通话,必须使用

google.script.run.sendMessage(ManagerID,proNo,proName)

然而请注意

<input type="submit" name="submit" value="Initiate Feedback" onclick="google.script.run.sendMessage(ManagerID,proNo,proName)"

将无效,因为您在HTML正文中执行此操作。您最好在<script></script>之间使用javascript代码来获取所需的变量,然后您可以使用google.script.run发送电子邮件。

所以你会有

<script>
    function sender() {
      var ManagerID, proNo, proName;

      //use Document.getElementById in order to populate the variables with
      //what you need from the form

      google.script.run.sendMessage(ManagerID, proNo, proName);
    }
</script>
<input type="submit" name="submit" value="Initiate Feedback" onclick="sender()">

<script></script>部分应该在你的index.html中,因为它是一个客户端脚本,它将处理服务器端脚本的调用

我做了类似的事情并且工作正常。