E-Mail- und Push-Benachrichtigungen

Antimatter sendet E-Mails für Einladungen, Passwort-Resets, Verifizierungen und verpasste Nachrichten sowie Push-Benachrichtigungen an die mobile App über einen Push-Proxy. Beides funktioniert nicht, bis Sie es konfiguriert haben.

Ausgehende E-Mail (SMTP)

Antimatter sendet E-Mails über einen von Ihnen bereitgestellten SMTP-Server: den Mail-Server Ihrer Organisation oder einen transaktionalen E-Mail-Dienst. Ohne ihn können Personen ein vergessenes Passwort nicht zurücksetzen, E-Mail-Einladungen und Verifizierungen treffen nicht ein und niemand erhält E-Mail-Benachrichtigungen über verpasste Nachrichten.

Richten Sie dies in Systemkonsole › Umgebung › SMTP ein oder mit Variablen:

EinstellungSchlüssel und VariableStandard
SMTP-ServerEmailSettings.SMTPServer, AM_EMAILSETTINGS_SMTPSERVERlocalhost
SMTP-Server-PortEmailSettings.SMTPPort, AM_EMAILSETTINGS_SMTPPORT10025
SMTP-Authentifizierung aktivierenEmailSettings.EnableSMTPAuth, AM_EMAILSETTINGS_ENABLESMTPAUTHaus ohne Verbindungssicherheit, an mit ihr
SMTP-Server-BenutzernameEmailSettings.SMTPUsername, AM_EMAILSETTINGS_SMTPUSERNAMEleer
SMTP-Server-PasswortEmailSettings.SMTPPassword, AM_EMAILSETTINGS_SMTPPASSWORDleer
VerbindungssicherheitEmailSettings.ConnectionSecurity, AM_EMAILSETTINGS_CONNECTIONSECURITYKeine (leer); oder TLS oder STARTTLS
Serverzertifikatsüberprüfung überspringenEmailSettings.SkipServerCertificateVerificationaus. Lassen Sie es in der Produktion aus.

Verwenden Sie STARTTLS auf Port 587 oder TLS auf Port 465, wie von Ihrem Anbieter angegeben. Klicken Sie dann auf derselben Seite auf Verbindung testen: Antimatter sendet eine Test-E-Mail an Ihre eigene Adresse.

Eine typische Einrichtung mit Docker Compose, in compose.override.yaml neben 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

Legen Sie SMTP_PASSWORD in .env ab. Die Compose-Datei der Website platziert den Server im Standard-Netzwerk, das Internetzugriff hat, sodass es einen externen SMTP-Server erreichen kann.

Einstellungen für Absender- und Benachrichtigungs-E-Mails

In Systemkonsole › Systemkonfiguration › Benachrichtigungen:

EinstellungSchlüsselStandard
Aktiviere E-Mail-BenachrichtigungenEmailSettings.SendEmailNotificationsan
Benachrichtigungs-AnzeigenameEmailSettings.FeedbackNameleer
Benachrichtigungs-AbsenderadresseEmailSettings.FeedbackEmailtest@example.com: ändern
Antworten-an-Adresse für BenachrichtigungenEmailSettings.ReplyToAddresstest@example.com: ändern
Support EmailadresseSupportSettings.SupportEmailleer
Adresse in der Fußzeile von BenachrichtigungenEmailSettings.FeedbackOrganizationleer
Inhalt der E-Mail-BenachrichtigungenEmailSettings.EmailNotificationContentsTypeVollständigen Nachrichteninhalt senden (full) oder eine allgemeine Beschreibung mit nur dem Namen des Absenders (generic)
E-Mail-Stapelverarbeitung aktivierenEmailSettings.EnableEmailBatchingaus. An, können sich Personen dafür entscheiden, verpasste Nachrichten alle 15 Minuten oder stündlich in einer E-Mail zusammengefasst zu erhalten, anstatt eine E-Mail pro Nachricht.
Kanalnamen in E-Mail-Benachrichtigungen verwendenEmailSettings.UseChannelInEmailNotificationsaus
Vorschaumodus-Banner aktivierenEmailSettings.EnablePreviewModeBanneran: Während E-Mail-Benachrichtigungen deaktiviert sind, informiert ein Banner Administratoren, dass E-Mail nicht konfiguriert ist

Die Absenderadresse muss eine sein, für die Ihr SMTP-Server das Senden erlaubt. Richten Sie SPF und DKIM für die zugehörige Domain ein, da die E-Mails sonst in den Spam-Ordner landen könnten.

E-Mail-bezogene Einstellungen zur Anmeldung (z. B. ob neue Konten ihre Adresse verifizieren müssen oder ob Einladungen per E-Mail versendet werden können) finden Sie unter Anmeldung und Konten.

Push-Benachrichtigungen an die mobile App

Funktionsweise der Push-Benachrichtigungen

Antimatter kommuniziert nie direkt mit Apple oder Google. Für jede Benachrichtigung ruft es einen Push-Proxy auf, der die Zugangsdaten der mobilen App verwaltet und die Benachrichtigung an Apple (APNs) für iPhones und an Google (Firebase Cloud Messaging) für Android-Geräte weiterleitet. Apple und Google liefern eine Benachrichtigung nur aus, wenn sie mit den Zugangsdaten der jeweiligen App gesendet wird. Ein Push-Proxy funktioniert daher nur mit einer einzigen Version der mobilen App: derjenigen, deren Zugangsdaten er verwaltet.

  • Antimatter betreibt keinen öffentlichen Push-Proxy. Sie betreiben den Antimatter-Push-Proxy selbst, mit den Zugangsdaten der mobilen App-Version, die Ihre Nutzer installieren.
  • Antimatter sendet keine Benachrichtigungen an die Push-Dienste von Mattermost, weder an Test- noch an gehostete Instanzen: Diese liefern nur an die eigenen mobilen Apps von Mattermost aus. Ist der Server auf eine dieser Adressen (z. B. https://push-test.mattermost.com, wie in älteren Mattermost-Konfigurationen üblich) eingestellt, wird nichts gesendet und beim Start eine Warnung protokolliert.

Ein neuer Server hat keinen Push-Benachrichtigungsserver, sodass keine Push-Benachrichtigungen gesendet werden, bis Sie die Adresse Ihres Push-Proxy festgelegt haben. Bis dahin funktioniert die mobile App, erhält aber keine Benachrichtigungen.

Den Push-Proxy betreiben

Der Push-Proxy befindet sich im push-proxy-Repository. Die README erklärt, wie Sie die beiden Zugangsdaten beschaffen, die aus den Konten stammen, die Ihre Version der mobilen App veröffentlichen:

  • Android: eine Service-Account-Datei des Firebase-Projekts, das Ihre Android-Version verwendet.
  • iOS: ein APNs-Authentifizierungsschlüssel (AuthKey_<KEY ID>.p8) des Apple-Entwicklerkontos, das Ihre iOS-Version veröffentlicht, einschließlich der Schlüssel-ID und Team-ID.

Legen Sie sie neben compose.yaml ab, zusammen mit der Konfigurationsdatei des Proxys:

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

push-proxy/config/antimatter-push-proxy.json, mit Ihrer Bundle-Kennung, Schlüssel-ID und Team-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 ist die iOS-Bundle-Kennung Ihrer Version. ApplePushUseDevelopment ist nur für Versionen, die aus Xcode installiert wurden, auf true gesetzt. Anrufe werden auf iPhones über VoIP-Pushes ausgelöst, die denselben Schlüssel verwenden und hier keine weiteren Einstellungen erfordern.

Die Website bietet eine fertige Ergänzung für die Compose-Datei, compose.push.example.yaml. Sie führt das veröffentlichte Image ghcr.io/antimatterchat/push-proxy:latest aus.

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

Beim Start benennt das Protokoll des Proxys jedes Push-Ziel, das eingerichtet wurde, und protokolliert einen Fehler für jedes Ziel, dessen Zugangsdaten nicht geladen werden können. Der Proxy veröffentlicht keinen Port: Nur Antimatter erreicht ihn, über das Compose-Netzwerk.

Ohne Docker installieren Sie stattdessen das .deb- oder .rpm-Paket des Push-Proxy: siehe Pakete für den GIF-Dienst und den Push-Proxy.

Der Push-Proxy prüft nicht, wer ihn aufruft. Stellen Sie ihn nicht ins Internet. Wenn er auf einem anderen Host läuft, setzen Sie ihn hinter HTTPS und beschränken Sie, wer ihn erreichen kann: Benachrichtigungen können Nachrichtentext enthalten.

Antimatter auf den Proxy ausrichten

In Systemkonsole › Umgebung › Push-Benachrichtigungs-Server Aktiviere Push-Benachrichtigungen auf Push-Benachrichtigungen über einen eigenen Push-Proxy senden und Push-Benachrichtigungs-Server auf http://push-proxy:8066 (oder die HTTPS-Adresse des Proxys, wenn er woanders läuft) setzen. Die Seite kann mit dieser Option und ohne Adresse nicht gespeichert werden. Um das Senden von Push-Benachrichtigungen zu stoppen, Keine Benachrichtigungen senden wählen. Oder mit Variablen auf dem antimatter-Dienst:

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

Zum Prüfen: Melden Sie sich mit der mobilen App an, legen Sie sie in den Hintergrund und lassen Sie sich von einem anderen Konto erwähnen. Wenn nichts ankommt, suchen Sie nach push im Protokoll von Antimatter und im Protokoll des Proxys: Dort wird angegeben, ob der Gerätetyp unbekannt ist, ein Schlüssel abgelehnt wurde oder das Gerät zu einem anderen App-Build gehört.

Inhalt der Benachrichtigungen

Systemkonsole › Systemkonfiguration › Benachrichtigungen › Push-Benachrichtigungs-Inhalt (EmailSettings.PushNotificationContents):

OptionWert
Allgemeine Beschreibung mit nur dem Namen des Absendersgeneric_no_channel
Allgemeine Beschreibung mit Namen des Absenders und des Kanalsgeneric
Vollständiger Nachrichteninhalt, der im Benachrichtigungspayload gesendet wird (Standard)full
Vollständiger Nachrichteninhalt, der beim Empfang vom Server abgerufen wirdid_loaded

Bei id_loaded enthält die Benachrichtigung, die über den Proxy, Apple und Google geht, nur eine ID, und die App ruft die Nachricht von Ihrem Server ab: Der Nachrichtentext geht nie über deren Dienste. Dies ist die beste Wahl, wenn Nachrichten vertraulich sind.

Schwellenwert für Benachrichtigungen in großen Kanälen auf der Seite Push-Benachrichtigungs-Server (TeamSettings.MaxNotificationsPerChannel, Standardwert 1000) ist die größte Anzahl von Mitgliedern, die ein Kanal haben darf, damit @here, @all und @channel funktionieren. In größeren Kanälen sind diese Erwähnungen und die Eingabeindikatoren deaktiviert.