Я последовал руководству Хьюго Фиерро по добавлению скрипта Google Apps для отправки писем из Google Sheets.Тут на https://developers.google.com/apps-script/articles/sending_emails.
Я настроил скрипт:
1) Я заменил API «MailApp.sendEmail» на «GmailApp.sendEmail», потому что я получал ошибки аутентификации и электронные письмане отправляли.API Gmail работает нормально.
2) Я добавил опцию для отправки вложения в формате PDF с каждым письмом, используя «DriveApp.getFileById».
3) Я добавил второе условие в IFоператор для проверки доступности документа PDF перед отправкой (путем ссылки на столбец на листе).
Проблема заключается в том, что если скрипт ссылается только на 5 строк, он обрабатывается менее чем за 30 секунд.Когда я пытаюсь обработать 10 или более строк, время обработки значительно увеличивается.
Я заменил «sheet.getRange» на «sheet.getLastRow ()», пытаясь уменьшить количество строк, на которые ссылается скрипт.
var READY = 'READY';
var SENT = 'SENT';
function sendEmails() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Email'); // Get the active spreadsheet, then get the "Email" sheet
var startRow = 2; // Select data row to start at
var endRow = sheet.getLastRow(); // Get the last row in the sheet
var data = sheet.getRange(startRow, 1, endRow, 6).getValues(); // Get the range of cells, then get the values
for (var i = 0; i < data.length; ++i) {
var row = data[i];
var email = row[0]; // Column 1
var subject = row[1]; // Column 2
var message = row[2]; // Column 3
var attachment = DriveApp.getFileById(row[3]); // Returns the attachment file ID
var emailReady = row[4]; // Column 5
var emailSent = row[5]; // Column 6
var name = 'VFISA'; // Set "from" name in email
var bcc = 'myaddress@gmail.com'; // Blind carbon copy this email address
if (emailReady==READY && emailSent!==SENT) { // Prevents sending duplicates, waits for attachment cell to confirm available
GmailApp.sendEmail(email, subject, message,{
name: name,
bcc: bcc,
htmlBody: message,
attachments: attachment
});
sheet.getRange(startRow + i, 6).setValue(SENT); // Set the cell in column F to "SENT"
SpreadsheetApp.flush(); // Make sure the cell is updated right away in case the script is interrupted
}
}
}
Я ожидал, что скрипт будет работать намного быстрее.Я получаю сообщение об ошибке: «Сервис использует слишком много компьютерного времени в течение одного дня».Когда я ссылаюсь на 20 строк, выполнение занимает до 4 минут.