E-posta ve push bildirimleri

Antimatter, davetler, şifre sıfırlamaları, doğrulama ve kaçırılan iletiler için e-posta gönderir ve bir push proxy aracılığıyla mobil uygulamaya push bildirimleri iletir. Bunları yapılandırmadan önce ne biri ne diğeri çalışır.

Giden e-posta (SMTP)

Antimatter, e-postayı sizin sağladığınız bir SMTP sunucusu üzerinden gönderir: kuruluşunuzun e-posta sunucusu veya bir işlem e-posta (transactional email) hizmeti. Bu yapılandırma olmadan, kişiler unuttukları şifrelerini sıfırlayamaz, e-posta davetleri ve doğrulama iletileri ulaşmaz ve kaçırılan iletiler için kimse e-posta bildirimi alamaz.

Bunu Sistem Konsolu › Ortam › SMTP bölümünde yapılandırın veya değişkenlerle ayarlayın:

AyarAnahtar ve değişkenVarsayılan
SMTP sunucusuEmailSettings.SMTPServer, AM_EMAILSETTINGS_SMTPSERVERlocalhost
SMTP sunucusunun bağlantı noktasıEmailSettings.SMTPPort, AM_EMAILSETTINGS_SMTPPORT10025
SMTP kimlik doğrulaması kullanılsınEmailSettings.EnableSMTPAuth, AM_EMAILSETTINGS_ENABLESMTPAUTHBağlantı güvenliği yoksa kapalı, varsa açık
SMTP sunucu kullanıcı adıEmailSettings.SMTPUsername, AM_EMAILSETTINGS_SMTPUSERNAMEboş
SMTP sunucu parolasıEmailSettings.SMTPPassword, AM_EMAILSETTINGS_SMTPPASSWORDboş
Bağlantı güvenliğiEmailSettings.ConnectionSecurity, AM_EMAILSETTINGS_CONNECTIONSECURITYYok (boş); veya TLS ya da STARTTLS
Sunucu sertifika doğrulaması atlansınEmailSettings.SkipServerCertificateVerificationKapalı. Üretim ortamında kapalı bırakın.

Sağlayıcınızın belirttiği gibi 587 numaralı bağlantı noktasında STARTTLS veya 465 numaralı bağlantı noktasında TLS kullanın. Ardından aynı sayfada Bağlantıyı sına düğmesine tıklayın: Antimatter kendi adresinize bir test e-postası gönderir.

Docker Compose ile tipik bir yapılandırma, compose.yaml dosyasının yanındaki compose.override.yaml içinde:

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 değerini .env dosyasına yerleştirin. Sitein compose dosyası sunucuyu İnternet erişimine sahip olan varsayılan ağa yerleştirir, böylece dışarıdaki bir SMTP sunucusuna erişebilir.

Gönderen ve bildirim e-posta ayarları

Sistem Konsolu › Site yapılandırması › Bildirimler bölümünde:

AyarAnahtarVarsayılan
E-posta bildirimleri kullanılsınEmailSettings.SendEmailNotificationsaçık
Bildirim kimden adıEmailSettings.FeedbackNameboş
Bildirim kimden adresiEmailSettings.FeedbackEmailtest@example.com: değiştirin
Bildirim yanıt e-posta adresiEmailSettings.ReplyToAddresstest@example.com: değiştirin
Destek e-posta adresiSupportSettings.SupportEmailboş
Bildirim alt bilgi e-posta adresiEmailSettings.FeedbackOrganizationboş
E-posta bildirimi içerikleriEmailSettings.EmailNotificationContentsTypeTam ileti içeriğini gönderin (full) veya yalnızca gönderenin adını içeren genel bir açıklama kullanın (generic)
Toplu e-posta işleme kullanılsınEmailSettings.EnableEmailBatchingKapalı. Açık olduğunda, kişiler her bir iletinin ayrı bir e-posta olarak gelmesi yerine, kaçırılan iletilerin 15 dakikada bir veya saatte bir tek bir e-postada gruplandırılmasını seçebilir.
E-posta Bildirimlerinde Kanal Adını KullanEmailSettings.UseChannelInEmailNotificationskapalı
Ön izleme kipi bildirimi görüntülensinEmailSettings.EnablePreviewModeBannerAçık: e-posta bildirimleri kapalıyken, e-posta yapılandırılmadığını yöneticilere bildiren bir banner görüntülenir

Gönderen adresi, SMTP sunucunuzun göndermesine izin verilen bir adres olmalıdır; alan adı için SPF ve DKIM yapılandırması yapın, aksi halde e-postalar spam klasörlerine düşebilir.

E-posta ile ilgili oturum açma ayarları (yeni hesapların adreslerini doğrulaması gerekip gerekmediği, davetlerin e-posta ile gönderilip gönderilemeyeceği) Oturum açma ve hesaplar bölümündedir.

Mobil uygulamaya itme bildirimleri

Push bildirimlerin çalışma şekli

Antimatter, Apple veya Google ile asla doğrudan iletişim kurmaz. Her bildirim için, mobil uygulamanın kimlik bilgilerini barındıran ve bildirimleri iPhone'lar için Apple'a (APNs), Android telefonlar için ise Google'a (Firebase Cloud Messaging) ileten bir push vekiline (push proxy) çağrı yapar. Apple ve Google, bir bildirimi yalnızca ilgili uygulamanın kimlik bilgileriyle gönderildiğinde iletir. Bu nedenle bir push vekili, kimlik bilgilerini barındırdığı tek bir mobil uygulama sürümüyle çalışır.

  • Antimatter, herkese açık bir push vekili çalıştırmaz. Kullanıcılarınızın yüklediği mobil uygulama sürümünün kimlik bilgileriyle Antimatter push vekilini kendiniz çalıştırırsınız.
  • Antimatter, test veya barındırılan Mattermost push hizmetlerine asla bildirim göndermez; bunlar yalnızca Mattermost'un kendi mobil uygulamalarına iletir. Sunucu bu adreslerden birine (örneğin eski Mattermost yapılandırmalarının kullandığı https://push-test.mattermost.com) ayarlanırsa, hiçbir şey göndermez ve başlangıçta bir uyarı kaydeder.

Yeni bir sunucuda push bildirim sunucusu bulunmaz; bu nedenle push vekilinizin adresini ayarlayana kadar push bildirimleri gönderilmez. Bu arada mobil uygulama çalışır ancak bildirim almaz.

Push vekilini çalıştırma

Push vekili push-proxy deposundadır. README dosyası, mobil uygulamanızın sürümünü yayımlayan hesaplardan gelen iki kimlik bilgisini nasıl alacağınızı açıklar:

  • Android: Android sürümünüzün kullandığı Firebase projesinin bir hizmet hesabı dosyası.
  • iOS: iOS sürümünüzü yayımlayan Apple geliştirici hesabının bir APNs kimlik doğrulama anahtarı (AuthKey_<KEY ID>.p8), anahtar ID'si ve takım ID'si ile birlikte.

Bunları vekilin yapılandırma dosyasıyla birlikte compose.yaml dosyasının yanına koyun:

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

push-proxy/config/antimatter-push-proxy.json, paket tanımlayıcınız (bundle identifier), anahtar ID'niz ve takım ID'niz ile:

{
    "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, sürümünüzün iOS paket tanımlayıcısıdır. ApplePushUseDevelopment, yalnızca Xcode'dan yüklenen sürümler için true olmalıdır. Aramalar, aynı anahtarı kullanan VoIP push'ları aracılığıyla iPhone'lar üzerinde çalar ve burada başka bir şey gerektirmez.

Site, compose dosyasına eklenebilecek hazır bir bölüm içerir: compose.push.example.yaml. Bu bölüm, yayınlanan ghcr.io/antimatterchat/push-proxy:latest görüntüsünü çalıştırır.

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

Başlangıçta proxy, kurduğu her push hedefinin adını günlüğe yazar ve kimlik bilgilerini yükleyemediği her hedef için bir hata kaydeder. Proxy hiçbir port yayımlamaz; yalnızca Antimatter, compose ağı üzerinden ona erişir.

Docker kullanmıyorsanız, bunun yerine push proxy'nin .deb veya .rpm paketini yükleyin: GIF servisi ve push proxy paketleri bölümüne bakın.

Push proxy, onu çağıranı denetlemez. İnternete açmayın. Başka bir ana makinede çalışıyorsa, HTTPS arkasına alın ve erişimi kısıtlayın: bildirimler ileti metnini içerebilir.

Antimatter'i proxy'ye yönlendirin

Sistem Konsolu › Ortam › Anında bildirim sunucusu bölümünde Anında bildirimler kullanılsın seçeneğini Push bildirimlerini kendi push proxy’niz üzerinden gönderin olarak, Anında bildirim sunucusu alanını ise http://push-proxy:8066 (başka bir yerde çalışıyorsa proxy'nin HTTPS adresi) olarak ayarlayın. Bu seçenekle ve adres olmadan sayfa kaydedilemez. Anında bildirim göndermeyi durdurmak için Anında bildirimler gönderilmesin seçeneğini işaretleyin. Ya da antimatter servisinde değişkenlerle:

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

Kontrol etmek için: mobil uygulamayla oturum açın, uygulamayı arka plana alın ve başka bir hesabın sizi bahsetme ile etiketlemesini sağlayın. Hiçbir şey gelmezse, Antimatter günlüğünde ve proxy günlüğünde push araması yapın: cihaz türünün bilinmediğini, bir anahtarın reddedildiğini veya cihazın başka bir uygulama derlemesine ait olduğunu belirtirler.

Bildirimlerin içeriği

Sistem Konsolu › Site yapılandırması › Bildirimler › Anında bildirim içerikleri (EmailSettings.PushNotificationContents):

SeçenekDeğer
Yalnızca gönderen adıyla genel açıklamageneric_no_channel
Gönderen ve kanal adlarıyla genel açıklamageneric
Bildirim yükünde gönderilen tam ileti içeriği (varsayılan)full
Alım sırasında sunucudan getirilen tam ileti içeriğiid_loaded

id_loaded ile, proxy üzerinden geçen bildirim Apple ve Google'da yalnızca bir kimlik taşır ve uygulama iletinizi sunucunuzdan getirir: ileti metni asla bu servislerin üzerinden geçmez. İletiler gizliyse en iyi seçenektir.

Anında bildirim sunucusu sayfasındaki Büyük kanal bildirim eşiği (TeamSettings.MaxNotificationsPerChannel, varsayılan 1000), @here, @all ve @channel bahsetmelerinin çalışabilmesi için bir kanalın sahip olabileceği en büyük üye sayısıdır. Daha büyük kanallarda bu bahsetmeler ve yazma göstergeleri devre dışı bırakılır.