Google Apps 脚本 - 如何从 Sheet 发送 HTML 电子邮件?

Google Apps Script - How to send HTML email from Sheet?

我正在尝试编写代码以从 Sheet 发送一封 html 电子邮件。我在 GAS html 文件中有一个模板。 Gmail API 已启用。

我确实设法通过这种方式发送了一封电子邮件,其中包含已替换的占位符。但是,我只是发送 html 文件中的所有文本、标签和所有内容。

function htmlTry() {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sample");
  var lastRow     = spreadsheet.getLastRow();
  var name        = spreadsheet.getRange(lastRow, 3).getValue();
  var problem     = spreadsheet.getRange(lastRow, 6).getValue();

  if(problem == "Yes") {
    var htmlBody  = HtmlService.createHtmlOutputFromFile('htmlFile').getContent()
      .replace("#name", name)
      .replace("?name", name)
      .replace("/name", name);
      
    MailApp.sendEmail ("sample@email.com", "Problem: " + name, htmlBody);
  }
}

我也提供了 html 文件的示例。这正是电子邮件所说的,只是它失去了缩进。

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Problem</title>
    <style>
        body,table,thead,tbody,tr,td,img {
            padding: 0;
            background-color: #23A5F3;
        }

        .wrapper {
            padding-left: 10px;
            padding-right: 10px;
        }

        h1,h2,h3,h4,h5,h6,p {
            font-family: Trebuchet MS, Arial, sans-serif;
            color:#9CD6FA;
        }

        p,a,li {
            font-family: Trebuchet MS, Arial, sans-serif;
            color:#000000;
        }

    </style>
</head>

<body style="background-color:#FFFFFF;">
    <table width="100%">
        <tbody>
            <tr>
                <td class="wrapper" width="600" align="center">
                    <table class="section header" cellpadding="0" cellspacing="0" width="600">
                        <tr>
                            <td class="column">
                                <table>
                                    <tbody>
                                        <tr>
                                            <td align="left" style="background-color: #FFFFFF;">
                                                <p style="text-align:justify;">Lorem ipsum</p>
                                            </td>
                                        </tr>
                                    </tbody>
                                </table>
                            </td>
                        </tr>
                    </table>
                </td>
            </tr>
        </tbody>
    </table>
</body>
</html>

感谢 Irvin Jay G. 解决了,他花时间解释了为什么我应该完全按照他们的建议去做,而不是自己思考。希望你过得愉快。

解法:

You need to use the advanced parameter called htmlBody, as per the MailApp's sendEmail(recipient, subject, body, options) method, to show the file in html view instead of showing the pure html codes on the email message.

我能够复制你的脚本并在我的测试电子邮件帐户上得到这个结果:

这是使用 htmlBody 高级参数调整后的脚本:

function htmlTry() {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sample");
  var lastRow     = spreadsheet.getLastRow();
  var name        = spreadsheet.getRange(lastRow, 3).getValue();
  var problem     = spreadsheet.getRange(lastRow, 6).getValue();

  if(problem == "Yes") {
    var htmlBody  = HtmlService.createHtmlOutputFromFile('htmlFile').getContent()
      .replace("#name", name)
      .replace("?name", name)
      .replace("/name", name);

    MailApp.sendEmail("sample@email.com", 'Problem: '+ name, htmlBody, {
    htmlBody: htmlBody
    });
  }
}