【问题标题】:Google Apps Script - Gmail, delete forever e-mails in trash with specific labelGoogle Apps 脚本 - Gmail,永久删除带有特定标签的垃圾箱中的电子邮件
【发布时间】:2013-04-06 09:04:26
【问题描述】:

我正在尝试制作一个脚本,该脚本可以立即永久地自动删除来自某个发件人的电子邮件,因为 Gmail 仅允许将电子邮件发送到垃圾箱 30 天的过滤器。请不要暗示默认过滤器就足够了,至于我的情况,至关重要的是我不知道我收到了来自该发件人的电子邮件。

我当前的脚本如下所示:

function deleteForever(labelName) {
    var threads = GmailApp.search("in:trash label:" + labelName);
    for (var i = 0; i < threads.length; i++) {
      threads[i].moveToTrash(); // Where I would need a delete forever trigger
    }
};

但是,我一直无法找到使用 GmailThread 并将其永久删除的方法,因为不存在用于此目的的函数。我想看看是否有一种方法可以使用 JavaScript 完成任务,但一直找不到方法。

有没有人知道如何设置这些电子邮件在收到时永久删除?

【问题讨论】:

    标签: javascript gmail google-apps-script


    【解决方案1】:

    @karan 的回答已经指出了对我有用的解决方案,但是由于缺乏经验/不是专业开发人员,我花了一些功夫将其转化为原始问题的可行解决方案。以下是我用来执行此任务的步骤的简明描述:

    1. 在我的脚本中创建以下函数:

      function deleteForever(userId, labelName) {
        var threads = GmailApp.search("in:trash label:" + labelName);
        for (var i = 0; i < threads.length; i++) {
          Gmail.Users.Messages.remove(userId, threads[i].getId());
        }
      }
      
    2. 要为此脚本启用高级服务,请在菜单上找到Resources,然后选择Advanced Google services...

    3. 在列表中启用Gmail API

    4. 在选择 OK 之前,请单击 Google Developers Console 链接。搜索gmail,并在那里启用服务。

    5. 完成,选择OK;该功能现在应该可以工作了。 (注释:如the link @karan provided 中所述,可以使用"me" 作为用户ID,或者提供自己的Gmail 地址:"&lt;address&gt;@gmail.com"。)

    (为我的脚本启用高级服务的步骤基于 Google 的指南 here。)

    【讨论】:

    • Here is a link 到 Google App Scripts,您需要在其中执行上述步骤。只需单击该链接,然后单击Start Scripting 按钮,您就可以轻松执行步骤。
    • @Bryce Larson 我看到你建议将Messages 更改为Threads。您是否以这种方式测试过脚本?如果是这样,你可以评论这样做的好处,我很乐意接受。 (FWIW 它一直在为我工作,就像它在过去一年中所写的那样。)
    • 我还建议更改为 threads Gmail.Users.Threads.removeGmailApp.search 根据link 返回一个线程数组。在这种情况下,我相信正在删除线程而不是消息。就我而言,在意识到我将线程 ID 传递给 Gmail.Users.Messages.remove 函数之前,我收到了以下错误 (API call to gmail.users.messages.delete failed with error: Not Found)。
    【解决方案2】:

    根据设计,使用 GmailApp 永久删除电子邮件是不可能的。

    【讨论】:

    • 正如我所担心的那样。感谢您的确认。
    • 曾经是正确答案,但由于我们拥有高级服务,因此可以删除电子邮件。
    • 是的,Edo 说得对,现在完全可以使用 Gmail 高级服务永久立即删除电子邮件。请参阅developers.google.com/apps-script/guides/services/advanced 了解如何启用高级服务。有关 Gmail 高级服务的更多详细信息,请参阅 developers.google.com/apps-script/advanced/gmail。并查看 Daniel Bultas 的脚本,了解将删除邮件的代码 (Gmail.Users.Messages.remove)。
    【解决方案3】:

    此脚本适用于 Google Apps 脚本。您只需将服务连接起来并进行身份验证。

    function myFunction() {
    
      var labelName = "deleteForever"
    
      var threads = GmailApp.search("in:trash label:" + labelName);
      for (var i = 0; i < threads.length; i++) { 
        Gmail.Users.Messages.remove('me', threads[i].getId());
      }
    }
    

    【讨论】:

    • 如何批量处理?
    【解决方案4】:

    如果对某人有帮助,可以使用高级服务来完成。

    https://developers.google.com/gmail/api/v1/reference/users/messages/delete

    高级服务中的方法是

    Gmail.Users.Messages.remove(userId, id)

    【讨论】:

    • 很高兴知道这一点,但这更像是一个评论而不是一个答案,只要它没有解释如何在原始问题中使用该方法;应该添加/更改哪些行?例如,是否应该将循环中的行替换为Gmail.Users.Messages.remove(me, threads[i].getId());
    【解决方案5】:

    试试这个

    function delete_all_mail(){
    var myspreadsheet = SpreadsheetApp.openById('1AG1fZ9BuS8***********');
    var mysheet = myspreadsheet.getSheets()[0];
    //0~500
    var threads = GmailApp.getInboxThreads(0 , 500);
      for(var i = 0; i < threads.length; i++)
      {
       threads[i].moveToTrash();
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2020-01-23
      • 2018-02-05
      • 1970-01-01
      • 1970-01-01
      • 2018-03-08
      • 2020-12-28
      • 2023-03-04
      • 2017-07-27
      • 2016-07-22
      相关资源
      最近更新 更多