Poczta e-mail i powiadomienia push

Antimatter wysyła e-maile dla zaproszeń, resetów hasła, weryfikacji i nieprzeczytanych wiadomości, a także powiadomienia push do aplikacji mobilnej za pomocą proxy push. Żadne z nich nie zadziała, dopóki ich nie skonfigurujesz.

Wychodząca poczta e-mail (SMTP)

Antimatter wysyła e-maile przez serwer SMTP, który udostępniasz: serwer pocztowy Twojej organizacji lub usługa transakcyjnej poczty e-mail. Bez niego użytkownicy nie mogą zresetować zapomnianego hasła, zaproszenia i weryfikacje e-maile nie docierają, a nikt nie otrzymuje powiadomień e-mail o nieprzeczytanych wiadomościach.

Ustaw to w Konsola systemu › Środowisko › SMTP lub za pomocą zmiennych:

UstawienieKlucz i zmiennaDomyślnie
Serwer SMTPEmailSettings.SMTPServer, AM_EMAILSETTINGS_SMTPSERVERlocalhost
Port serwera SMTPEmailSettings.SMTPPort, AM_EMAILSETTINGS_SMTPPORT10025
Włącz uwierzytelnianie SMTPEmailSettings.EnableSMTPAuth, AM_EMAILSETTINGS_ENABLESMTPAUTHwyłączone bez zabezpieczenia połączenia, włączone z nim
Nazwa użytkownika serwera SMTPEmailSettings.SMTPUsername, AM_EMAILSETTINGS_SMTPUSERNAMEpusta
Hasło serwera SMTPEmailSettings.SMTPPassword, AM_EMAILSETTINGS_SMTPPASSWORDpusta
Bezpieczeństwo połączeniaEmailSettings.ConnectionSecurity, AM_EMAILSETTINGS_CONNECTIONSECURITYBrak (puste); lub TLS lub STARTTLS
Pomiń weryfikację certyfikatu serweraEmailSettings.SkipServerCertificateVerificationwyłączone. Pozostaw je wyłączone w środowisku produkcyjnym.

Użyj STARTTLS na porcie 587 lub TLS na porcie 465, zgodnie z zaleceniami dostawcy. Następnie kliknij Sprawdź połączenie na tej samej stronie: Antimatter wyśle wiadomość testową na Twój własny adres.

Typowa konfiguracja z Docker Compose, w pliku compose.override.yaml obok 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

Umieść SMTP_PASSWORD w pliku .env. Plik compose witryny umieszcza serwer w domyślnej sieci, która ma dostęp do Internetu, więc może osiągnąć zewnętrzny serwer SMTP.

Ustawienia nadawcy i e-maili powiadomieniowych

W Konsola systemu › Konfiguracja strony › Powiadomienia:

UstawienieKluczDomyślnie
Włącz powiadomienia e-mailEmailSettings.SendEmailNotificationswłączone
Nazwa wyświetlana w powiadomieniachEmailSettings.FeedbackNamepusta
Powiadomienie z adresuEmailSettings.FeedbackEmailtest@example.com: zmień
Adres powiadomień Reply-ToEmailSettings.ReplyToAddresstest@example.com: zmień
Adres e-mail Pomocy TechnicznejSupportSettings.SupportEmailpusta
Adres mailowy do korespondencji w stopce powiadomieńEmailSettings.FeedbackOrganizationpusta
Treść powiadomienia e-mailEmailSettings.EmailNotificationContentsTypeWysyłaj pełną zawartość wiadomości (full) lub ogólny opis z nazwą nadawcy (generic)
Włącz grupowanie wiadomości e-mailEmailSettings.EnableEmailBatchingwyłączone. Włączone, użytkownicy mogą wybrać otrzymywanie nieprzeczytanych wiadomości pogrupowanych w jednym e-mailu co 15 minut lub co godzinę, zamiast osobnego e-maila dla każdej.
Użyj nazwy kanału w powiadomieniach e-mailEmailSettings.UseChannelInEmailNotificationsWyłączone
Włącz baner trybu podgląduEmailSettings.EnablePreviewModeBannerwłączone: gdy powiadomienia e-mail są wyłączone, baner informuje administratorów, że poczta e-mail nie jest skonfigurowana

Adres nadawcy (From) musi być jednym z adresów, z których serwer SMTP ma uprawnienia do wysyłki. Skonfiguruj dla jego domeny SPF i DKIM, w przeciwnym razie wiadomości mogą trafiać do folderów ze spamem.

Ustawienia logowania związane z e-mailem (na przykład czy nowe konta muszą zweryfikować swój adres, czy zaproszenia mogą być wysyłane pocztą) znajdują się w sekcji Logowanie i konta.

Powiadomienia push do aplikacji mobilnej

Jak działają powiadomienia push

Antimatter nigdy nie komunikuje się bezpośrednio z Apple ani Google. Dla każdego powiadomienia wywołuje proxy push, które przechowuje dane uwierzytelniające aplikacji mobilnej i przesyła powiadomienie do Apple (APNs) dla iPhone'ów oraz do Google (Firebase Cloud Messaging) dla telefonów z Androidem. Apple i Google dostarczają powiadomienie tylko wtedy, gdy jest wysłane z danymi uwierzytelniającymi właściwej aplikacji. Dlatego proxy push działa z jedną wersją (buildem) aplikacji mobilnej: tą, której dane uwierzytelniające przechowuje.

  • Antimatter nie uruchamia publicznego proxy push. Samodzielnie uruchamiasz proxy push Antimatter, używając danych uwierzytelniających wersji aplikacji mobilnej, którą instalują użytkownicy.
  • Antimatter nigdy nie wysyła powiadomień do usług push Mattermost, testowych ani hostowanych: dostarczają one powiadomienia wyłącznie do własnych aplikacji mobilnych Mattermost. Jeśli serwer jest skonfigurowany na jeden z ich adresów (na przykład https://push-test.mattermost.com, którego używają starsze konfiguracje Mattermost), nie wysyła niczego i loguje ostrzeżenie przy starcie.

Nowy serwer nie ma skonfigurowanego serwera powiadomień push, więc nie wysyła żadnych powiadomień push, dopóki nie ustawisz adresu swojego proxy push. Do tego czasu aplikacja mobilna działa, ale nie otrzymuje powiadomień.

Uruchomienie proxy push

Proxy push znajduje się w repozytorium push-proxy. Jego plik README wyjaśnia, jak uzyskać dwa dane uwierzytelniające, które pochodzą z kont publikujących Twoją wersję aplikacji mobilnej:

  • Android: plik konta usługi projektu Firebase używanego przez Twoją wersję Androida.
  • iOS: klucz uwierzytelniający APNs (AuthKey_<KEY ID>.p8) konta deweloperskiego Apple, które publikuje Twoją wersję iOS, wraz z identyfikatorem klucza (key ID) i identyfikatorem zespołu (team ID).

Umieść je obok compose.yaml, wraz z plikiem konfiguracyjnym proxy:

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

push-proxy/config/antimatter-push-proxy.json, z Twoim identyfikatorem pakietu (bundle identifier), identyfikatorem klucza i identyfikatorem zespołu:

{
    "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 to identyfikator pakietu (bundle identifier) iOS Twojej wersji. ApplePushUseDevelopment ma wartość true tylko dla wersji zainstalowanych z Xcode'a. Dzwonki (rozmowy) na iPhone'ach działają przez powiadomienia VoIP, które używają tego samego klucza i nie wymagają tu dodatkowych ustawień.

Na stronie znajduje się gotowy dodatek do pliku compose, compose.push.example.yaml. Uruchamia on opublikowany obraz, 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

Po starcie dziennik proxy wymienia każdy cel push, który skonfigurowano, i loguje błąd dla każdego, którego poświadczeń nie można wczytać. Proxy nie publikuje żadnego portu: jedynym systemem, który do niego uzyskuje dostęp, jest Antimatter, w sieci compose.

Bez Docker, zainstaluj zamiast tego pakiet .deb lub .rpm proxy push: zobacz Pakiety usługi GIF i proxy push.

Proxy push nie sprawdza, kto do niego się łączy. Nie narażaj go na Internet. Jeśli działa na innym hoście, umieść go za HTTPS i ogranicz dostęp: powiadomienia mogą zawierać treść wiadomości.

Skonfiguruj Antimatter tak, aby korzystał z proxy

W Konsola systemu › Środowisko › Serwer powiadomień Push, ustaw Włącz powiadomienia Push na Wysyłaj powiadomienia push przez własny proxy push, a Serwer powiadomień Push na http://push-proxy:8066 (lub adres HTTPS proxy, jeśli działa w innym miejscu). Strona nie może zostać zapisana z tą opcją i bez adresu. Aby przestać wysyłać powiadomienia push, wybierz Nie wysyłaj powiadomień push. Albo zmiennymi na usłudze antimatter:

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

Aby to sprawdzić: zaloguj się w aplikacji mobilnej, przenieś ją w tło i poproś inną osobę, aby Cię wzmiankowała. Jeśli nic nie przyjdzie, wyszukaj push w dzienniku Antimatter i w dzienniku proxy: pokażą one, czy typ urządzenia jest nieznany, czy klucz został odrzucony, albo czy urządzenie należy do innej wersji aplikacji.

Zawartość powiadomień

Konsola systemu › Konfiguracja strony › Powiadomienia › Zawartość powiadomień push (EmailSettings.PushNotificationContents):

OpcjaWartość
Ogólny opis z nazwą nadawcygeneric_no_channel
Ogólny opis z nazwami nadawcy i kanaługeneric
Pełna treść wiadomości wysyłana w obciążeniu powiadomienia (domyślnie)full
Pełna treść wiadomości pobierana z serwera po otrzymaniuid_loaded

Przy id_loaded powiadomienie przechodzące przez proxy, Apple i Google zawiera tylko identyfikator, a aplikacja pobiera wiadomość z Twojego serwera: treść wiadomości nigdy nie przechodzi przez ich usługi. Jest to najlepszy wybór, gdy wiadomości są poufne.

Próg Powiadomienia o Dużym Kanale, na stronie Serwer powiadomień Push, (TeamSettings.MaxNotificationsPerChannel, domyślnie 1000) to największa liczba członków, jaką może mieć kanał, aby @here, @all i @channel działały. W większych kanałach te wzmianki oraz wskaźniki pisania są wyłączane.