Gmail应用脚本阅读邮件守护进程邮件

时间:2015-02-12 21:25:23

标签: google-apps-script gmail

我想扫描Gmail中的所有电子邮件,并仅提取邮件守护程序邮件(以识别被拒绝的电子邮件地址)。

当我使用这些方法时,没有返回任何邮件 - 守护程序消息 - 只返回“有效”消息:

var ss = SpreadsheetApp.openById("1e29xgV1UU63SJEwF2aWQpWpcXMxyiylwEMGbuvbwADw");
  var sheet = ss.getSheetByName("Email Addresses");

  var row     = 1;

  sheet.getRange(row,1).setValue("Email Addresses");
  row++;

  var threads = GmailApp.getInboxThreads();
 for (var i = 0; i < threads.length; i++) {

   var messages = GmailApp.getMessagesForThread(threads[i]);
 for (var j = 0 ; j < messages.length; j++) {
   var txtBody = messages[i].getPlainBody();
   var txtSender = messages[i].getFrom();

   sheet.getRange(row,1).setValue(txtBody);
   sheet.getRange(row,2).setValue(txtSender);
   row++;
 }

 }

我可以使用什么来处理来自邮件传递子系统的邮件程序守护程序消息?

谢谢!

2 个答案:

答案 0 :(得分:1)

您应该匹配邮件的FROM:字段,例如:

var txtSender = messages[i].getFrom();

if (txtSender.indexOf("mailer-daemon") !== -1) {
   // Log the entry in the spreadsheet
}

答案 1 :(得分:1)

您应该从查询本身过滤线程,它更优化(也是分页)。

  function getBounced() {
  var ss = SpreadsheetApp.getActive();
  var sheet = ss.getSheetByName("Bounced Addresses");

  var row = 1;
  var regExp = /[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}/i // "i" is for case insensitive

  var threads = GmailApp.search('from:"mailer-daemon" subject:(failure|undeliverable)', 0, 50);

  for (var i = 0; i < threads.length; i++) {

    var messages = GmailApp.getMessagesForThread(threads[i]);

    for (var j = 0 ; j < messages.length; j++) {

      var txtSubject = messages[j].getSubject();
      var txtBody = messages[j].getBody();
      var bouncedEmail = regExp.exec(txtBody)[0];

      sheet.getRange(row,1).setValue(bouncedEmail);
      sheet.getRange(row,2).setValue(txtSubject);
      row++;
    }
  }
}

我还添加了一些代码来使用RegExp

提取退回/拒绝的电子邮件