#javascript #email #google-apps-script #attachment
Вопрос:
Я пишу автоматический скрипт для отправки писем с моих листов Google и хочу прикрепить несколько изображений. Только с одним изображением все работает отлично, но когда я хочу прикрепить два или более, это выдает мне это сообщение об ошибке:
Исключение: Непредвиденная ошибка при получении метода или свойства getFileById в приложении object DriveApp.
Это мой код прямо сейчас:
function sendEmails() {
var sheet = SpreadsheetApp.getActiveSheet();
var startRow = 1; // First row of data to process
var numRows = 3; // Number of rows to process
// Fetch the range of cells A2:B3
var dataRange = sheet.getRange(startRow, 1, numRows, 5);
// Fetch values for each row in the Range.
var data = dataRange.getValues();
for (var i in data) {
var row = data[i];
var emailAddress = row[0]; // First column
var message = row[1]; // Second column
var image = DriveApp.getFileById(row[2]).getBlob();
var image2 = DriveApp.getFileById(row[3]).getBlob();
var subject = 'TAYDO 2021 Certificate';
}
MailApp.sendEmail({
to:emailAddress,
subject:subject,
body:message,
attachments: [image.next(),image2]
});
}
Сценарий приложения имеет все разрешения, необходимые для запуска этого сценария, а листы, диск и все остальное находятся под одним и тем же аккаунтом Google.
Кто-нибудь может помочь? Заранее спасибо!
Комментарии:
1. Как вы
row[2]
себя чувствуете иrow[3]
как выглядите? Если вы регистрируете эти значения, что вы получаете?
Ответ №1:
Это работает для меня:
function attachimages() {
let fldr = DriveApp.getFolderById(gobj.globals.imagesfolderid);
let files = fldr.getFiles();
let imgA = [];
while(files.hasNext()) {
let file = files.next();
if(file.getName().slice(0,3) == 'die') {
imgA.push(file.getBlob().getAs('image/jpeg'))
}
}
MailApp.sendEmail({to:'jimesteban@jimesteban.com',subject:'Test Images Attachment',body: 'See Attached Images', attachments:imgA});
}
Моим изображениям случилось быть названными die1.jpg, die2.jpg …. и так далее, это изображения граней игральной кости.
Это тоже сработало для меня:
function sendEmails() {
const ss = SpreadsheetApp.getActive();
const sh = ss.getSheetByName('Sheet0');
const rg = sh.getRange(2, 1, 3, 4);
const vs = rg.getValues();
vs.forEach((r, i) => {
let emailAddress = r[0];
let message = r[1];
let image1 = DriveApp.getFileById(r[2].toString()).getBlob();
let image2 = DriveApp.getFileById(r[3].toString()).getBlob();
let subject = 'Test Attach Images';
MailApp.sendEmail({ to: emailAddress, subject: subject, body: message, attachments: [image1, image2] });
});
}
Лист0:
Электронная почта | Сообщение | Изображение 1 | Изображение 2 |
---|---|---|---|
Отредактировано | Сообщение 1 | Отредактировано | Отредактировано |
Отредактировано | Сообщение 2 | Отредактировано | Отредактировано |
Отредактировано | Сообщение 3 | Отредактировано | Отредактировано |
Комментарии:
1. Спасибо! Проблема в том, что у меня есть список с более чем 100 различными изображениями, в зависимости от идентификатора в соответствующей колонке, он должен прикрепить конкретное изображение к отправляемой почте. Таким образом, каждая строка отправляет определенному человеку 1,2 или 3 изображения. И я не знаю, можно ли использовать для этого ваш представленный код…
2. r[2] и r[3] являются идентификаторами
3. О, второй код, который вы опубликовали, работает, к сожалению, еще меньше. Он выдает то же самое сообщение об ошибке и говорит, что строки 6 и 10 неисправны. Я также не знаю, что такое команда vs. в строке 6, я никогда не видел этого раньше
4. Я протестировал второй код, и он работает для меня. Поэтому вам, возможно, придется внести некоторые небольшие изменения, чтобы заставить его работать на вас, например, изменить названия листов и т. Д.
5. Является ли ваша среда выполнения V8. Если вы все еще управляете Носорогом, то второй вариант для вас не подойдет. Вам следует обновить среду выполнения до версии 8.