通过电子邮件触发Google Apps脚本

时间:2012-05-02 19:34:15

标签: google-apps-script

我正在寻找一个模式的示例,其中在GoogleAppsForBusiness域中运行的恶魔脚本可以解析传入的电子邮件。某些消息将包含对不同GAScript的调用,例如,可能会更改特定文档的ACL设置。

我假设其他人已经实施了这种模式但不确定我如何寻找示例。

THX

3 个答案:

答案 0 :(得分:13)

您可以在应用脚本user guidetutorials中找到脚本示例。您还可以在forum上搜索相关讨论。但我认为没有一个适合你的,所有代码都在那里肯定,但不是在一个脚本上。

有人可能会编写此类脚本并且从未发布过该脚本。因为它有点简单,每个人的用法都不同。例如,您如何计划标记您的电子邮件(您已经阅读,执行过的电子邮件等)?使用gmail过滤器来帮助你,将“命令”电子邮件立即放入标签中,并且脚本只需删除标签(并可能设置另一个标签),这可能会很不错。重点是,看看它有多大差异。

另外,我认为如果你能将所有功能保存在同一个脚本项目中会更容易。可能只是在不同的文件上。调用不同的脚本会更复杂。

无论如何,他是我如何开始的:

//set a time-driven trigger to run this function on the desired frequency
function monitorEmails() {
  var label = GmailApp.getUserLabelByName('command');
  var doneLabel = GmailApp.getUserLabelByName('executed');
  var cmds = label.getThreads();
  var max = Math.min(cmds.length,5);
  for( var i = 0; i < max; ++i ) {
    var email = cmds[i].getMessages()[0];
    var functionName = email.getBody();
    //you may need to do extra parsing here, depending on your usage

    var ret = undefined;
    try {
      ret = this[functionName]();
    } catch(err) {
      ret = err;
    }
    //replying the function return value to the email
    //this may make sense or not
    if( ret !== undefined )
      email.reply(ret);
    cmds[i].removeLabel(label).addLabel(doneLabel);
  }
}

ps:我还没有测试过这段代码

答案 1 :(得分:6)

您可以创建一个谷歌应用,该应用将由发送到该应用的特殊地址的传入电子邮件触发。邮件将转换为您的应用程序收到的HTTP POST。

此处有更多详情: https://developers.google.com/appengine/docs/python/mail/receivingmail

我自己还没有尝试过这个,但是接下来的几天就会这样做。

答案 2 :(得分:-1)

有两种方法。首先,您可以使用Google pub / sub并在AppScrit端点处理incomming通知。第二种是在AppScript代码an example here中使用googleapis npm包。希望它有所帮助。

以下是步骤:

  • https://console.cloud.google.com/cloudpubsub/topicList?project=testmabs上制作了一个项目?
  • 制作了一个pubsub主题
  • 订阅了webhook网址
  • 在我拥有的网站上添加了网址,我猜?我想我必须做DNS事情以确认我拥有它,并且错误是超级模糊的,以确定这是我必须做的,当试图添加订阅时
  • 为&#34; gmail-api-push@system.gserviceaccount.com"添加了主题的权限;作为出版商(我还添加了.... apps.googleusercontent.com和youtrackapiuser.caps@gmail.com,但我认为我不需要它们)
  • 创建了oauth客户端信息,并将其下载到Google控制台的凭据部分。 (oauthtrash.json)