Настройка внешнего шаблона email для Discourse

:bookmark: Это руководство объясняет, как настроить и стилизовать внешний HTML-шаблон для всех писем, отправляемых с вашего сайта Discourse.

:person_raising_hand: Требуемый уровень пользователя: Администратор

Все письма, отправляемые с вашего сайта, оборачиваются в HTML-шаблон, который можно настроить.

Это руководство охватывает:

  • Доступ к разделу настройки стиля писем
  • Изменение HTML-шаблона
  • Добавление пользовательских CSS-стилей
  • Тестирование шаблонов писем
  • Откат изменений
  • Пример пользовательского шаблона
  • Взаимодействие с дайджест-письмами
  • Изменение шрифтов в письмах

Доступ к настройке стиля писем

  1. Перейдите на страницу Внешний вид в разделе Письма в боковом меню администратора или перейдите напрямую по адресу /admin/customize/email_style.
  2. Вы увидите редактор с двумя вкладками — HTML и CSS — где вы можете изменять шаблон и стили для ваших писем.

Изменение HTML-шаблона

Стандартная разметка во вкладке HTML содержит несколько плейсхолдеров:

  • %{email_content}Обязательно. Именно здесь будет вставляться содержимое каждого письма. Удалять этот плейсхолдер нельзя.
  • %{email_preview} — Вставляет скрытый текст предпросмотра для почтовых клиентов, отображающих фрагмент письма.
  • %{html_lang} — Вставляет код языка сайта в тег <html>.
  • %{dark_mode_meta_tags} — Вставляет мета-теги для поддержки темного режима.
  • %{dark_mode_styles} — Вставляет CSS-стили для рендеринга в темном режиме.

При создании пользовательского шаблона вы должны включить все эти плейсхолдеры для обеспечения полной совместимости. В качестве отправной точки вы можете обратиться к стандартному шаблону (виден при первом открытии редактора).

Информацию о настройке содержимого, которое заменяет плейсхолдер %{email_content}, см. в разделе как настроить конкретные шаблоны писем.

Добавление пользовательских CSS-стилей

Вы можете использовать вкладку CSS редактора стиля писем для внедрения встроенных стилей в ваш шаблон. Вот пример:

  1. Добавьте CSS-класс к HTML-элементу в шаблоне:

    <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. Нажмите кнопку «Сбросить по умолчанию» под редактором.

Это сбросит соответствующий раздел (HTML или CSS) к стандартному шаблону писем Discourse. Каждая вкладка сбрасывается независимо.

Пример пользовательского шаблона

Вот базовый шаблон письма, который ограничивает ширину писем максимум 600 пикселями и добавляет логотип в верхнюю часть:

<!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="Название вашего сайта" 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>

Не забудьте заменить атрибуты изображения src, alt и href на специфичную для вашего сайта информацию.

Вот как это выглядит на экранах разных размеров

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.
    • Добавьте <span></span> в текстовую настройку по адресу .../admin/customize/site_texts/user_notifications.digest.custom.html.header.

Изменение шрифтов в письмах

Чтобы изменить шрифты в ваших письмах:

  1. Используйте веб-безопасные шрифты для максимальной совместимости. Список доступных шрифтов для Windows и Mac см. на CSS Font Stack.

  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 лайка

What’s the best way to change the font in the emails? Thanks.

1 лайк

I think the safest approach would be to use web safe fonts. A good listing of which fonts are available on Windows and Mac computers is here: https://www.cssfontstack.com/. It should be enough to add CSS rules for the fonts to your Discourse email template.

You could try pulling in web fonts from an external service for your emails, but you need to be aware that many email clients do not support web fonts. Some details about that are here: Web Fonts: How to Make Them Work Perfectly in Email - Litmus.

3 лайка

Thanks. I’d use a web-safe font. In the example above there’s a [if mso] part but I can’t see where the font for non-Outlook clients is set.

1 лайк

In the example template, fonts for non-Outlook email clients are being set with CSS rules that are added directly to HTML elements. For example:

<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 лайка

So they are. I’ll blame the narrow mobile screen and leave it at that :slight_smile:

2 лайка

Is it possible to customise the font of the text beside the avatar? I mean, the text for:

[Real name] [Username]
[Date]

I’ve been able to change the rest of the email’s text but the text above has the following style:

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 лайк

Are there any other variables available in the email template?

For example, it would be useful to have %{year} for avoiding the need to update email footers. Is that available?

1 лайк