Можно ли отправлять электронные письма с разным количеством встроенных изображений в теле Html каждый, используя скрипт Google Apps? - PullRequest
0 голосов
/ 21 марта 2020

Добрый день, в настоящее время я использую приведенный ниже код, который позволяет мне добавить либо 1 встроенное изображение, либо Нет встроенных изображений в теле html серии отправленных электронных писем, получая идентификатор изображения из GDrive, который находится в указать c ячейки таблицы в том же столбце. Сценарий работает правильно, но я хотел бы знать, можно ли для l oop отправляемых писем электронной почты (каждой строки электронной таблицы) получить переменное число идентификаторов и в тех ячейках с несколькими идентификаторами эти разделенные запятой? Fi Первая ячейка идентификаторов электронной почты: Id1, Id2 Вторая ячейка идентификаторов электронной почты: Id3, Id4, Id5, Id6 Третья ячейка идентификаторов электронной почты: (пусто) Четвертая ячейка идентификаторов электронной почты: Id7 и т. Д ...

Спасибо.

Это мой действительный рабочий код:

function sendEmails(){

  var ss = SpreadsheetApp.getActive().getSheetByName('SendMail')
  var lr = ss.getLastRow();

  var quotaLeft = MailApp.getRemainingDailyQuota();
  //Logger.log(quotaLeft);

   if((lr-1) > quotaLeft) {
     Browser.msgBox("You have " + quotaLeft + " left and you're trying to send " + 
    (lr-1) + " emails. Emails were not send.");
   } else {

    for (var i = 2;i<=lr;i++){

  var currentEmail = ss.getRange(i, 1).getValue();
  var currentSubject = ss.getRange(i, 2).getValue();
  var templateText = ss.getRange(i, 3).getValue();
  var currentname = ss.getRange(i, 4).getValue();
  var reply = ss.getRange(i, 5).getValue();
  var imageFile = ss.getRange(i, 6).getValue();
  var image = ""
   Logger.log("Cell: " + ss.getRange(i, 6).getA1Notation());
   Logger.log("Image: "+ DriveApp.getFileById(ss.getRange(i, 6).getValue()));

    if(imageFile){
     try{
    image = DriveApp.getFileById(imageFile).getBlob();
      } catch (e) {
   templateText += "<p>Image merge failed: " + e;         
   }
  }

  var message = templateText.replace("{name}",currentname);
  message += "<br/><br/><img src=\"cid:sampleImage\">";

  if(image){
  MailApp.sendEmail({
    to: currentEmail,
    replyTo: reply,
    subject: currentSubject,
    htmlBody: message,
    inlineImages: {sampleImage: image},    
  });

    } else {

  MailApp.sendEmail({
    to: currentEmail,
    replyTo: reply,
    subject: currentSubject,
    htmlBody: message,  
  });
}

    } //close for loop

  } //close else statement

 } //close sendEmails

Ответы [ 2 ]

2 голосов
/ 21 марта 2020

Вы можете получить строку идентификаторов и использовать al oop для построения HTML для встроенных изображений

    function sendMail(){

      var ss = SpreadsheetApp.getActive().getSheetByName('SendMail')
      var lr = ss.getLastRow();
      var lc = ss.getLastColumn();

      var quotaLeft = MailApp.getRemainingDailyQuota();

       if((lr-1) > quotaLeft) {
         Browser.msgBox("You have " + quotaLeft + " left and you're trying to send " + 
        (lr-1) + " emails. Emails were not send.");
       } else {

        for (var i = 2;i<=lr;i++){

      var currentEmail = ss.getRange(i, 1).getValue();
      var currentSubject = ss.getRange(i, 2).getValue();
      var templateText = ss.getRange(i, 3).getValue();
      var currentname = ss.getRange(i, 4).getValue();
      var reply = ss.getRange(i, 5).getValue();
      var imageID = ss.getRange(i, 6, 1, lc).getValues().toString().split(',').filter(String);
      var image = {};

      var message = templateText.replace("{name}",currentname);


          for (var x = 0; x < imageID.length; x++){
            try{
          image["inlineImage"+x] = DriveApp.getFileById(imageID[x]).getBlob();   
          message += '<br/><img src="cid:' + "inlineImage"+x +'" />';
            } catch (e) {
                templateText += "<p>Image merge failed: " + e;         
           }
           }

      if(image){
      MailApp.sendEmail({
        to: currentEmail,
        replyTo: reply,
        subject: currentSubject,
        htmlBody: message,
        inlineImages: image,    
      });

        } else {

      MailApp.sendEmail({
        to: currentEmail,
        replyTo: reply,
        subject: currentSubject,
        htmlBody: message,  
      });
      }

        } //close for loop

      } //close else statement

     } //close sendEmails```
1 голос
/ 21 марта 2020

Мое чтение MailApp.sendEmail (получатель, тема, тело, параметры) предполагает, что у вас должен быть этот тип html:

<img src="cid:imagekey1" /><img src="cid:imagekey2" />

для такого рода команды:

MailApp.sendEmail({currentEmail,currentSubject,non Html body (required),(replyTo:reply,htmlBody:"....<img src="cid:imagekey1" /><img src="cid:imagekey2" />...." ,inlineImages: {imagekey1:imgblob1,imagekey2:imgblob2}})

Это единственные дополнительные параметры в документации:

attachments BlobSource[]    an array of files to send with the email (see example)
bcc String  a comma-separated list of email addresses to BCC
cc  String  a comma-separated list of email addresses to CC
htmlBody    String  if set, devices capable of rendering HTML will use it instead of the required body argument; you can add an optional inlineImages field in HTML body if you have inlined images for your email
inlineImages    Object  a JavaScript object containing a mapping from image key (String) to image data (BlobSource); this assumes that the htmlBody parameter is used and contains references to these images in the format <img src="cid:imageKey" />` 

ПРИМЕЧАНИЕ. В нем говорится, что аргумент body

name String the name of the sender of the email (default: the user's name) noReply Boolean true if the email should be sent from a generic no-reply email address to discourage recipients from responding to emails; this option is only possible for G Suite accounts, not Gmail users replyTo String an email address to use as the default reply-to address (default: the user's email address)

И я не вижу никакой опции to:.

Поэтому я считаю, что вам придется программно настроить html с помощью количество изображений, которые вы должны отправить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...