Без этого можно принудительно задать конкретные цвета фона в большинстве почтовых клиентов, за исключением некоторых старых десктопных клиентов Outlook. (Полагаю, что тёмная тема на десктопных клиентах используется не так часто.)
Для почтовых клиентов iOS (за исключением Gmail) Discourse уже делает это, если включена настройка «Применять пользовательские стили к дайджесту». Проблема в том, что цвет фона прописан жёстко и не учитывает «цвет фона заголовка» сайта:
Правило [dm='header'] можно изменить следующим образом:
"
[dm='header'] {
background: ##{ColorScheme.hex_for_name('header_background')} !important;
}
"
Если это уместно, аналогичный подход можно применить к секции «С момента вашего последнего визита»:
"
[dm='body_primary'] {
background: #{SiteSetting.email_accent_bg_color} !important;
color: #{SiteSetting.email_accent_fg_color} !important;
}
"
Обратите внимание, что атрибут dm для стилей тёмной темы добавляется к письму здесь: discourse/lib/email/styles.rb at main · discourse/discourse · GitHub.
Подобное решение должно исправить проблему в почтовых клиентах iOS (за исключением Gmail).
Для клиента Gmail на iOS цвета фона можно принудительно задать, используя линейный градиент. Похоже, что установка фона в виде линейного градиента таким образом не вызывает никаких нежелательных побочных эффектов для всех почтовых клиентов. Поэтому можно просто добавить цвет фона в виде линейного градиента в встроенные CSS-стили, отправляемые всем почтовым клиентам.
Мое предположение: самое простое решение для секции «С момента вашего последнего визита» в почтовых клиентах, выполняющих полную инверсию цветов, — позволить клиентам выполнять инверсию, но убедиться, что между настройками email accent accent bg color и email accent fg color обеспечен достаточный контраст:
Это должно предотвратить случаи, подобные этому (при значениях по умолчанию для этих настроек):

