Google Scripts - Использование динамических переменных Javascript в файле HTML.index - PullRequest
0 голосов
/ 04 мая 2019

Я использую Google Scripts для динамических функций sendMail. Как только строка выделена, соответствующие точки данных заполняются в сообщении электронной почты и отправляются дальше. Это отправленное письмо очень простое (только текст), и я хотел бы использовать HTML, чтобы сделать его более профессиональным. Я добавил файл HTML.index и соответствующий HTML-код, я сослался на файл HTML из файла .gs (javascript), он работает и отправляет электронные письма, однако я хочу знать, как включить переменную (переменные) из файла .gs (javascript) непосредственно в файл HTML.index. Переменные являются динамическими и определяются уже путем кодирования в файле .gs (javascript). То, что я ищу, - это, по сути, привнести эти динамические значения в более привлекательное HTML-письмо, которое отправляется.

Я искал в интернете и нашел для использования

<?!= include('JavaScript'); ?>

в файле HTML.index, где JavaScript - это имя файла .gs (javascript). Тем не менее, я считаю, что это включает в себя файл ВЕСЬ, тогда как я хочу только ввести соответствующую переменную (переменную).

Javascript код (.gs)

function Test11() { //Testing script emails with html
var ss = SpreadsheetApp.getActiveSpreadsheet();
var ActiveRow = ss.getActiveRange().getRow() - 1;
var dataRange = ss.getRange("A:AD");
var data = dataRange.getDisplayValues();
var rowData = data[ActiveRow];
var emailAddress = rowData[29]; //email OK
var ApptStatus = rowData[6]; //Appt Status OK
var message2 = rowData[9]; //Name
var message3 = rowData[10]; //Language
var message4 = rowData[11]; //Date
var message5 = rowData[12]; //Time
var message6 = rowData[13]; //Type
var message7 = rowData[14]; //Notes
var message8 = rowData[15]; //Fac Name
var message9 = rowData[16]; //Address
var message10 = rowData[17]; //City
var FacState = rowData[21]; //State
var message11 = rowData[18]; //Zip
var message12 = rowData[19]; //Phone
var message13 = rowData[20]; //Service
var ccmsg = {cc: 'email@domain.com'}
var htmlOutput = HtmlService.createHtmlOutputFromFile('index') //htmlOutput 
connects index.html file, getContent shows content but not in html
var message = htmlOutput.getContent() // WORKS
var Amessage = INSERT MESSAGE HERE //original plain text
var subject = 'TEST ONLY - please IGNORE: ' + message2 + ' (' + message4 + ' 
at ' + message5 + ' in ' + message10 + ')';
MailApp.sendEmail('email@domain.com', subject, message, 
{'htmlBody':message});
}

index.html

<!DOCTYPE html>
<html>
<head>
<base target="_top">

HTML CODING (not included as its 700+ lines)

Just a sample of my ideal outcome
Confirmation of your appointment at 'message4' (DATE FROM GS 
file) at 'message5' (TIME FROM GS FILE), etc.

MORE HTML CODING

</head>
<body>
</body>
</html>

1 Ответ

0 голосов
/ 04 мая 2019

Самое простое, что вам нужно сделать, это добавить заполнители в ваш HTML, а затем заменить их перед отправкой электронного письма.

Таким образом, ваш файл index.html хотел бы что-то вроде следующего с заполнителями {message4} и {message5}.

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
  </head>
  <body>
    Confirmation of your appointment at {message4} at {message5}. Again, {message4} at {message5}.
  </body>
</html>

В вашем файле .gs вы конвертируете HTML в строку, замените значения и отправьте электронное письмо.Важно, что это работает, потому что расширенный параметр htmlBody ожидает строку .

function sendConfirmationEmail() {
  var message4 = "Date";
  var message5 = "Time";

  var htmlTemplate = HtmlService.createHtmlOutputFromFile("index") // Generate the HTML
  .getContent(); // Convert it to a string

  var message = htmlTemplate.replace(/{message4}/g, message4) // Use regex with global flag to replace all instances
  .replace(/{message5}/g, message5); // You can chain the .replace() methods

  MailApp.sendEmail("email@example.com", "subject", plainTextBody, {"htmlBody": message});
}

Ваш вывод, если вы сделали Logger.log(message), будет:

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
  </head>
  <body>
    Confirmation of your appointment at Date at Time. Again, Date at Time.
  </body>
</html>

Я настоятельно рекомендую вам использовать более описательные имена переменных.Например, вместо message4, просто назовите его date или appointmentDate.

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