Amunrah
@Amunrah
Сказочный персонаж ))

Как вытащить адрес почты из тела письма и отправить на него стандартный ответ?

Помогите c гуглоскриптом. Нужно для входящей почты замутить автоответ по адресу взятому из текста письма. Ситуация следующая - на почту (gmail) приходят письма, сформированные веб-формой на сайте. В этих письмах, указаны Имя, Телефон и Мыло. Надо брать из текста почту и отправлять на нее стандартный ответ (что-то типа - заявка принята, спасибо за обращение, скоро с вами свяжемся). Подскажите, если кто может и знает, как это реализовать через Google Apps Script?
--
Текст входящих писем примерно такой:
*Request details:*
Name: Тест
Email: example@example.ru
Phone: +7 (999) 999-99-99
  • Вопрос задан
  • 373 просмотра
Решения вопроса 1
Amunrah
@Amunrah Автор вопроса
Сказочный персонаж ))
Короче решил вопрос. Оставлю тут, вдруг кому пригодится.

В общем сделал табличку с двумя одинаковыми листами (Новые и Обработанные) вида:
61154258cbce4938784054.png

И написал следующий код:
var name, email, phone;
name = email = phone = 'None';

function getEmails(){
  var threads = GmailApp.search('label:Заявка');

  if (threads.length) {
    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];
        message.markRead(); 
        extractDetails(message);
      }
      getSheetData();
      threads[i].removeLabel(GmailApp.getUserLabelByName("Заявка"));
      threads[i].addLabel(GmailApp.getUserLabelByName("Обработано"));
    }    
  } else {}
}

function extractDetails(message){
  var dateTime = message.getDate();
  searchInBody(message.getPlainBody());
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var activeSheet = SpreadsheetApp.setActiveSheet(spreadsheet.getSheetByName("Новые"));
  activeSheet.appendRow([dateTime, name, email, phone]);
}

function searchInBody(mes) {
  var lines, subline;
  lines = mes.split("\n");

  for (index = 0; index < lines.length; ++index) {
    if(lines[index].indexOf('Name:') + 1) {
      subline = lines[index].split(":");
      name = subline[1].toString().trim();
    }
    if(lines[index].indexOf('Email:') + 1) {
      subline = lines[index].split(":");
      email = subline[1].toString().trim();  
    }
    if(lines[index].indexOf('Phone:') + 1) {
      subline = lines[index].split(":");
      phone = subline[1].toString().trim().slice(1,);
    }
  }
}

function getSheetData() {
  var re = /\S+@\S+\.\S+/;
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = SpreadsheetApp.setActiveSheet(spreadsheet.getSheetByName("Новые"));
  var data = sheet.getRange('A2:F').getValues();
  sheet.getRange('A2:F').clearContent();
  
  data.forEach(row => {
    if (row[2] !== '' && re.test(row[2])) {
      sendMail();
    } else {}
  })

  var sheet1 = SpreadsheetApp.setActiveSheet(spreadsheet.getSheetByName("Обработанные"));
  var row = data.length;
  var column = data[0].length;
  sheet1.getRange(sheet1.getLastRow()+1, 1, row, column).setValues(data);
}

function sendMail() {
  var html = 'Здравствуйте '+name+'!<br><br>Ваша заявка принята, наш специалист скоро свяжется с вами.<br><br>Спасибо за обращение.';  
  var recipientsTO = email;
  var recipientsCC = email;
  var Subject = "Ваша заявка принята";
  
  MailApp.sendEmail({
    to: recipientsTO,
    cc: recipientsCC,
    subject: Subject,
    htmlBody: html
  });
}

Дал ему нужные разрешения и поставил расписание. Код сыроват и далековат от оптимального, но пока все работает.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
CTRL+ Москва
от 250 000 до 320 000 ₽
CTRL+ Москва
от 200 000 до 300 000 ₽
CTRL+ Белград
от 250 000 до 320 000 ₽
22 нояб. 2024, в 02:56
10000 руб./за проект
22 нояб. 2024, в 00:55
500 руб./за проект
21 нояб. 2024, в 23:30
300000 руб./за проект