首页 > 解决方案 > 当我在 Gmail 正文(客户端)中点击超链接时,如何在服务器端脚本中调用该函数:Google App Script?

问题描述

  1. 我通过以 HTML 正文类型发送超链接来在 Gmail 中发送批准请求。- 成功的
  2. 我没有调用页面,而是引用了链接来调用服务器端脚本中的函数。-成功的
  3. 一旦电子邮件到达收件人,它就会自动调用该函数。- 失败。假设当收件人单击“批准”超链接时,只有应该触发的功能。

  4. 我创建了一个 index.html,使用了 HTMLService.createoutputfromfile 和其他 HTMLService 功能,它失败了。我不知道如何建立从客户端到服务器端脚本的通信;从 Gmail 到 Google App 脚本。

谷歌应用脚​​本

function sendEmailToApproverOne(emailAdd, action, trackSheet,rowNumber){
  
    var form_Name = FormApp.getActiveForm().getTitle();//Get the Name of this specific Form
  
    var btnAction = "";//---gets the button name(Approve/Acknowledge) when the recipient receives the email ----
    if(action ==  "Approval"){ 
        btnAction = "Approve";
    }
    else if(action ==  "Acknowledgement"){
        btnAction = "Acknowledge";
    }
  
    var message = getMessage(btnAction,trackSheet,rowNumber);//----calls a function to create the email body----
    GmailApp.sendEmail(emailAdd, form_Name +': For your perusal to '+ btnAction , '', {htmlBody:message});
    
}

function getMessage(buttonLabel,trackSheet,rowNumber) {
  var htmlOutput = HtmlService.createHtmlOutputFromFile('emailBody');
  
  var message = htmlOutput.getContent()
  message = message.replace("##LINK##", pressedApprove(trackSheet,rowNumber));
  message = message.replace('##BUTTONLABEL##',buttonLabel);
  
  return message;
}

//This function: pressedApprove() is triggered when the Approver presses approve in Email button
function pressedApprove(trackSheet,rowNumber){
  
  Logger.log("This button is clicked");
  
  //====some code to do with tracksheet and rownumber. 
}

<a href="##LINK##" id="myLink" >##BUTTONLABEL##</a>
           

预计会看到函数:pressedApprove() 仅在 Gmail 内点击超链接时触发。不希望每次运行代码发送 Gmail 时都会自动调用。

如何设置该功能仅在 Gmail 正文中按下超链接时触发的限制。

标签: google-apps-scriptgmail

解决方案


  • 发布您的网络应用程序:

    • 以“我”的身份运行
    • 访问:任何人,包括。匿名的
  • 使用查询参数打开您的网络应用程序

message = message.replace(
  '##LINK##',
  ScriptApp.getService().getUrl() +
    encodeURI(
      '?func=pressedApprove&trackSheet=' +
        trackSheet.getId() + //use a unique id string of sheet
        '&rowNumber=' +
        rowNumber
    )
);
  • 用于doGet()接收超链接并运行所需功能:
function doGet(e){
  var params = e.parameter;
  if(params.func === 'pressedApprove'){
    return pressedApprove(params.trackSheet, params.rowNumber);
  } 
}

推荐阅读