2016-08-17 4 views
1

Позвольте мне предисловие к моему вопросу, сказав, что я не разработчик JS или даже веб-разработчик, так что несите меня! Я пытаюсь создать gs-скрипт, который удаляет сообщения, которые старше n месяцев, которые имеют определенную метку и принадлежат к данному отправителю.Получить адрес отправителя сообщения от API Gmail

Я думаю, что у меня есть это вниз, но 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(); 
     } 
     } 
    } 
    } 
} 

Я видел вопрос, который использовал регулярное выражение, чтобы исправить это, но я едва не понимаю регулярное выражение, не говоря уже, как применить в данном контексте или как пример работал (или Didn «т!).

Предложения по другим улучшениям по этому коду также приветствуются.

+1

** Regex ** - единственный способ брата! 'var from = messages [0] .getFrom(). replace (/^.+ <([^>] +)> $ /," $ 1 ");' – iJay

ответ

1

Я думаю, что извлечение адреса электронной почты от From -header - это ваша самая безопасная ставка. Вы можете использовать, например. 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

@Toby Great! Кажется, [ошибка в функции запроса на данный момент] (http://stackoverflow.com/questions/38960331/gmail-v1-api-users-messages-results-differ-from-web-ui-on- логически-и-или), но когда он работает по назначению, вы можете использовать 'q = from: [email protected] AND old_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= еп). – Tholle

Смежные вопросы