2016-08-17 107 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

相關問題