メールとプッシュ通知

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.SendEmailNotificationson
通知の表示名EmailSettings.FeedbackName空
通知の送信元電子メールアドレスEmailSettings.FeedbackEmailtest@example.com: 変更してください
通知のReply-ToアドレスEmailSettings.ReplyToAddresstest@example.com: 変更してください
サポートメールアドレスSupportSettings.SupportEmail空
通知のフッターの住所EmailSettings.FeedbackOrganization空
プッシュ通知の内容EmailSettings.EmailNotificationContentsTypeメッセージの全文を送信 (full)するか、送信者の名前のみの一般的な説明を送信 (generic)するか
電子メールバッチ処理を有効にするEmailSettings.EnableEmailBatchingオフ。オンにすると、ユーザーは 1 通ずつメールを受け取る代わりに、15 分ごとまたは 1 時間ごとに未読メッセージをまとめた 1 通のメールを受け取るように選択できます。
メール通知にチャンネル名を使用するEmailSettings.UseChannelInEmailNotificationsオフ
プレビューモードバナーを有効にするEmailSettings.EnablePreviewModeBannerオン: メール通知がオフの間、メールが設定されていないことを管理者に知らせるバナーが表示されます

From アドレスは、SMTP サーバーが送信を許可されているアドレスである必要があります。そのドメインに対して SPF と DKIM を設定してください。そうしないと、メールがスパムフォルダに振り分けられる可能性があります。

メール関連のサインイン設定(新規アカウントがメールアドレスの確認を必要とするかどうか、招待をメールで送れるかどうか)は、サインインとアカウントにあります。

モバイルアプリへのプッシュ通知

プッシュ通知の仕組み

Antimatter は Apple や Google に直接接続しません。各通知について、プッシュプロキシを呼び出します。このプロキシはモバイルアプリの認証情報を保持し、iPhone には Apple (APNs) へ、Android には Google (Firebase Cloud Messaging) へ通知を転送します。Apple と Google は、対象アプリの認証情報で送信された場合のみ通知を配信します。したがって、プッシュプロキシは、その認証情報を保持するモバイルアプリのビルド 1 つのみで動作します。

  • Antimatter は公開のプッシュプロキシを運営していません。ユーザーがインストールするモバイルアプリのビルドの認証情報を使用して、Antimatter のプッシュプロキシを自分で実行してください。
  • Antimatter は、テスト環境でもホスト環境でも、Mattermost のプッシュサービスに通知を送信しません。これらは Mattermost 独自のモバイルアプリへのみ配信されるためです。サーバーがこれらのアドレス(旧型の Mattermost 設定で使用される https://push-test.mattermost.com など)に設定されている場合、何も送信されず、起動時に警告がログに記録されます。

新しいサーバーにはプッシュ通知サーバーが設定されていないため、プッシュプロキシのアドレスを設定するまでプッシュ通知は送信されません。それまで、モバイルアプリは動作しますが、通知は受信できません。

プッシュプロキシの実行

プッシュプロキシは push-proxy リポジトリにあります。その README では、モバイルアプリのビルドを公開するアカウントから取得する 2 つの認証情報の入手方法が説明されています。

  • 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 に、バンドル識別子、キー 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 は Xcode からインストールされたビルドの場合のみ true にします。通話の着信は iPhone に対して VoIP プッシュを通じて行われ、同じキーを使用するため、ここではこれ以上の設定は不要です。

サイトには、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

起動時、プロキシのログには設定された各プッシュターゲットの名前が記録され、認証情報をロードできないターゲットにはエラーが記録されます。プロキシはポートを公開しません。compose ネットワーク上で Antimatter からのアクセスのみを受け付けます。

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が機能するチャンネルの最大メンバー数です。これより大きいチャンネルでは、これらのメンションと入力中のインジケーターが無効になります。