【问题标题】:Get message sender address from Gmail API从 Gmail API 获取邮件发件人地址
【发布时间】:2016-12-23 22:09:17
【问题描述】:

让我先说我不是 JS 开发人员,甚至不是 Web 开发人员,所以请耐心等待!我正在尝试创建一个 gs 脚本,用于删除超过 n 个月且具有特定标签且来自给定发件人的邮件。

我想我已经搞定了,但 Gmail API getFrom() 方法似乎以 "First Last" <address@mail.tld> 的格式返回发件人的地址,而不仅仅是 address@mail.tld。目前我可以通过我知道这些信息来解决这个问题,但是有没有更好的方法可以让代码单独在实际的电子邮件地址上运行?

我当前的代码:

function auto_delete_emails() {

  var label = GmailApp.getUserLabelByName("foo");
  var sender = "\"Foo Bar\" <info@foo.bar>";

  if (label != null) {
    var delayDays = 30
    var maxDate = new Date();

    maxDate.setDate(maxDate.getDate() - delayDays);

    var threads = label.getThreads();
    for (var i = 0; i < threads.length; i++) {
      var messages = GmailApp.getMessagesForThread(threads[i]);
      var from = messages[0].getFrom();
      if (from == sender) {
        if (threads[i].getLastMessageDate < maxDate) {
          threads[i].moveToTrash();
        }
      }
    }
  }
}

我看到一个使用正则表达式来解决此问题的问题,但我几乎不了解正则表达式,更不用说如何在这种情况下应用或示例如何工作(或没有!)。

也欢迎对此代码的其他改进提出建议。

【问题讨论】:

  • 正则表达式是唯一的方法兄弟! var from = messages[0].getFrom().replace(/^.+&lt;([^&gt;]+)&gt;$/, "$1");

标签: google-apps-script gmail-api


【解决方案1】:

我认为从From-header 中提取电子邮件地址是您最安全的选择。您可以使用例如this great RegEx:

function extractEmailAddress(header) {
  return header.match(/[^@<\s]+@[^@\s>]+/)[0];
}

function auto_delete_emails() {

  var label = GmailApp.getUserLabelByName("foo");
  var sender = extractEmailAddress("\"Foo Bar\" <info@foo.bar>");

  if (label != null) {
    var delayDays = 30;
    var maxDate = new Date();

    maxDate.setDate(maxDate.getDate() - delayDays);

    var threads = label.getThreads();
    for (var i = 0; i < threads.length; i++) {
      var messages = GmailApp.getMessagesForThread(threads[i]);
      var from = extractEmailAddress(messages[0].getFrom());
      if (from === sender) {
        if (threads[i].getLastMessageDate < maxDate) {
          threads[i].moveToTrash();
        }
      }
    }
  }
}

【讨论】:

  • 谢谢,完美!我仍在尝试找出是否有更好的方法来同时搜索发件人、标签和日期的线程,但它确实可以完成这项工作。
  • @Toby 太棒了!似乎有a bug in the query feature at the moment,但当它按预期工作时,您可以使用q=from:example@gmail.com AND older_than:2mlabelIds=yourlabel,如listing messagesAdvanced search 的文档中所示。
猜你喜欢
  • 2020-09-04
  • 2015-07-22
  • 2014-09-07
  • 2020-03-25
  • 2016-01-08
  • 1970-01-01
  • 1970-01-01
  • 2018-03-29
  • 2018-03-06
相关资源
最近更新 更多