代码之家  ›  专栏  ›  技术社区  ›  heyron

应用程序脚本电子邮件:模板正文中没有计算HTML字符串

  •  1
  • heyron  · 技术社区  · 4 年前

    我似乎无法成功地让html字符串显示在模板中。所有非html字符串的值似乎都正确计算并显示在电子邮件中。我已经查看了文档/堆栈溢出,似乎找不到关于这个的任何具体内容。

    function sendReceiptEmail(order_id, data){
      const exceptions = ["name", "address", "email", "total", "building_code", "status"];
    
      var items = '';
      for (item in data) {
        if (exceptions.indexOf(item) == -1){
          items += "<tr><td>" + item + "</td><td>" + data[item] + "</td></tr>"
        }
      }
      var htmlBody = HtmlService.createTemplateFromFile('customer-email');
    
      htmlBody.name = data.name;
      htmlBody.order_id = order_id;
      htmlBody.address = data.address;
      htmlBody.email = data.email;
      htmlBody.total = data.total;
      htmlBody.building_code = data.building_code;
      htmlBody.timestamp = getFormattedDate(new Date());
      htmlBody.items = items;
    
      var message = htmlBody.evaluate().getContent();
      var subject = "Order #" + order_id;
    
      MailApp.sendEmail({
        to: data.email,
        subject: subject,
        htmlBody: message
      });
    };
    

    HTML模板

    <html>
      <head>
        <base target="_top">
      </head>
      <body>
        <h2>Thanks for your order, <?= name ?></h2>
        <p>Please see your order details below.</p>
    
        <p><strong>Name: </strong><?= name ?></p>
        <p><strong>Email: </strong><?= email ?></p>
        <p><strong>Address: </strong><?= address ?></p>
        <p><strong>Building Code: </strong><?= building_code ?></p>
        <p><strong>Date: </strong><?= timestamp ?></p>
        <br/>
        <p><strong>Subtotal: </strong>$ <?= total ?></p>
        <p><strong>Delivery Fee: </strong>$ 5.00</p>
        <p><strong>Total: </strong>$ 5.00</p>
    
        <h3><strong>Order Summary</strong></h3>
        <table>
          <tr>
            <th>Item</th>
            <th>Quantity</th>
          </tr>
          <?= items ?>
        </table>
    
      </body>
    </html>
    

    结果: enter image description here

    1 回复  |  直到 4 年前
        1
  •  1
  •   Tanaike    4 年前

    这次修改怎么样?我认为你的问题是由于 <?= 属于 <?= items ?> . The official document 如下所述。

    使用语法的打印scriptlet使用上下文转义将其代码的结果输出到页面中。

    在这种情况下,请将其修改为 <?!= . The official document 如下所述。

    强制打印scriptlet,它使用 <?!= ... ?> ,类似于打印scriptlet,只是它们避免上下文转义。

    发件人:

    <?= items ?>
    

    致:

    <?!= items ?>
    

    参考:

    如果这不是你想要的方向,我道歉。