電子郵件與推送通知

Antimatter 會發送電子郵件用於邀請、密碼重設、驗證以及未讀訊息,並透過推送代理向行動應用程式發送推送通知。在您完成設定之前,這些功能皆無法運作。

出站電子郵件 (SMTP)

Antimatter 透過您提供的 SMTP 伺服器發送電子郵件:可以是您組織的郵件伺服器,或是交易型電子郵件服務。若未設定,使用者將無法重設遺忘的密碼,電子郵件邀請與驗證信無法送達,且無人會收到未讀訊息的電子郵件通知。

請在 系統控制台 › 環境 › SMTP 中設定,或使用以下變數:

設定金鑰與變數預設值
SMTP 伺服器EmailSettings.SMTPServer, AM_EMAILSETTINGS_SMTPSERVERlocalhost
SMTP 伺服器通訊埠EmailSettings.SMTPPort, AM_EMAILSETTINGS_SMTPPORT10025
啟用 SMTP 驗證EmailSettings.EnableSMTPAuth, AM_EMAILSETTINGS_ENABLESMTPAUTH若無連線安全性則關閉,若有則開啟
SMTP 伺服器使用者名稱EmailSettings.SMTPUsername, AM_EMAILSETTINGS_SMTPUSERNAME留空
SMTP 伺服器密碼EmailSettings.SMTPPassword, AM_EMAILSETTINGS_SMTPPASSWORD留空
連線安全性EmailSettings.ConnectionSecurity, AM_EMAILSETTINGS_CONNECTIONSECURITY無 (留空);或 TLS 或 STARTTLS
跳過驗證伺服器憑證EmailSettings.SkipServerCertificateVerification關閉。請在生產環境中保持關閉。

請依提供者建議,在埠號 587 上使用 STARTTLS 或在埠號 465 上使用 TLS。然後在同一頁面上點擊 測試連線:Antimatter 會向您自己的地址發送一封測試電子郵件。

使用 Docker Compose 的典型設定,位於 compose.yaml 旁邊的 compose.override.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:請修改此值
通知信 Reply-To 地址EmailSettings.ReplyToAddresstest@example.com:請修改此值
支援電子郵件地址SupportSettings.SupportEmail留空
通知信信尾地址EmailSettings.FeedbackOrganization留空
電子郵件通知內容EmailSettings.EmailNotificationContentsType發送完整訊息內容 (full),或僅包含寄件者姓名的通用描述 (generic)
啟用批次電子郵件EmailSettings.EnableEmailBatching關閉。若開啟,使用者可選擇每 15 分鐘或每小時將未讀訊息合併為一封電子郵件,而非每則訊息各發一封。
在電子郵件通知中使用頻道名稱EmailSettings.UseChannelInEmailNotifications關閉
啟用預覽模式橫幅EmailSettings.EnablePreviewModeBanner開啟:當電子郵件通知關閉時,橫幅會告知管理員電子郵件尚未設定

「From」地址必須是您的 SMTP 伺服器被允許使用的寄件者地址;請為其網域設定 SPF 和 DKIM,否則郵件可能会被歸類到垃圾郵件資料夾。

與電子郵件相關的登入設定(例如新帳號是否必須驗證電子郵件地址、是否可透過電子郵件發送邀請)位於登入與帳號。

推播通知至行動應用程式

推送通知的運作方式

Antimatter 本身不會直接與 Apple 或 Google 通訊。對於每則通知,它會呼叫推送代理,該代理持有行動應用程式的憑證,並將通知轉發給 Apple(APNs)以用於 iPhone,或轉發給 Google(Firebase Cloud Messaging)以用於 Android 手機。Apple 和 Google 僅在通知使用對應應用程式的憑證發送時才會進行傳遞。因此,推送代理只能與一個版本的行動應用程式協作:即持有其憑證的那個版本。

  • Antimatter 不提供公開的推送代理。您必須自行執行 Antimatter 推送代理,並使用您的使用者所安裝的行動應用程式版本的憑證。
  • Antimatter 不會向 Mattermost 的推送服務(測試或託管)發送通知:這些服務僅向 Mattermost 自家的行動應用程式傳遞通知。如果伺服器設定為其中一個地址(例如 https://push-test.mattermost.com,較舊的 Mattermost 設定會使用此地址),它將不會發送任何通知,並在啟動時記錄警告。

新伺服器沒有推送通知伺服器,因此在您設定推送代理的地址之前,不會發送任何推送通知。在此之前,行動應用程式可以正常運作,但無法收到通知。

執行推送代理

推送代理位於push-proxy 儲存庫中。其 README 說明了如何取得兩個憑證,這些憑證來自發布您的行動應用程式版本的帳號:

  • Android:您的 Android 版本所使用的 Firebase 專案的服務帳號檔案。
  • iOS:發布您的 iOS 版本的 Apple 開發者帳號的 APNs 驗證金鑰(AuthKey_<KEY ID>.p8),並附上其金鑰 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,並填入您的 bundle identifier、金鑰 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 bundle identifier。ApplePushUseDevelopment 僅在從 Xcode 安裝的版本中設為 true。通話透過 VoIP 推送在 iPhone 上響鈴,這使用相同的金鑰,在此無需額外設定。

該網站提供了一個可直接加入 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

啟動時,代理的日誌會列出它所設定的每個推送目標,並記錄任何無法載入憑證的目標的錯誤。代理不發布任何埠:只有 Antimatter 能透過 compose 網路存取它。

若不使用 Docker,請改安裝 push proxy 的 .deb 或 .rpm 套件:請參閱GIF 服務與 push proxy 套件。

推送代理不會檢查呼叫者的身分。請勿將其暴露給網際網路。如果它在其他主機上執行,請將其放在 HTTPS 之後並限制可存取它的人員:通知可能包含訊息內容。

將 Antimatter 指向代理

在 系統控制台 › 環境 › 推播通知伺服器 中,將 啟用推播通知 設為 透過您自己的推送代理傳送推送通知,並將 推播通知伺服器 設為 http://push-proxy:8066(若代理程式在其他地方執行,則使用其 HTTPS 地址)。若選擇此選項但未填寫地址,則無法儲存頁面。若要停止傳送推播通知,請選擇 不要推播通知。或者,在 antimatter 服務上使用變數:

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

要檢查:使用行動應用程式登入,將其置於背景,然後讓另一個帳號提及您。如果沒有收到通知,請在 Antimatter 的日誌和代理的日誌中搜尋 push:它們會說明裝置類型是否未知、金鑰是否被拒絕,或該裝置是否屬於另一個應用程式版本。

通知包含的內容

系統控制台 › 網站設定 › 通知 › 推播內容(EmailSettings.PushNotificationContents):

選項值
僅包含發送者名稱的通用描述generic_no_channel
包含發送者和頻道名稱的通用描述generic
在通知載入中傳送完整訊息內容(預設)full
在接收時從伺服器擷取完整訊息內容id_loaded

使用 id_loaded 時,透過代理傳送的通知中,Apple 和 Google 僅攜帶一個 ID,應用程式會從您的伺服器擷取訊息:訊息文字不會經過它們的服務。當訊息機密時,這是最佳選擇。

在推播通知伺服器頁面上的 單一頻道最大通知數(TeamSettings.MaxNotificationsPerChannel,預設值為 1000)是 @here、@all 和 @channel 提及功能可運作的頻道最大成員數。在更大的頻道中,這些提及和輸入指示器將被停用。