電子郵件與推送通知
Antimatter 會發送電子郵件用於邀請、密碼重設、驗證以及未讀訊息,並透過推送代理向行動應用程式發送推送通知。在您完成設定之前,這些功能皆無法運作。
出站電子郵件 (SMTP)
Antimatter 透過您提供的 SMTP 伺服器發送電子郵件:可以是您組織的郵件伺服器,或是交易型電子郵件服務。若未設定,使用者將無法重設遺忘的密碼,電子郵件邀請與驗證信無法送達,且無人會收到未讀訊息的電子郵件通知。
請在 系統控制台 › 環境 › SMTP 中設定,或使用以下變數:
| 設定 | 金鑰與變數 | 預設值 |
|---|---|---|
| SMTP 伺服器 | EmailSettings.SMTPServer, AM_EMAILSETTINGS_SMTPSERVER | localhost |
| SMTP 伺服器通訊埠 | EmailSettings.SMTPPort, AM_EMAILSETTINGS_SMTPPORT | 10025 |
| 啟用 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.FeedbackEmail | test@example.com:請修改此值 |
| 通知信 Reply-To 地址 | EmailSettings.ReplyToAddress | test@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 套件。
將 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 提及功能可運作的頻道最大成員數。在更大的頻道中,這些提及和輸入指示器將被停用。