【问题标题】:Creating spam filter for Gmail为 Gmail 创建垃圾邮件过滤器
【发布时间】:2014-03-27 23:52:34
【问题描述】:

我已经厌倦了在我的 gmail 收件箱中收到不需要的邮件,所以我现在愿意创建一个白名单类型的扩展程序来过滤来自的人的所有邮件/strong> 在我的联系人列表中。我搜索了这么多小时,但找不到任何东西,因此考虑做这个练习(如果存在,请分享链接)。我已经创建了 100 多个过滤器,但垃圾邮件发送者肯定每次都超过我。

谁能告诉我这首先是否可行?我见过在 gmail 中添加功能的扩展程序,但我不知道如何通过扩展程序阻止电子邮件。请帮忙。

【问题讨论】:

  • 我尝试创建一个像这样的过滤器:-(from:EMAIL_ID1 OR from:EMAIL_ID2 OR ... from:EMAIL_IDn) 但它失败了,因为我的联系人列表中有超过 1000 个电子邮件地址。我得到了预期的错误:指定的搜索太长。请指定一个较短的搜索字符串。

标签: google-chrome-extension gmail


【解决方案1】:

您可以设置whitelist in Gmail,但它不太可能适用于如此庞大的地址列表。您可以创建一个包含有效地址列表的 Google 工作表和一个 Google 脚本,该脚本将根据这些地址扫描您的收件箱。

var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];

var range = sheet.getDataRange();
var values = range.getValues();

var emails = [];

for (var i in values) {
  emails.push(values[i][0]);
 }

 var threads = GmailApp.search("in:inbox is:unread");
 for (var i=0; i<threads.length; i++) {
   var from = threads[i].getMessages()[0].getFrom();
   if ( !emails.indexOf(from) ) {
      threads[i].moveToSpam();
    }
  }

您需要设置一个触发器,每 5 分钟左右运行一次此脚本。

【讨论】:

    【解决方案2】:

    非常感谢 Amit 分享这个 sn-p。在此帮助下,我想出了一个可行的解决方案(ver1.0)并在下面分享给其他人:

    function createTriggers() {
    
      ScriptApp.newTrigger('runSpamFilter').timeBased().everyMinutes(10).create();
    
      SpreadsheetApp.getActiveSpreadsheet().toast("The program will check for spam email every 10 minutes and"
             + " send them to Spam Folder after applying label MySpam. You may please close this window.", "Initialized");
    
    }
    
    function removeTriggers(show) {    
    
      var triggers = ScriptApp.getScriptTriggers();
    
      for (i=0; i<triggers.length; i++) {
        ScriptApp.deleteTrigger(triggers[i]);
      }  
    
      if (show) {
        SpreadsheetApp.getActiveSpreadsheet().toast("The program has stopped.", "Uninstalled");
      }
    
    }
    
    function runSpamFilter() {
    
      var ss = SpreadsheetApp.getActiveSpreadsheet();
      var sheet = ss.getSheets()[0];
    
      var range = sheet.getDataRange();
      var values = range.getValues();
    
      var emails = [];
      var regex = /([a-zA-Z0-9+._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9._-]+)/gi;  
    
      var my_label = GmailApp.getUserLabelByName("MySpam");
      var spamCount = 0;
    
      for (var i in values) {
        emails.push(values[i][0]);
      }
    
      var threads = GmailApp.search("in:inbox is:unread");
    
      for (var i=0; i<threads.length; i++) {
        var from = threads[i].getMessages()[0].getFrom();
        var from_email = from.match(regex);
    
        if ( emails.indexOf(from_email[0]) == -1 ) {
          threads[i].addLabel(my_label);
          threads[i].moveToSpam();
          spamCount++;
        }
      }
    
      Logger.log("Spams found = %s", spamCount);
    
    }
    
    function startProgram() {    
    
      removeTriggers(false);
      createTriggers();
    
    }
    
    function onOpen() {  
    
      var sheet = SpreadsheetApp.getActiveSpreadsheet();
    
      var menu = [ 
        {name: "Step 1: Initialize", functionName: "startProgram"},
        {name: "Step 2: Start ", functionName: "runSpamFilter"},
        {name: "Uninstall (Stop)", functionName: "removeTriggers"}
      ];  
    
      sheet.addMenu("Gmail Spam Filter v1.0", menu);    
    }
    

    我也可能想出ver2.0,它消除了这个脚本的当前限制。到目前为止,您必须制作一个包含所有联系人电子邮件地址的电子表格。但是,一旦您添加了新联系人,就需要手动更新此电子表格。因此,此脚本需要一个额外的触发器,它会在 15 天内使用最近添加的联系人/电子邮件地址更新电子表格一次。稍后我也会分享,或者可能有人可以从这里挑选并提出ver2.0。

    再次感谢。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-17
      • 1970-01-01
      • 2011-04-21
      • 2013-05-29
      • 2011-03-19
      • 2012-04-23
      • 2017-01-29
      相关资源
      最近更新 更多