为Gmail创建垃圾邮件过滤器

时间:2014-03-15 14:08:08

标签: google-chrome-extension gmail

我很害怕在我的Gmail收件箱中收到不需要的邮件,我现在愿意创建一个白名单的扩展名,其中包含来自 <的人的所有邮件/ strong>在我的联系人列表中。我搜索了这么多个小时但却找不到任何因此想要做这个练习(如果它存在,请分享链接)。我已经创建了100多个过滤器,但绝对垃圾邮件发送者每次都超过我。

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

2 个答案:

答案 0 :(得分: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分钟左右运行此脚本的触发器。

答案 1 :(得分:0)

非常感谢Amit分享这个片段。借助于此,我能够提出一个有效的解决方案(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。

再次感谢。