Home > Software design >  Sending HTML Mail via google spreadsheets error
Sending HTML Mail via google spreadsheets error

Time:12-17

whenever i use the following code to send html email, i receive only the subject and "HtmlTemplate" word rather than the mail body itself, kindly help, i need to bulk html emails that are dynamically filled by the data from the spreadsheets.

function sendEmail(){
var ss = SpreadsheetApp.getActiveSpreadsheet()
var sheet1=ss.getSheetByName('Sheet1');
var n=sheet1.getLastRow();
for (var i = 2; i < n 1 ; i   ) {
var emailAddress = sheet1.getRange(i,3).getValue();
var cc = "[email protected]"
var subject = "Testmail";
var body = HtmlService.createTemplateFromFile("email");
body.الاسم=sheet1.getRange(i,2).getValue();
body.رقمالتليفون=sheet1.getRange(i,4).getValue();
body.رقمالبطاقة=sheet1.getRange(i,5).getValue();
body.المحكمة=sheet1.getRange(i,6).getValue();
body.وجهةالسفرمنمحافظةيرجىكتابةمحافظةالاقامةفقط=sheet1.getRange(i,7).getValue();
body.وجهةالسفرالىمحافظةيرجىكتابةمحافظةالعملفقط=sheet1.getRange(i,8).getValue();
body.تاريخرحلةالسفرالأوليالأسبوعالأول=sheet1.getRange(i,9).getValue();
body.ساعةرحلةالسفر1=sheet1.getRange(i,10).getValue();
body.تاريخرحلةالعودةالأوليالأسبوعالأول=sheet1.getRange(i,11).getValue();
body.ساعةالرحلةالمطلوبةللعودة1=sheet1.getRange(i,12).getValue();
body.تاريخرحلةالسفرالثانيةالأسبوعالثاني=sheet1.getRange(i,13).getValue();
body.ساعةالرحلةالمطلوبةللسفر2=sheet1.getRange(i,14).getValue();
body.تاريخرحلةالعودةالثانيةالأسبوعالثاني=sheet1.getRange(i,15).getValue();
body.ساعةالرحلةالمطلوبةللعودة2=sheet1.getRange(i,16).getValue();
body.تاريخرحلةالسفرالثالثةالأسبوعالثالث=sheet1.getRange(i,17).getValue();
body.ساعةالرحلةالمطلوبةللسفر3=sheet1.getRange(i,18).getValue();
body.تاريخرحلةالعودةالثالثةالأسبوعالثالث=sheet1.getRange(i,19).getValue();
body.ساعةالرحلةالمطلوبةللعودة3=sheet1.getRange(i,20).getValue();
body.تاريخرحلةالسفرالرابعةالأسبوعالرابع=sheet1.getRange(i,21).getValue();
body.ساعةالرحلةالمطلوبةللسفر4=sheet1.getRange(i,22).getValue();
body.تاريخرحلةالعودةالرابعةالأسبوعالرابع=sheet1.getRange(i,23).getValue();
body.ساعةالرحلةالمطلوبةللعودة4=sheet1.getRange(i,24).getValue();
body.تاريخرحلةالسفرالخامسةالأسبوعالخامس=sheet1.getRange(i,25).getValue();
body.ساعةالرحلةالمطلوبةللسفر5=sheet1.getRange(i,26).getValue();
body.تاريخرحلةالعودةالخامسةالأسبوعالخامس=sheet1.getRange(i,27).getValue();
body.ساعةالرحلةالمطلوبةللعودة5=sheet1.getRange(i,28).getValue();
      
    MailApp.sendEmail(emailAddress,subject, body,{cc: cc});
  }
}

CodePudding user response:

You are creating a HTML template and substituting values from the sheet in the template. You need to evaluate() the template as I've shown in the MailApp.sendEmail() line of code.

I would suggest you change your code to significantly reduce the number of getValue() calls.

Also you don't post your HTML template so I can't verify this will work.

function sendEmail(){
  var ss = SpreadsheetApp.getActiveSpreadsheet()
  var sheet1=ss.getSheetByName('Sheet1');
  var values = sheet1.getDataRange().getValues();
  for (var i = 1; i < values.length ; i   ) {
    var emailAddress = values[i][2];
    var cc = "[email protected]"
    var subject = "Testmail";
    var body = HtmlService.createTemplateFromFile("email");
    body.الاسم= values[i][1];
    body.رقمالتليفون = values[i][3];
    body.رقمالبطاقة = values[i][4];
    body.المحكمة = values[i][5];
    body.وجهةالسفرمنمحافظةيرجىكتابةمحافظةالاقامةفقط = values[i][6];
    body.وجهةالسفرالىمحافظةيرجىكتابةمحافظةالعملفقط = values[i][7];
    body.تاريخرحلةالسفرالأوليالأسبوعالأول = values[i][8]
    body.ساعةرحلةالسفر1 = values[i][9];
    body.تاريخرحلةالعودةالأوليالأسبوعالأول = values[i][10];
    body.ساعةالرحلةالمطلوبةللعودة1 = values[i][11];
    body.تاريخرحلةالسفرالثانيةالأسبوعالثاني = values[i][12];
    body.ساعةالرحلةالمطلوبةللسفر2 = values[i][13];
    body.تاريخرحلةالعودةالثانيةالأسبوعالثاني = values[i][14];
    body.ساعةالرحلةالمطلوبةللعودة2 = values[i][15];
    body.تاريخرحلةالسفرالثالثةالأسبوعالثالث = values[i][16];
    body.ساعةالرحلةالمطلوبةللسفر3 = values[i][17];
    body.تاريخرحلةالعودةالثالثةالأسبوعالثالث = values[i][18];
    body.ساعةالرحلةالمطلوبةللعودة3 = values[i][19];
    body.تاريخرحلةالسفرالرابعةالأسبوعالرابع = values[i][20];
    body.ساعةالرحلةالمطلوبةللسفر4 = values[i][21];
    body.تاريخرحلةالعودةالرابعةالأسبوعالرابع = values[i][22];
    body.ساعةالرحلةالمطلوبةللعودة4 = values[i][23];
    body.تاريخرحلةالسفرالخامسةالأسبوعالخامس = values[i][24];
    body.ساعةالرحلةالمطلوبةللسفر5 = values[i][25];
    body.تاريخرحلةالعودةالخامسةالأسبوعالخامس = values[i][26];
    body.ساعةالرحلةالمطلوبةللعودة5 = values[i][27];
      
    MailApp.sendEmail(emailAddress,subject, body.evaluate(),{cc: cc});
  }
}

Reference

CodePudding user response:

I did not try this, but you can try to change/add the following:

var body = HtmlService.createTemplateFromFile("email");
var normalBody = '';
MailApp.sendEmail(emailAddress,subject, normalBody,{htmlBody: body, cc: cc});

If you do it this way, your htmlBody is inside options object... Good luck!

Edited: You can also change only one line:

MailApp.sendEmail(emailAddress,subject, '',{htmlBody: body, cc: cc});
  • Related