自定义 Discourse 外部邮件模板

:bookmark: 本指南说明如何自定义和样式化您 Discourse 站点发送的所有邮件的外部 HTML 模板。

:person_raising_hand: 所需用户级别:管理员

您站点发送的所有邮件都被包装在一个可以自定义的 HTML 模板中。

本指南涵盖:

  • 访问邮件样式自定义部分
  • 修改 HTML 模板
  • 添加自定义 CSS
  • 测试邮件模板
  • 恢复更改
  • 自定义模板示例
  • 与摘要邮件的交互
  • 更改邮件字体

访问邮件样式自定义

  1. 在管理侧边栏的 Email(邮件)部分下导航到 Appearance(外观)页面,或者直接访问 /admin/customize/email_style
  2. 您会看到一个带有 HTMLCSS 两个标签的编辑器,您可以在其中修改邮件的模板和样式。

修改 HTML 模板

HTML 标签中的默认标记包含几个占位符:

  • %{email_content}必需。这是插入每封邮件内容的位置。您不得删除此占位符。
  • %{email_preview} — 插入隐藏的预览文本,供显示摘要的邮件客户端使用。
  • %{html_lang} — 将站点的语言代码插入 <html> 标签中。
  • %{dark_mode_meta_tags} — 插入用于暗模式支持的 meta 标签。
  • %{dark_mode_styles} — 插入用于暗模式渲染的 CSS 样式。

创建自定义模板时,应包含所有这些占位符以确保完全兼容。您可以参考默认模板(在首次打开编辑器时可见)作为起点。

有关自定义替换 %{email_content} 占位符的内容的信息,请参阅如何自定义特定邮件模板

添加自定义 CSS

您可以使用邮件样式编辑器中的 CSS 标签将内联样式注入到模板中。示例如下:

  1. 向模板中的 HTML 元素添加一个 CSS 类:

    <td> class="my-outer-td">
    </td>
    
  2. 在 CSS 标签中为该类创建一条规则:

    .my-outer-td {
      padding: 30px 0 30px 0;
    }
    

Discourse 在发送邮件前会将 CSS 类替换为实际的 CSS 规则。您可以在此处添加任何您喜欢的 CSS 规则。

测试邮件模板

务必在各种邮件客户端中测试您的邮件模板更改,因为它们可能对 HTML 的解释不同。使用邮件测试服务来预览您的邮件在不同客户端上的显示效果,尤其是在进行重大更改时。

恢复更改

要恢复您的模板自定义:

  1. 选择要重置的标签(HTML 或 CSS)。
  2. 点击编辑器下方的“Reset to default”(重置为默认值)按钮。

这将把该特定部分(HTML 或 CSS)重置为默认的 Discourse 邮件模板。每个标签独立重置。

自定义模板示例

这是一个基本的邮件模板,将邮件宽度限制在最大 600px,并在顶部添加一个徽标:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title></title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
  </head>
  <body style="margin: 0; padding: 0;">
    <!--[if mso]>
    <style type="text/css">
      body, table, td, th, h1, h2, h3 { font-family: Helvetica, Arial, sans-serif !important; }
    </style>
    <![endif]-->
    <table border="0" cellpadding="0" cellspacing="0" width="100%">
      <tr>
        <td style="padding: 10px 0 30px 0;">
          <!--[if gte mso 9]>
          <table width="600" align="center" cellpadding="0" cellspacing="0">
            <tr>
              <td>
          <![endif]-->
          <table align="center" border="0" cellpadding="0" cellspacing="0" width="100%" style="max-width: 600px;border-collapse: collapse;">
            <tr>
              <td style="padding: 20px 15px 20px 15px;">
                <table align="center" border="0" cellpadding="0" cellspacing="0" width="100%">
                  <tr>
                    <td align="center">
                      <a href="https://forum.example.com">
                        <img src="https://your-site-logo-url" alt="Your site name" width="150" height="40" style="display: block;"/>
                      </a>
                    </td>
                  </tr>
                </table>
              </td>
            </tr>
            <tr>
              <td style="padding: 0 15px 0 15px;">
                <hr style="background-color: #ddd; height: 1px; border: 1px;"/>
              </td>
            </tr>
            <tr>
              <td style="padding: 20px 15px 30px 15px; color: #153643; font-family: Helvetica, Arial, sans-serif; font-size: 16px; line-height: 20px;">
                %{email_content}
              </td>
            </tr>
          </table>
          <!--[if gte mso 9]>
              </td>
            </tr>
          </table>
          <![endif]-->
        </td>
      </tr>
    </table>
  </body>
</html>

请记住将 <img>srcalthref 属性替换为您站点的特定信息。

在不同屏幕尺寸上的显示效果

iPad Pro (10.5 英寸) (iOS 13.1):

Gmail (Chrome):

iPhone 11 Pro Max (iOS 13.1):

Outlook 2019 (Windows 10)

与摘要邮件的交互

如果您的自定义模板为所有邮件添加了徽标,则对于摘要邮件,您有两种选择:

  1. 要使用默认的摘要邮件样式:

    • 禁用 apply custom styles to digest(将自定义样式应用于摘要)站点设置。
  2. 要在所有通知邮件中保持一致的样式:

    • 移除在 digest logo(摘要徽标)站点设置中设置的任何图像。
    • 在文本自定义 .../admin/customize/site_texts/user_notifications.digest.custom.html.header 中添加 <span></span>

更改邮件字体

要更改邮件中的字体:

  1. 对最大兼容性使用 Web 安全字体。有关 Windows 和 Mac 上可用字体的列表,请参阅CSS 字体栈

  2. 将字体相关的 CSS 规则添加到您的 Discourse 邮件模板中。

  3. 您可以直接在 HTML 元素中设置字体,例如:

    <td style="font-family: Helvetica, Arial, sans-serif; font-size: 16px; line-height: 20px;">
      %{email_content}
    </td>
    

请注意,许多邮件客户端不支持来自外部服务的网络字体。

附加资源

有关创建 HTML 邮件的更多信息,您可以参考这篇关于从头开始构建 HTML 邮件模板的综合指南

18 个赞

Thank @simon!

Could you be so kind to provide a full text of template? I would be happy to try it.

3 个赞

Thanks for pointing that out. It must have been a copy/paste error when I created the topic. I’ve added the full template to the post now.

3 个赞

How can we get the logo_url from Discourse in this template? is this possible?

1 个赞

The easiest way might be to open your browser’s web inspector on your DIscourse site and copy the value of the logo’s src attribute into the template. You could also get the logo URL from the rails console by looking at the value of the url property that is returned for SiteSetting.logo

4 个赞

Ok cool, this is how I’m doing it right now, thanks!

2 个赞

Very nice. I think this should be the default. Most sites use a centered column 600px wide.

Seems like there should be a separate wrapper to edit for digest emails.

2 个赞

如何更改电子邮件中的字体?谢谢。

1 个赞

我认为最安全的方法是使用网络安全字体。这里有一个关于哪些字体在 Windows 和 Mac 计算机上可用的好列表:https://www.cssfontstack.com/ 。您只需将 CSS 规则添加到 Discourse 电子邮件模板中的字体即可。

您可以尝试从外部服务引入网络字体用于您的电子邮件,但您需要注意,许多电子邮件客户端不支持网络字体。有关这方面的一些详细信息,请参阅:The Ultimate Guide to Web Safe Fonts for Email Marketing | Litmus

3 个赞

谢谢。我会使用一种网络安全字体。在上面的示例中,有一个 [if mso] 部分,但我看不到非 Outlook 客户端的字体设置位置。

1 个赞

在示例模板中,非 Outlook 电子邮件客户端的字体是通过直接添加到 HTML 元素的 CSS 规则来设置的。例如:

<td style="padding: 20px 15px 30px 15px; color: #153643; font-family: Helvetica, Arial, sans-serif; font-size: 16px; line-height: 20px;">
    %{email_content}
</td>
2 个赞

是的,他们是。我将归咎于狭窄的移动屏幕,就这样吧 :slight_smile:

2 个赞

是否可以自定义头像旁边的文本字体?我的意思是,文本格式如下:

[真实姓名] [用户名]
[日期]

我已经能够更改电子邮件其余部分的文本,但上面的文本具有以下样式:

style=“color:#006699;; font-size:13px;font-family:‘lucida grande’,tahoma,verdana,arial,sans-serif;text-decoration:none;font-weight:bold; text-decoration: none; font-weight: bold; color: #006699;”

1 个赞

电子邮件模板中还有其他可用变量吗?

例如,使用 %{year} 会很有用,可以避免更新电子邮件页脚。有这个选项吗?

1 个赞