Google Apps Scripts-извлечение данных из gmail в электронную таблицу

это первый скрипт, который я пытаюсь написать с нуля. До сих пор это было бесполезно, поэтому я собираюсь попросить о помощи.

случай: я получаю электронные письма подтверждения электронной коммерции от сайтов электронной коммерции без адреса электронной почты ответа. В теле письма они отправляют адрес электронной почты от покупателей. Я хочу отправить автоматическую почту на адрес электронной почты тела.

Как я планирую это сделать (любые предложения по устранению шагов будут благодарны).

  1. используйте правило для помечайте входящие письма уникальным тегом.

  2. используйте этот тег для идентификации писем в gmail со скриптом, идите один за другим и извлеките необходимую мне информацию. Используйте regex с содержимым тела электронной почты для извлечения адреса электронной почты, который мне нужен для отправки автоматических писем. План состоит в том, чтобы получить: тему, дату, электронную почту от тела.

  3. запишите всю эту информацию в электронную таблицу.

  4. избавиться от уникальных тегов для предотвращения дублирования работает.

  5. затем используйте форму Mule addon для отправки писем из электронной таблицы.

до сих пор я имел дело с шагами 1 (легко), и был stuggling с шагами 2 и 3 (im не кодер, я могу читать, undestrand и hack. писать с нуля-совсем другое дело). Я занималась с 4 до Я думаю, что это лучший способ справиться с этим.

со скриптом я извлекаю информацию в электронную таблицу, с аддоном я использую информацию из электронная таблица для отправки электронной почты.

этот код я написал до сих пор. Я оставил часть regex на потом, потому что я даже не могу ничего записать в электронную таблицу. как только я получу эту работу, я начну работать в регулярном выражении и "удалить ярлык" аспекты сценария.

function myFunction() {
  function getemails() {
    var label = GmailApp.getUserLabelByName("Main tag/subtag");
    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++) {
    var message=messages[j];
    var subject=message.getSubject();
    tosp(message);
      }
     }
  }

  function tosp(message){
    var body=message.getBody()
    var date=message.getDate();
    var subject=message.getSubject(); 
    var id= "my spreasheet id";
    var ss = SpreadsheetApp.openById(id);
    var sheet = ss.getActiveSheet();
    sheet.appendRow(subject,date,body);    

}
} 

любая помощь будет оценили.

спасибо Себастьян!--2-->

1 ответов


ниже приведен код, который я написал и протестировал, который отлично выполняет шаги 2, 3 и 4, упомянутые вами.

function myFunction() {

  var ss = SpreadsheetApp.getActiveSheet();

  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++)
    {
      var msg = messages[j].getBody();
      var sub = messages[j].getSubject();
      var dat = messages[j].getDate();

      ss.appendRow([msg, sub, dat])
    }
      threads[i].removeLabel(label);
  }
}

одним из недостатков вашего кода было то, что appendRow функция принимает массив элементов, указанных в [ ] скобках.

в зависимости от того, где вы прикрепляете этот скрипт, ваша строка кода:

var ss = SpreadsheetApp.openById(id);

не требуется, если скрипт пишется в Редакторе скриптов электронной таблицы, где вы хотите эти письма для регистрации. Однако, если в этой таблице несколько листов, вы можете заменить мою строку

var ss = SpreadsheetApp.getActiveSheet();

by

var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Sheet1");

другое предложение заключается в том, что текущий код даст вам сообщения в формате HTML. Следовательно, если вы хотите получить сообщение в виде обычного текста, как вы его видите, использовать:

var msg = messages[i].getPlainBody();

теперь вы можете написать другую функцию для regex и передать сообщение msg для этого. Надеюсь, это поможет!