2016-08-17 32 views
1

让我先说我的问题,说我不是JS开发人员,甚至是web开发人员,所以请耐心等待!我正在尝试创建一个gs脚本,用于删除具有特定标签并且来自给定发件人的年龄超过n个月的邮件。从Gmail API获取邮件发件人地址

我想我已经记下了,但Gmail API getFrom()方法似乎以"First Last" <[email protected]>的格式返回发件人的地址,而不仅仅是[email protected]。目前我可以通过以下事实来解决这个问题:我知道这些信息,但是有没有更好的方法来完成此操作,以便代码在实际的电子邮件地址上单独运行

我当前的代码:

function auto_delete_emails() { 

    var label = GmailApp.getUserLabelByName("foo"); 
    var sender = "\"Foo Bar\" <[email protected]>"; 

    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(); 
     } 
     } 
    } 
    } 
} 

我已经看到,使用正则表达式来解决这个问题,但我不太了解的正则表达式,别提如何在这方面还是怎么着例如工作申请(或没“T!)。

对此代码的其他改进的建议也值得欢迎。

+1

**正则表达式**是兄弟的唯一方法! 'var from = messages [0] .getFrom()。replace(/^.+ <([^>] +)> $ /,“$ 1”);' – iJay

回答

1

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

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

function auto_delete_emails() { 

    var label = GmailApp.getUserLabelByName("foo"); 
    var sender = extractEmailAddress("\"Foo Bar\" <[email protected]>"); 

    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(); 
     } 
     } 
    } 
    } 
} 
+0

谢谢!我仍然试图弄清楚是否有更好的方法来搜索发件人,标签和日期,但是因为这是工作。 – Toby

+1

@托比太棒了!似乎有[此刻的查询功能中的错误](http://stackoverflow.com/questions/38960331/gmail-v1-api-users-messages-results-differ-from-web-ui-on-逻辑和 - 或),但是当它按预期工作时,您可以使用'q = from:[email protected] AND older_than:2m','labelIds = yourlabel',如列出邮件的文档所示(https: //developers.google.com/gmail/api/v1/reference/users/messages/list#try-it)和[高级搜索](https://support.google.com/mail/answer/7190?hl= EN)。 – Tholle

相关问题