Как отобразить месяц, полученный с помощью JS в HTML-содержание электронной почты.? - PullRequest
1 голос
/ 01 ноября 2019

code.gs

function showMonth() {

  var recipient1 = 'user@gmail.com';
  var subject = "email subject";

  // send email using html page
  var emailTemplate = HtmlService.createTemplateFromFile('file');

  MailApp.sendEmail(recipient1, subject,'',{'htmlBody': emailTemplate.evaluate().getContent(), 'cc': '', 'bcc': ''});

}

file.html

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

    <h2>My First Web Page</h2>

    <p>My First Paragraph.</p>

    <p id="displaymonth"> </p>

<script>
    var d = new Date();
    var mnth = getMonthDetails();
    function getMonthDetails() {
      switch (d.getMonth()) {
            case 9 : 
            return "October";
        break;
    }
  document.getElementById("displaymonth").innerHTML = "Current month is " + mnth;
</script>

</body>
</html> 

Вывод по электронной почте:

My First Web Page
My First Paragraph.

Я пытаюсь получить дату и месяц в теге сценария JS и разместить их в HTML-контенте. Позже извлечение того же HTML-содержимого с помощью службы шаблонов электронной почты Google Apps Script и отправка электронного письма пользователю, чтобы показать текущий месяц.

Когда я запускаю код в другом онлайн-редакторе, например jsfiddle.net , он показывает детали месяца на странице результатов. Однако я не могу получить ожидаемый результат в электронном письме после запуска кода в Google Apps Script.

Дайте мне знать, как исправить мой код, чтобы увидеть ожидаемые результаты. Спасибо!

Ответы [ 2 ]

1 голос
/ 01 ноября 2019

Таким образом, ваша электронная почта и ваше веб-приложение получают одинаковое содержимое

Большая часть содержимого поступает из текстового файла, написанного в формате HTML. И тогда в функцию getContents() я добавляю строку с месяцем в нем. Эта функция предоставляет содержимое для doGet () и sendEmail ().

aq1.gs

function getContents() {
  var folder=DriveApp.getFolderById('folderId');
  var file=folder.getFiles().next();//assume only one
  var contents=file.getBlob().getDataAsString()+Utilities.formatString('<p>This month is %s</p>',Utilities.formatDate(new Date(), Session.getScriptTimeZone(),"MMMM" ));//get content from file and append the date to it as a string
  return contents;
}

function sendEmail() {
  var recipient1 = 'recipient email';
  var subject = "Combining Email and Website Contents";
  var html=getContents();
  MailApp.sendEmail(recipient1, subject,'',{htmlBody:html});
}

function doGet() {
  return HtmlService.createHtmlOutputFromFile('aq5');
}

function launchDiaog() {
  var userInterface=HtmlService.createHtmlOutputFromFile('aq5');
  SpreadsheetApp.getUi().showModelessDialog(userInterface, "My Dialog");
}

aq5.html:

<!DOCTYPE html>
<html>
  <head>
  <base target="_top">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
  <link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
  <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
  <script>
    $(function() {
      console.log('Ready State Function');
      google.script.run
      .withSuccessHandler(function(hl){
        console.log(hl);
        $('#mydiv').html(hl);
      })
      .getContents();
    });
    console.log("My Code");
  </script>
  </head>  
  <h1>Testing</h1>
  <div id="mydiv"></div>
</html>

Содержимое текстового файла ascii:

<h2>My First Web Page</h2><p>My First Paragraph.</p><p>My second paragrah</p>

Но это может быть что угодно до 50 МБ

1 голос
/ 01 ноября 2019

Попробуйте получить дату в скрипте приложения, а затем передать ее как переменную в ваш HTML-файл. Я не думаю, что ваш js-код на стороне клиента будет выполняться скриптом Apps.

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