Электронная почта и push-уведомления

Antimatter отправляет электронные письма для приглашений, сброса пароля, верификации и пропущенных сообщений, а также push-уведомления в мобильное приложение через push-прокси. Ни то, ни другое не будет работать, пока вы не настроите эти параметры.

Исходящая электронная почта (SMTP)

Antimatter отправляет электронные письма через SMTP-сервер, который вы указываете: почтовый сервер вашей организации или сервис транзакционной почты. Без этого пользователи не смогут сбросить забытый пароль, приглашения и письма для верификации не дойдут, а уведомления о пропущенных сообщениях по электронной почте не будут приходить.

Настройте это в Системная консоль › Окружение › SMTP или с помощью переменных:

ПараметрКлюч и переменнаяЗначение по умолчанию
SMTP серверEmailSettings.SMTPServer, AM_EMAILSETTINGS_SMTPSERVERlocalhost
Порт SMTP сервераEmailSettings.SMTPPort, AM_EMAILSETTINGS_SMTPPORT10025
Включить SMTP аутентификациюEmailSettings.EnableSMTPAuth, AM_EMAILSETTINGS_ENABLESMTPAUTHвыкл. без защиты соединения, вкл. с ней
Имя пользователя SMTPEmailSettings.SMTPUsername, AM_EMAILSETTINGS_SMTPUSERNAMEпусто
Пароль SMTP СервераEmailSettings.SMTPPassword, AM_EMAILSETTINGS_SMTPPASSWORDпусто
Безопасность соединенияEmailSettings.ConnectionSecurity, AM_EMAILSETTINGS_CONNECTIONSECURITYNone (пусто); или TLS или STARTTLS
Пропустить проверку сертификата сервераEmailSettings.SkipServerCertificateVerificationвыкл. Оставьте выключенным в рабочей среде.

Используйте STARTTLS на порту 587 или TLS на порту 465, как указано вашим провайдером. Затем нажмите Проверка подключения на той же странице: Antimatter отправит тестовое письмо на ваш собственный адрес.

Типичная настройка с Docker Compose, в файле compose.override.yaml рядом с compose.yaml:

services:
  antimatter:
    environment:
      AM_EMAILSETTINGS_SMTPSERVER: smtp.example.com
      AM_EMAILSETTINGS_SMTPPORT: "587"
      AM_EMAILSETTINGS_CONNECTIONSECURITY: STARTTLS
      AM_EMAILSETTINGS_ENABLESMTPAUTH: "true"
      AM_EMAILSETTINGS_SMTPUSERNAME: chat@example.com
      AM_EMAILSETTINGS_SMTPPASSWORD: ${SMTP_PASSWORD}
      AM_EMAILSETTINGS_FEEDBACKNAME: Antimatter
      AM_EMAILSETTINGS_FEEDBACKEMAIL: chat@example.com
      AM_EMAILSETTINGS_REPLYTOADDRESS: chat@example.com

Поместите SMTP_PASSWORD в .env. Compose-файл сайта помещает сервер в сеть по умолчанию, которая имеет доступ в Интернет, поэтому он может обращаться к внешнему SMTP-серверу.

Настройки отправителя и уведомлений по электронной почте

В Системная консоль › Настройки сайта › Уведомления:

ПараметрКлючЗначение по умолчанию
Включить уведомления по электронной почтеEmailSettings.SendEmailNotificationsвкл
Отображаемое в уведомлении имяEmailSettings.FeedbackNameпусто
Уведомления приходят с адресаEmailSettings.FeedbackEmailtest@example.com: измените
Адрес для ответа на уведомлениеEmailSettings.ReplyToAddresstest@example.com: измените
Эл.почта поддержкиSupportSettings.SupportEmailпусто
Адрес эл. почты в нижнем колонтитуле уведомленийEmailSettings.FeedbackOrganizationпусто
Содержание уведомления на эл. почтуEmailSettings.EmailNotificationContentsTypeОтправлять полное содержимое сообщений (full) или общее описание с указанием только имени отправителя (generic)
Включить почтовые объединенияEmailSettings.EnableEmailBatchingвыкл. При включении пользователи могут выбрать получение пропущенных сообщений, сгруппированных в одном письме каждые 15 минут или каждый час, вместо одного письма на каждое сообщение.
Использовать название канала в уведомлениях по электронной почтеEmailSettings.UseChannelInEmailNotificationsвыключено
Включить баннер "Ознакомительный режим"EmailSettings.EnablePreviewModeBannerвкл.: пока уведомления по электронной почте отключены, баннер сообщает администраторам, что электронная почта не настроена

Адрес «От» должен соответствовать одному из адресов, с которых вашему SMTP-серверу разрешена отправка. Настройте SPF и DKIM для его домена, иначе письма могут попасть в папку «Спам».

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

Push-уведомления в мобильное приложение

Как работают push-уведомления

Antimatter никогда не взаимодействует напрямую с Apple или Google. Для каждого уведомления он обращается к push-прокси, который хранит учётные данные мобильного приложения и пересылает уведомление в Apple (APNs) для iPhone или в Google (Firebase Cloud Messaging) для Android. Apple и Google доставляют уведомление только в том случае, если оно отправлено с учётными данными того приложения, для которого оно предназначено. Поэтому push-прокси работает только с одной сборкой мобильного приложения: той, чьи учётные данные он хранит.

  • Antimatter не предоставляет публичный push-прокси. Вы сами запускаете push-прокси Antimatter, используя учётные данные той сборки мобильного приложения, которую устанавливают ваши пользователи.
  • Antimatter никогда не отправляет уведомления в push-сервисы Mattermost, ни тестовые, ни хостинговые: они доставляют уведомления только в собственные мобильные приложения Mattermost. Если сервер настроен на один из их адресов (например, https://push-test.mattermost.com, который используется в старых конфигурациях Mattermost), он ничего не отправляет и записывает предупреждение в журнал при запуске.

Новый сервер не имеет push-сервера уведомлений, поэтому push-уведомления не отправляются, пока вы не укажете адрес вашего push-прокси. До этого момента мобильное приложение работает, но не получает уведомлений.

Запуск push-прокси

Push-прокси находится в репозитории push-proxy. В его README описано, как получить два набора учётных данных, которые выдаются аккаунтами, публикующими вашу сборку мобильного приложения:

  • Android: файл служебного аккаунта Firebase-проекта, используемого вашей сборкой для Android.
  • iOS: ключ аутентификации APNs (AuthKey_<KEY ID>.p8) аккаунта разработчика Apple, публикующего вашу сборку для iOS, а также его ID ключа и ID команды.

Разместите их рядом с compose.yaml, вместе с файлом конфигурации прокси:

push-proxy/
  config/antimatter-push-proxy.json
  certs/AuthKey_ABCDE12345.p8
  certs/firebase-service-account.json

push-proxy/config/antimatter-push-proxy.json, указав ваш идентификатор пакета, ID ключа и ID команды:

{
    "ListenAddress": ":8066",
    "ThrottlePerSec": 300,
    "ThrottleMemoryStoreSize": 50000,
    "ThrottleVaryByHeader": "X-Forwarded-For",
    "EnableMetrics": false,
    "SendTimeoutSec": 30,
    "RetryTimeoutSec": 8,
    "ApplePushSettings": [
        {
            "Type": "apple_rn",
            "ApplePushUseDevelopment": false,
            "ApplePushTopic": "chat.antimatter.app",
            "AppleAuthKeyFile": "./certs/AuthKey_ABCDE12345.p8",
            "AppleAuthKeyID": "ABCDE12345",
            "AppleTeamID": "FGHIJ67890"
        }
    ],
    "AndroidPushSettings": [
        {
            "Type": "android_rn",
            "ServiceFileLocation": "./certs/firebase-service-account.json"
        }
    ],
    "EnableConsoleLog": true,
    "EnableFileLog": false,
    "LogFormat": "plain",
    "LogLevel": "info"
}

ApplePushTopic — это идентификатор пакета iOS вашей сборки. ApplePushUseDevelopment имеет значение true только для сборок, установленных из Xcode. Звонки на iPhone передаются через VoIP-push, которые используют тот же ключ и не требуют дополнительных настроек здесь.

На сайте есть готовый фрагмент для compose-файла: compose.push.example.yaml. Он запускает опубликованный образ ghcr.io/antimatterchat/push-proxy:latest.

curl -fsSLO https://antimatter.chat/compose.push.example.yaml
docker compose -f compose.yaml -f compose.push.example.yaml --profile push up -d
docker compose -f compose.yaml -f compose.push.example.yaml logs push-proxy

При старте в журнале прокси указывается каждый настроенный целевой сервер push, а для тех, чьи учётные данные не удалось загрузить, записывается ошибка. Прокси не публикует порты: доступ к нему имеет только Antimatter, в рамках сети compose.

Если Docker не используется, установите пакет .deb или .rpm для push-прокси: см. Пакеты сервиса GIF и push-прокси.

Push-прокси не проверяет, кто к нему обращается. Не публикуйте его в Интернет. Если он работает на другом хосте, разместите его за HTTPS и ограничьте доступ: в уведомлениях может содержаться текст сообщений.

Настройка Antimatter для работы с прокси

В Системная консоль › Окружение › Сервер push уведомлений установите Включить push-уведомления в значение Отправлять push-уведомления через собственный push-прокси, а Сервер push уведомлений — в http://push-proxy:8066 (или HTTPS-адрес прокси, если он работает в другом месте). Страницу нельзя сохранить, если выбран этот вариант, но адрес не указан. Чтобы перестать отправлять push-уведомления, выберите Не отправлять push-уведомления. Или с помощью переменных на сервисе antimatter:

AM_EMAILSETTINGS_SENDPUSHNOTIFICATIONS: "true"
AM_EMAILSETTINGS_PUSHNOTIFICATIONSERVER: http://push-proxy:8066

Для проверки: войдите в мобильное приложение, переведите его в фоновый режим и попросите другой аккаунт упомянуть вас. Если уведомление не пришло, поищите push в журнале Antimatter и в журнале прокси: там указано, неизвестен ли тип устройства, отклонён ли ключ или устройство принадлежит другой сборке приложения.

Содержимое уведомлений

Системная консоль › Настройки сайта › Уведомления › Содержание push уведомления (EmailSettings.PushNotificationContents):

ВариантЗначение
Общее описание с указанием только имени отправителяgeneric_no_channel
Общее описание с указанием имени отправителя и каналаgeneric
Полное содержимое сообщения, передаваемое в payload уведомления (по умолчанию)full
Полное содержимое сообщения, запрашиваемое с сервера при получении уведомленияid_loaded

При значении id_loaded уведомление, проходящее через прокси, Apple и Google, содержит только id, а приложение запрашивает текст сообщения с вашего сервера: текст сообщения никогда не проходит через их сервисы. Это лучший выбор, если сообщения конфиденциальны.

Максимальное количество уведомлений на канал на странице Сервер push уведомлений (TeamSettings.MaxNotificationsPerChannel, по умолчанию 1000) — это максимальное количество участников, при котором в канале работают упоминания @here, @all и @channel. В каналах с большим числом участников эти упоминания и индикаторы набора текста отключаются.