如何通过电子邮件向谷歌电子表格添加一行?

3
我需要一个谷歌应用脚本,可以实现以下功能:如果我发送电子邮件到我的别名电子邮件,比如说我的email+expenses@gmail.com,它会在特定的谷歌电子表格中添加一行数据,包括来自该电子邮件的数据,例如时间戳、主题、正文的第一行等。
我找到了一篇有趣的文章,描述了类似的将数据发送到谷歌电子表格的过程。
也许没有直接的方法来实现这个功能,但是应该存在一些解决方法。
附注:它应该只使用谷歌生态系统完成。不需要php、服务器等。

当发送电子邮件时,没有脚本运行的触发器。因此,如果这是您想要的,那么无法实现。如果使用Apps Script发送电子邮件,则相同的脚本可以实现您想要的功能。您还可以从链接触发独立的Apps Script。因此,您可以通过单击已发布的Apps Script的“exec”URL链接来触发代码运行。 - Alan Wells
您可以使用Pushingbox的电子邮件API来触发自定义URL请求到Google脚本,从而实现您想要的功能(例如:在发送电子邮件时运行脚本)。发送到Pushingbox的电子邮件是一个触发器。当您在Gmail别名中收到电子邮件时,还可以使用您的开发者ID将其转发到Pushingbox(https://www.pushingbox.com/api.php)(设置服务和场景)。您可以在发送原始电子邮件时执行“cc”,也可以在Gmail中设置过滤器,根据过滤器自动转发某些电子邮件。(http://www.komku.org/2013/10/how-to-use-filters-to-forward-certain-emails.html) - Sujay Phadke
1个回答

2

这需要两个步骤。

#1

首先,创建一个触发器来运行邮件检查程序。

function switchTrigger() {
    var isExist = false;
    var triggers = ScriptApp.getProjectTriggers();
    for (var i = 0; i < triggers.length; i++) {
        if ( /*<CONDITION>*/ ) {
            isExist = true;
            ScriptApp.deleteTrigger(triggers[i]);
        }
    }
    if (!isExist) {
        ScriptApp.newTrigger( /*<CONDITION>*/ ).create();
        Logger.log('create');
    }
}

#2

然后您需要检查电子邮件。类似这样的流程。

function checkMail() {
    var sh = SpreadsheetApp.openById(properties.targetSheetId).getSheets()[0];
    var query = /* properties.queryString */ ;
    var threads = GmailApp.search(query);
    if (threads.length < 1) return;
    for (var i = 0; i < threads.length; i++) {
        var messages = threads[i].getMessages();
        for (var j = 0; j < messages.length; j++) {
            if (messages[j].isStarred()) {
                sh.appendRow([
                    new Date(),
                    messages[j].getFrom(),
                    messages[j].getPlainBody()
                ]);
                messages[j].unstar();
            }
        }
    }
}

注意。您需要设置Gmail过滤器,以便将所有发送到myemail+expenses@gmail.com的邮件标记为星号。

工作示例


太好了!亚历山大,我们没有手动设置分钟触发器有哪些好处? - Andrew Anderson
我只做了两个小修改: 1.在 messages[j].getPlainBody() 的末尾添加了 .trim() - 以去除最后的难看断行字符串; 2.相反地略微改变了标记线程,使其在它们被导入电子表格后打上星号。但这仅是个人喜好 :) - Andrew Anderson
不要每次都使用 .everyMinutes(1)。这只是一个示例。触发器的总运行时间有限制。https://developers.google.com/apps-script/guides/services/quotas?hl=en - contributorpw
我明白了关于运行触发器的配额的概念,但是我不太理解如何通过编程设置触发器。您能否请解释一下? - Andrew Anderson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接