Каждый день я получаю 0-20 писем, которые выглядят примерно так:
Имя: Имя Фамилия
Номер телефона: 555-867-5309
Адрес электронной почты: Fake@email.com
Местоположение: NameOfPreferedBranch
Запрос: ThingPersonWants
Я пытаюсь отправить основную часть этих писем на разные листы Google в зависимости от указанного местоположения. Поэтому, если человек, заполняющий форму, говорит, что Location1 работает для них, я бы хотел, чтобы тело сообщения было отправлено на лист Location1.
Если человек говорит Location2, то тело сообщения должно перейти на лист location2 и так далее. Каждый раз, когда приходит одно из этих писем, я заставляю Gmail накладывать разные ярлыки в зависимости от местоположения. В идеале я хотел бы настроить триггер, который запускается каждые 15 минут и не дублирует результаты, которые уже были выполнены в процессе.
Я нашел код по другим вопросам, похожим на этот, который очень меня расстраивает, но я не могу понять, что это правильно. Вот с чем я сейчас работаю:
function myFunction() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('NameOfSheet');
var label = GmailApp.getUserLabelByName("MyLabel");
var threads = label.getThreads();
for (var i=0; i<threads.length; i++)
{
var messages = threads[i].getMessages();
for (var j=0; j<messages.length; j++)
{
if (messages[j].isUnread())
{
var msg = messages[j].getBody();
sheet.appendRow([msg]);
messages[j].markRead();
}
}
threads[i].removeLabel(label);
}
}
Я надеялся, что сочетание получит темы по метке и
if (messages[j].isUnread())
Секция
получит только те сообщения, которые имеют метку и еще не прочитаны, но все равно возвращают все сообщения во всей цепочке. Кроме того, он помечает все сообщения в потоке как прочитанные, что означает, что если Location1 и Location2 оба имеют сообщение в потоке, когда скрипт выполняется для листа Location1, он помечает все сообщения как прочитанные, а когда скрипт выполняется для листа Location2, он ничего не тянет, потому что все сообщения уже помечены как прочитанные.
Как сейчас, наверное, очевидно, я действительно новичок в скриптах Google Apps и кодировании в целом. Если бы вы могли использовать короткие слова и мучительно подробные объяснения в своих ответах, это бы очень помогло.
Спасибо.
Редактировать: я пытался использовать GmailApp.search()
, но все еще получаю те же результаты. Он извлекает тело из каждого письма в ветке и помечает их как непрочитанные. Вот как выглядит код в данный момент:
function myFunction() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('NameOfSheet');
var label = GmailApp.getUserLabelByName("Location1Label");
var threads = GmailApp.search('label:"Location1Label" is:Unread');
for (var i=0; i<threads.length; i++)
{
var messages = threads[i].getMessages();
for (var j=0; j<messages.length; j++)
{
if (messages[j].isUnread())
{
var msg = messages[j].getBody();
sheet.appendRow([msg]);
messages[j].markRead();
}
}
threads[i].removeLabel(Location1Label);
}
}