E-posta & SMTP Sunucu

    SOGo Kurulumu: Takvim ve Kişi Senkronizasyonu

    SOGo ile takvim ve kişi senkronizasyonunu çalışır hâle getiren kurulum adımları.

    9 dk okuma Güncellendi: 25 Ağustos 2026

    Kurumsal e-posta altyapısında en sık duyulan istek, posta okumaktan sonra "takvimimizi de telefondan görebilir miyiz" olur. Klasik bir Postfix ve Dovecot kurulumu bunu yapamaz; IMAP protokolü takvim ve kişi taşımaz. SOGo kurulumu tam olarak bu boşluğu doldurur: mevcut IMAP sunucunun önüne oturur, posta arayüzünü kendi üzerinden sunar ve buna CalDAV, CardDAV ve ActiveSync protokolleriyle takvim ile kişi senkronizasyonu ekler.

    Bu rehberde SOGo'yu sıfırdan çalışır hâle getirmenin adımlarını anlatacağım: veritabanı ve memcached hazırlığı, kullanıcı kaynağını mevcut posta tablolarına bağlamak, sogo.conf içindeki kritik anahtarlar, nginx ters vekil yapılandırmasının neden zorunlu olduğu ve telefonların bağlanacağı CalDAV ile ActiveSync uçları. Sonunda da kurulumu ilk denemede çalışmaz hâle getiren tipik hataları topladım.

    Ön Koşullar ve Mimari#

    SOGo tek başına bir mail sunucusu değildir; mevcut bir IMAP sunucusunun önüne konur. Yani Postfix ile Dovecot zaten çalışıyor olmalı, kullanıcılar IMAP ile giriş yapabilmelidir. SOGo, posta için Dovecot'a bağlanır, takvim ve kişileri ise kendi veritabanında saklar.

    BileşenRolüZorunlu mu
    Dovecot (IMAP)Posta kutularıEvet
    Dovecot (ManageSieve)Filtre ve tatil yanıtıÖnerilir
    Postfix (SMTP)Giden postaEvet
    PostgreSQL veya MySQLTakvim, kişi, oturum verisiEvet
    memcachedOturum önbelleğiEvet
    nginx veya ApacheTers vekil ve TLSEvet

    Veritabanı ve memcached seçenek değil, zorunluluktur. memcached olmadan oturumlar tutulamaz ve kullanıcılar sürekli oturum düşmesi yaşar. Ters vekil olmadan da SOGo'nun kendi süreçleri düzgün çalışmaz; arayüzdeki bağlantılar yanlış adres üretir.

    # Depoyu ekledikten sonra kurulum (Debian/Ubuntu)
    apt install sogo sogo-activesync memcached postgresql nginx
    
    systemctl enable --now memcached
    systemctl status sogo
    

    Kurulum tamamlandığında sogod süreçleri yerel bir portta dinlemeye başlar; bu portu asla dışarıya açma, tüm erişim ters vekil üzerinden olacak.

    Veritabanını Hazırlamak#

    SOGo'nun takvim, kişi, oturum ve alarm verileri için bir veritabanı gerekir. Tabloları kendisi oluşturur; senin yapman gereken tek şey boş bir veritabanı ve yetkili bir kullanıcı tanımlamak.

    -- PostgreSQL
    CREATE USER sogo WITH PASSWORD 'guclu-bir-parola';
    CREATE DATABASE sogo OWNER sogo ENCODING 'UTF8';
    

    Kullanıcı kaynağı ise ayrı bir konudur. SOGo, kimin hangi parolayla giriş yapacağını bir "user source" üzerinden öğrenir. Zaten MySQL tabanlı Postfix kullanıcı yönetimi yapısını kurduysan, mevcut virtual_users tablosunu SOGo'nun beklediği sütun adlarına çeviren bir görünüm (view) oluşturman yeterli:

    -- Mevcut posta tablosunu SOGo'nun beklediği sütun adlarına eşle
    CREATE VIEW sogo_users AS
    SELECT
      email                                   AS c_uid,
      email                                   AS c_name,
      password                                AS c_password,
      SUBSTRING_INDEX(email, '@', 1)          AS c_cn,
      email                                   AS mail
    FROM virtual_users
    WHERE active = 1;
    

    c_uid giriş adı, c_password ise Dovecot'un kullandığı hash'in aynısıdır. Hash şeması SHA512-CRYPT ise SOGo tarafında da bunu belirtmen gerekir; aksi halde doğru parolayla bile giriş reddedilir.

    sogo.conf: Kritik Anahtarlar#

    Tüm yapılandırma /etc/sogo/sogo.conf dosyasındadır ve söz dizimi JSON'a benzer ama tam olarak JSON değildir — satır sonlarındaki noktalı virgüllere dikkat et. Aşağıdaki blok çalışan bir kurulumun çekirdeğidir:

    {
      /* Veritabanı bağlantıları */
      SOGoProfileURL = "postgresql://sogo:[email protected]:5432/sogo/sogo_user_profile";
      OCSFolderInfoURL = "postgresql://sogo:[email protected]:5432/sogo/sogo_folder_info";
      OCSSessionsFolderURL = "postgresql://sogo:[email protected]:5432/sogo/sogo_sessions_folder";
      OCSEMailAlarmsFolderURL = "postgresql://sogo:[email protected]:5432/sogo/sogo_alarms_folder";
    
      /* Kullanıcı kaynağı */
      SOGoUserSources = (
        {
          type = sql;
          id = users;
          viewURL = "mysql://mailreader:[email protected]:3306/mailserver/sogo_users";
          canAuthenticate = YES;
          userPasswordAlgorithm = "ssha512-crypt";
        }
      );
    
      /* Posta sunucuları */
      SOGoMailDomain = "firmaniz.com";
      SOGoIMAPServer = "imaps://127.0.0.1:993";
      SOGoSieveServer = "sieve://127.0.0.1:4190";
      SOGoSMTPServer = "smtp://127.0.0.1:587";
      SOGoMailingMechanism = smtp;
    
      /* Arayüz ve bölge */
      SOGoLanguage = Turkish;
      SOGoTimeZone = "Europe/Istanbul";
      SOGoPageTitle = "Firma Posta";
    
      /* Önbellek ve süreç sayısı */
      SOGoMemcachedHost = "127.0.0.1";
      WOWorkersCount = 8;
    }
    

    SOGoTimeZone değerini doğru vermek göründüğünden önemlidir: yanlış saat dilimi, takvim etkinliklerinin telefonda birkaç saat kaymış görünmesine yol açar ve bu, kullanıcıların ilk şikâyet edeceği şeydir. WOWorkersCount ise eşzamanlı istek kapasitesini belirler; her işçi ayrı bir süreçtir, dolayısıyla sunucunun belleğine göre ölçekle.

    # Değişiklikten sonra servisi yeniden başlat ve logu izle
    systemctl restart sogo
    tail -f /var/log/sogo/sogo.log
    

    nginx Ters Vekil Yapılandırması#

    SOGo'nun ters vekil gerektirmesinin teknik bir sebebi var: uygulama, ürettiği bağlantı adreslerini istekle birlikte gelen x-webobjects-* başlıklarından okur. Bu başlıkları göndermezsen arayüz açılır ama içindeki bağlantılar yanlış adrese gider ve kullanıcı "sayfa bulunamadı" hatalarıyla karşılaşır.

    server {
        listen 443 ssl http2;
        server_name mail.firmaniz.com;
    
        ssl_certificate     /etc/letsencrypt/live/mail.firmaniz.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/mail.firmaniz.com/privkey.pem;
    
        # Statik dosyalar doğrudan diskten
        location ^~ /SOGo.woa/WebServerResources/ {
            alias /usr/lib/GNUstep/SOGo/WebServerResources/;
            expires max;
        }
    
        location ^~ /SOGo {
            proxy_pass http://127.0.0.1:20000;
            proxy_redirect http://127.0.0.1:20000 default;
    
            proxy_set_header Host $host;
            proxy_set_header x-webobjects-server-protocol HTTP/1.0;
            proxy_set_header x-webobjects-remote-host $remote_addr;
            proxy_set_header x-webobjects-server-name $server_name;
            proxy_set_header x-webobjects-server-url $scheme://$host;
            proxy_set_header x-webobjects-server-port $server_port;
    
            client_max_body_size 50m;
            proxy_buffer_size 128k;
            proxy_buffers 8 128k;
        }
    
        # ActiveSync uzun süreli bağlantı tutar
        location ^~ /Microsoft-Server-ActiveSync {
            proxy_pass http://127.0.0.1:20000/SOGo/Microsoft-Server-ActiveSync;
            proxy_read_timeout 3540s;
            proxy_connect_timeout 3540s;
            proxy_send_timeout 3540s;
        }
    
        # Kök adresi doğrudan webmail'e yönlendir
        location = / { return 302 /SOGo; }
    }
    

    ActiveSync bloğundaki uzun zaman aşımı değerleri isteğe bağlı değildir. ActiveSync, yeni mesaj bildirimi için bağlantıyı açık tutar (Ping isteği); varsayılan 60 saniyelik nginx zaman aşımı bu bağlantıyı sürekli keser ve telefonlar hem geç bildirim alır hem de pil tüketir.

    Sertifikanın alan adıyla eşleştiğinden emin ol; kendi imzalı sertifika ile ActiveSync çalışmaz. Ücretsiz ve otomatik yenilenen bir sertifika için SSL seçeneklerine bakabilirsin.

    CalDAV, CardDAV ve İstemci Bağlantıları#

    Kurulum tamamlandığında kullanıcılar tarayıcıdan https://mail.firmaniz.com/SOGo adresine girerek posta, takvim ve kişilere ulaşır. Asıl değer ise dış istemcilerin bağlanabilmesidir. SOGo'nun DAV adresleri öngörülebilir bir biçim izler:

    NeAdres
    Kişisel takvim (CalDAV)/SOGo/dav/[email protected]/Calendar/personal/
    Tüm takvimler/SOGo/dav/[email protected]/Calendar/
    Kişisel adres defteri (CardDAV)/SOGo/dav/[email protected]/Contacts/personal/
    ActiveSync (telefon)/Microsoft-Server-ActiveSync

    iOS ve Android'in yerleşik takvim uygulamaları CalDAV'ı doğrudan destekler; kullanıcı hesap eklerken sunucu adresi, kullanıcı adı ve parolasını girer. Outlook tarafında ise CalDAV yerleşik desteklenmediği için ActiveSync ya da bir eklenti gerekir; Outlook'un posta tarafındaki kurulum adımları için e-posta istemci kurulumu yazısına bakabilirsin.

    Bir istemcinin bağlanamadığı durumlarda sorunun SOGo'da mı yoksa istemcide mi olduğunu anlamanın en hızlı yolu, DAV ucunu komut satırından yoklamaktır. Doğru yapılandırılmış bir kurulumda kimlik doğrulaması geçen istek XML gövdesi döndürür:

    # DAV ucu kimlik doğrulamayı kabul ediyor mu
    curl -u [email protected] -X PROPFIND \
      -H "Depth: 0" \
      https://mail.firmaniz.com/SOGo/dav/[email protected]/Calendar/personal/
    
    # 207 Multi-Status  -> her şey yolunda, sorun istemcide
    # 401 Unauthorized  -> kullanıcı kaynağı veya parola algoritması hatalı
    # 404 Not Found     -> ters vekil yolu yanlış eşlenmiş
    

    Dönen HTTP koduna göre nereye bakacağın netleşir: 401 alıyorsan kullanıcı kaynağı tarafında, 404 alıyorsan nginx bloğunda, 207 alıp da telefon bağlanamıyorsa istemci ayarlarında sorun var demektir. Aynı testi CardDAV yolu için de tekrarlayarak kişilerin ayrı bir sorunu olup olmadığını ayırt edebilirsin.

    Takvim hatırlatmalarının e-posta olarak gönderilebilmesi için bir zamanlanmış görev gerekir; SOGo bunu paketle birlikte kurar ama etkin olduğunu doğrulaman iyi olur:

    # Alarm bildirimi görevinin tanımlı olduğunu doğrula
    cat /etc/cron.d/sogo
    
    # Yedekleme: tüm kullanıcı verilerini dışa aktar
    sogo-tool backup /yedek/sogo ALL
    
    # Tek bir kullanıcının tercihlerini görüntüle
    sogo-tool user-preferences get defaults [email protected]
    

    sogo-tool backup komutunu düzenli çalıştır; posta kutularını yedeklemek takvimleri kurtarmaz, çünkü onlar veritabanında durur. Otomatik ve dışarıya alınan yedekler için yedekleme hizmetimizi değerlendirebilirsin.

    Sık Yapılan Hatalar ve Tuzaklar#

    x-webobjects-* başlıklarını göndermemek. SOGo kurulumunda bir numaralı hata budur. Arayüz açılır, giriş yapılır, ama menülerdeki bağlantılar çalışmaz ya da her tıklamada oturum düşer. Ters vekil bloğundaki beş başlığın tamamı gereklidir.

    memcached'i kurmayı unutmak. memcached çalışmıyorsa SOGo başlar ama oturumlar saklanamaz; kullanıcılar birkaç dakikada bir yeniden giriş yapmak zorunda kalır. Loglarda bağlantı hatası olarak görünür, arayüzde ise anlamsız bir davranış olarak.

    Parola algoritmasını yanlış belirtmek. userPasswordAlgorithm değeri Dovecot'un hash şemasıyla eşleşmezse doğru parola bile reddedilir. Dovecot'ta SHA512-CRYPT kullanıyorsan SOGo tarafında da bunun karşılığını yaz ve doveadm auth test ile Dovecot'un aynı kullanıcıyı kabul ettiğini doğrula.

    Yanlış saat dilimi. SOGoTimeZone değeri sunucunun saat diliminden bağımsızdır ve etkinliklerin görünen saatini doğrudan belirler. Kullanıcıların çoğunluğunun bulunduğu bölgeyi yaz.

    sogod portunu dışarıya açmak. SOGo'nun kendi dinleyicisi kimlik doğrulama ve TLS açısından doğrudan internete açılmak üzere tasarlanmamıştır. Güvenlik duvarında bu portu kapalı tut, erişim yalnızca ters vekil üzerinden olsun.

    ActiveSync için zaman aşımını ayarlamamak. Varsayılan vekil zaman aşımlarıyla ActiveSync sürekli kopar; kullanıcılar mesajların telefona geç düştüğünü söyler ve sorunun kaynağını mail sunucusunda aramaya başlarsın. Çözüm nginx tarafındaki üç zaman aşımı satırıdır.

    Takvim verisini yedeklememek. Posta kutuları diskte, takvim ve kişiler veritabanındadır. Yedekleme planın yalnızca Maildir dizinlerini kapsıyorsa, bir arıza sonrası kullanıcılar postalarını geri alır ama takvimlerini kaybeder.

    Sıkça Sorulan Sorular#

    SOGo mevcut Postfix ve Dovecot kurulumumla çalışır mı#

    Evet, SOGo zaten bunun için tasarlanmıştır; kendi posta sunucusunu getirmez, mevcut IMAP ve SMTP sunucularına bağlanır. Yapman gereken tek şey SOGoIMAPServer ve SOGoSMTPServer değerlerini doğru yazmak ve kullanıcı kaynağını mevcut hesap tablolarına bağlamaktır. Posta kutularının yeri ve formatı değişmez.

    SOGo kaç kullanıcıya kadar ölçeklenir#

    Orta ölçekli bir VDS üzerinde birkaç yüz aktif kullanıcıyı rahatlıkla taşır; sınırı belirleyen şey kullanıcı sayısından çok eşzamanlı oturum ve ActiveSync bağlantısı sayısıdır. WOWorkersCount değerini artırarak kapasiteyi büyütebilirsin ama her işçi ayrı bir süreç ve ek bellek demektir. Yoğun kullanımda veritabanı ve memcached'i ayrı bir makineye almak en etkili ölçekleme adımıdır.

    ActiveSync ücretsiz mi#

    SOGo'nun ActiveSync desteği açık kaynak paketin bir parçasıdır ve ayrı bir lisans ücreti gerektirmez; sogo-activesync paketini kurup nginx tarafındaki uç noktayı tanımlaman yeterlidir. Uygulamada asıl maliyet lisans değil kaynak tüketimidir: ActiveSync uzun süreli bağlantılar tutar, dolayısıyla eşzamanlı telefon sayısı arttıkça süreç ve bellek ihtiyacı da artar.

    Takvim etkinlikleri telefonda neden yanlış saatte görünüyor#

    Neredeyse her zaman saat dilimi uyuşmazlığından kaynaklanır. Önce sogo.conf içindeki SOGoTimeZone değerini kontrol et, sonra kullanıcının SOGo arayüzündeki kişisel saat dilimi tercihine bak; bu iki değer birbirinden bağımsızdır. Sunucunun sistem saatinin de NTP ile senkron olduğundan emin ol, çünkü kayan bir sistem saati hatırlatmaları da bozar.

    SOGo yerine ne kullanabilirim#

    Yalnızca posta arayüzü istiyorsan Roundcube ya da Snappymail çok daha hafif seçeneklerdir; ikisi de takvim senkronizasyonu sunmaz ama bakım yükleri çok düşüktür. Bu karşılaştırmayı webmail seçenekleri yazısında ayrıntısıyla ele aldım. Yalnızca CalDAV ve CardDAV gerekiyorsa, posta arayüzü olmayan bağımsız bir DAV sunucusu kurmak da mümkündür.

    Kurulumdan sonra giriş yapamıyorum, nereye bakmalıyım#

    Sırayla üç şeyi kontrol et. Önce /var/log/sogo/sogo.log dosyasına bak; kimlik doğrulama hataları burada açıkça yazılır. Sonra userPasswordAlgorithm değerinin Dovecot'un hash şemasıyla eşleştiğini doğrula. Üçüncü olarak kullanıcı kaynağı görünümünü elle sorgula ve c_uid ile c_password sütunlarının beklenen değerleri döndürdüğünden emin ol; çoğu giriş sorunu bu üç adımdan birinde çözülür.

    Kapanış#

    SOGo, mevcut bir mail sunucusuna takvim ve kişi senkronizasyonu eklemenin en doğrudan yoludur; karşılığında üç ek servisin bakımını üstlenirsin. Aklında kalması gereken dört alışkanlık şu: ters vekilde x-webobjects-* başlıklarının beşini de gönder, memcached'i kurulumun zorunlu parçası say, SOGoTimeZone ile parola algoritmasını baştan doğru ayarla ve takvim verisi veritabanında durduğu için yedekleme planına sogo-tool backup adımını ekle. ActiveSync kullanacaksan nginx zaman aşımlarını uzatmayı da unutma.

    Bu yapıyı kendin kurup işletmek yerine hazır bir çözümle başlamak istersen, kurumsal e-posta paketlerimiz webmail ve kutu yönetimini hazır sunar. Kendi sunucunda tam kontrol istiyorsan VDS sunucu ya da SMTP sunucu paketlerimiz uygun bir temel oluşturur; kurulumun ve güncellemelerin bakımını devretmek istediğinde sunucu yönetimi hizmetimiz groupware katmanını da kapsar.

    SOGoGroupwareCalDAV

    Uygulamaya geçmeye hazır mısınız?

    NVMe SSD, ücretsiz SSL ve %99.9 uptime garantisiyle Clou.TR hosting ve sunucu çözümleriyle projenizi hayata geçirin.