SSD Nodes Learn Hosting plans →
Rehberler Matt ConnorYazan Matt Connor

Mailcow ile Kendi E-posta Sunucunuzu Kurma Rehberi

Mailcow kurulumu öncesi 25 numaralı portun açık olduğunu test edin. Gmail 550 5.7.25 hatasını aşmak için gerekli DNS kayıtlarını ve PTR yapılandırmasını bu rehberde bulabilirsiniz.

Ne inşa ediyorsunuz

Kendi sunucunuz üzerinde eksiksiz bir e-posta sunucusu: e-posta gönderip almak için SMTP, telefonunuz ve dizüstü bilgisayarınızın eşzamanlı kalması için IMAP, bir webmail istemcisi ve her iki yöndeki iletileri puanlayan bir spam filtresi. mailcow-dockerized; Postfix, Dovecot, Rspamd, SOGo webmail, MariaDB, Redis ve bir ACME istemcisini tek bir Docker Compose yığını içinde bir araya getirir, bu nedenle yazılım kısmı zor değildir. Sistemi yarım saat içinde çalışır duruma getirebilirsiniz.

Zor olan kısım, çevresindeki her şeydir. E-posta, internetin geri kalanının yepyeni bir sunucuya aktif olarak güvenmediği tek servistir ve "çalışıyor" durumu ile "Gmail'in her iletiyi sessizce yutması" arasındaki fark, büyük ölçüde dört DNS kaydına ve tam olarak kontrol edemeyebileceğiniz bir IP itibarı ayarına dayanır. Herhangi bir kiralama işlemi yapmadan önce aşağıdaki ön koşulları okuyun. Okuduktan sonra itibar yönetimi sürecinin buna değmeyeceğine karar verirseniz, bu meşru bir yaklaşımdır; 2026 yılında nelerin self-host edilmeye değer olduğuna dair özetimiz, tam da bu nedenlerden dolayı e-postayı "yalnızca gerçekten istiyorsanız" kategorisine yerleştirir.

Ön koşullar projenin kendisidir

Bunlardan herhangi birini atlarsanız, asla ulaşmayan e-postalar gönderirsiniz. İnsanları en çok engelleyen unsurların kabaca sıralaması şöyledir:

Giden 25 numaralı port açık olmalıdır. Sunucunuz, Gmail ve Microsoft'a TCP 25 numaralı port üzerinden teslimat yapar. VPS ve bulut sağlayıcılarının büyük bir kısmı, spam ile mücadele etmek için giden 25 numaralı portu varsayılan olarak engeller. Bu engelleme sessizdir; açılışta hiçbir hata oluşmaz, her şey sağlıklı görünür ve e-posta, Postfix pes edip geri gönderene kadar kuyrukta bekletilir (mailcow, maksimum kuyruk ömrünü beş gün olarak ayarlar). Herhangi bir kurulum yapmadan önce bunu test edin. Eğer port engellenmişse, tek çözüm sağlayıcınıza bir destek talebi açarak portu açmalarını istemektir; bazıları eski hesaplar için bunu yapar, bazıları ise asla yapmaz.

Kullanılabilir itibara sahip temiz bir IP. Geri dönüştürülmüş VPS IP adresleri, genellikle önceki kullanıcının spam faaliyetleri nedeniyle halihazırda kara listelerde yer alır. İşleme başlamadan önce IP adresinizi Spamhaus sorgulama veya mxtoolbox gibi bir serviste kontrol edin. Listelenmiş bir IP, kod yazarak aşamayacağınız reddedilme durumları anlamına gelir.

DNS kontrolü ve doğru bir PTR kaydı. Alan adınızın bölge (zone) ayarlarına kayıt eklemeniz ve sunucunuzun IP adresi için, posta ana makine adınıza (hostname) işaret eden bir ters DNS (PTR) kaydına ihtiyacınız vardır. PTR kaydı neredeyse hiçbir zaman DNS panelinizde ayarlanmaz; IP adresinin sahibi kimse onun panelinde bulunur, bu nedenle VPS sağlayıcınızın kontrol panelinden veya destek talebiyle ayarlanmalıdır.

6 GiB RAM ve 2 vCPU rahat bir alt sınırdır. mailcow'un kişisel bir kurulum için kendi minimum gereksinimi 6 GiB RAM ve 1 GiB swap alanıdır; birkaç kullanıcı kullanmaya başladığında ise 8 GiB önerilir. Yaklaşık 2.5 GiB'ın altında, generate_config.sh çekirdeğin konteynerleri sonlandırmaması için ClamAV virüs tarayıcısını devre dışı bırakmayı teklif eder. mailcow'un belgelenmiş minimum disk gereksinimi, hiçbir e-posta depolanmadan önce 20 GiB'dır; bu nedenle başlangıçta bundan daha fazlasını verin ve posta kutularının büyümesi için yer bırakın.

Çıplak bir IP değil, bir DNS adı. mail.example.com gibi bir ana makine adı seçin. Bu tek isim; MAILCOW_HOSTNAME değeriniz, TLS sertifikası konunuz, PTR hedefiniz ve SMTP banner'ınız olur. Her yerde tutarlı tutun.

Adım 1, 25 numaralı giden portun açık olduğunu doğrulayın

Bunu ilk sırada yapın. Başarısız olursa diğer tüm işlemler boşa kürek çekmek olacaktır. Yeni kurulan VPS üzerinden, gerçek bir posta sunucusuyla SMTP görüşmesi başlatmayı deneyin:

sudo apt update && sudo apt install -y netcat-openbsd
nc -vz -w 5 gmail-smtp-in.l.google.com 25

Çalışan bir sonuç anında döner:

Connection to gmail-smtp-in.l.google.com (142.250.x.x) 25 port [tcp/smtp] succeeded!

Engellenmiş bir port beş saniye boyunca yanıt vermez ve ardından zaman aşımına uğrar:

nc: connect to gmail-smtp-in.l.google.com port 25 (tcp) timed out: Operation now in progress

Kendi güvenlik duvarı kurallarınızın olmadığı yeni bir VPS üzerinde bu zaman aşımı, sağlayıcının koyduğu bir engeldir. Bu, sizin güvenlik duvarınız değil, sağlayıcı tarafındaki bir ağ filtresidir; dolayısıyla yerel bir değişiklik bunu düzeltmez. Bir destek talebi açın: "Lütfen <IP> adresindeki VPS'im için 25 numaralı giden TCP portunu etkinleştirin; meşru bir posta sunucusu çalıştırıyorum." Bu işlem "başarılı" (succeeded) yanıtı dönene kadar mailcow kurulumu yapmayın. Gelen 25 numaralı portun (diğer sunucuların size ulaşması) ayrı bir yol olduğunu ve genellikle açık olduğunu unutmayın; sağlayıcıların kısıtladığı taraf giden trafik tarafıdır.

Adım 2, DNS kayıtlarını şimdi yapılandırın

DNS değişikliklerinin yayılması zaman alır, bu nedenle kurulumdan önce mümkün olan tüm kayıtları yayınlayın. Alan adınızın example.com, posta sunucunuzun mail.example.com ve IP adresinizin 10.0.0.10 olduğunu varsayın. Bölge dosyanızda şunları oluşturun:

mail.example.com.        A      10.0.0.10
mail.example.com.        AAAA   2001:db8::10          ; only if you have IPv6
example.com.             MX  10 mail.example.com.
example.com.             TXT    "v=spf1 mx -all"
_dmarc.example.com.      TXT    "v=DMARC1; p=none; rua=mailto:postmaster@example.com"

SPF kaydı, "bu alan adı için yalnızca benim MX sunucum posta gönderebilir, geri kalanını reddet" anlamına gelir. DMARC politikasını p=none seviyesinde başlatın; böylece kendi postalarınızı reddetmeden raporları izleyebilirsiniz. Hizalama doğrulandıktan sonra politikayı önce p=quarantine, ardından p=reject seviyesine sıkılaştırın. İki kayıt kasıtlı olarak eksik bırakılmıştır: Adım 6'da mailcow tarafından sizin için oluşturulacak olan DKIM ve şu an servis sağlayıcınızın paneli üzerinden ayarlamanız gereken PTR kaydı.

10.0.0.10 için PTR (ters DNS) kaydını, MAILCOW_HOSTNAME değerinin tam karşılığı olan mail.example.com olarak ayarlayın. Bu, çoğu kişinin unuttuğu tek kayıttır ve büyük servis sağlayıcıları bu kayıt eksik olduğunda postaları reddeder. Eğer panelinizde rDNS alanı bulunmuyorsa, bir destek talebi oluşturun.

Adım 3, Docker Kurulumu

mailcow, Docker Engine 24.0 veya daha yeni bir sürüm ile Docker Compose 2.0 veya daha yeni bir sürüm gerektirir. Compose eklentisi (docker compose) en pratik yöntemdir; ancak mailcow, bağımsız docker-compose ikili dosyasını da destekler. Ubuntu'nun hiçbir Compose eklentisi içermeyen docker.io paketi yerine Docker'ın resmi kolaylaştırma betiğini kullanın:

curl -fsSL https://get.docker.com | sudo sh
sudo docker compose version

v2.x veya v5.x sürümünü bildiren bir Docker Compose version satırı görmelisiniz. 2025 yılında yayınlanan Compose v5, işlevsel olarak v2 ile aynıdır ve her ikisi de mailcow gereksinimlerini karşılar. Eğer docker compose version komutu docker: 'compose' is not a docker command çıktısını veriyorsa, Docker Engine kuruludur ancak Compose eklentisi eksiktir. Eklentiyi Docker deposundan kurun, yukarıdaki betiği tekrar çalıştırın veya her ikisini de Docker'ın kendi apt deposundan kuran Docker Compose temel rehberimizi takip edin.

Adım 4, mailcow'u kopyalayın ve yapılandırmayı oluşturun

cd /opt
sudo git clone https://github.com/mailcow/mailcow-dockerized
cd mailcow-dockerized
umask
sudo ./generate_config.sh

umask komutunun 0022 çıktısını vermesini kontrol etmek, umask 0022 değerini kopyalama işleminden önce ayarlayan mailcow kurulum adımlarını takip eder. mailcow içerisinde bu değeri test eden bir mekanizma yoktur ve yeni bir Ubuntu 24.04 root kabuğu size zaten 0022 değerini verir. Betik daha sonra önemli olan tek şeyi sorar: tam nitelikli alan adı (FQDN). mail.example.com değerini girin; bu değer, A kaydınız ve PTR kaydınızla tam olarak eşleşmelidir. Betik, tüm yığının okuduğu tek ortam dosyası olan mailcow.conf dosyasını oluşturur. Web portlarını (HTTP_PORT, HTTPS_PORT) değiştirmeniz veya düşük kaynaklı bir sunucuda ClamAV'yi devre dışı bırakmanız gerekirse bu dosyayı açın:

MAILCOW_HOSTNAME=mail.example.com
HTTP_PORT=80
HTTPS_PORT=443
SKIP_CLAMD=n          # set to y to drop the virus scanner on a <2.5 GiB box

SKIP_FTS=y, düşük RAM'li sunucularda kullanılan diğer bir ayardır: tam metin arama, mailcow belgelerinde belirtilen ikinci bellek tüketicisidir ve devre dışı bırakılması durumunda yalnızca webmail üzerindeki gövde metni arama özelliğini kaybedersiniz.

Sunucuda başka bir servis tarafından kullanılmadığı sürece HTTP_PORT=80 ve HTTPS_PORT=443 değerlerini değiştirmeyin. mailcow'un yerleşik ACME istemcisi varsayılan olarak HTTP-01 sınamasını kullanır; bu da sertifikayı alabilmek için 80 numaralı portun internete açık olmasını gerektirir. (mailcow 2026-03 ve sonraki sürümler, 80 numaralı portu gerektirmeyen ancak DNS sağlayıcınızın API erişimine ihtiyaç duyan ACME_DNS_CHALLENGE=y ile DNS-01 sınamasını kullanabilir.) Basit kurulumun aynı sunucuda ayrı bir nginx-plus-Certbot kurulumu çalıştırmamasının nedeni budur; mailcow kendi TLS sertifikalarını dahili olarak oluşturur ve yeniler, 80/443 portlarını işgal eden ikinci bir servis bu süreci bozar. mailcow, alternatif yöntemi belgelerinde sunar: web dinleyicilerini HTTP_BIND=127.0.0.1 HTTP_PORT=8080 HTTPS_BIND=127.0.0.1 HTTPS_PORT=8443 ile yerel olarak bağlayın, 80 ve 443 portlarına bir reverse proxy yerleştirin ve yerel bir Certbot'un sertifikaları yönetmesini istiyorsanız mailcow'u bu sertifikalara yönlendirip bir yenileme kancası (renewal hook) ekleyin. Bir posta sunucusunda bu daha fazla hareketli parça anlamına gelir; dolayısıyla aynı durum, herkese açık bir web arayüzü isteyen diğer tüm servisler için de geçerlidir: Jellyfin kütüphanesini 90'ların video mağazası gibi gösteren Halcyon teması gibi 443 portunda kendi reverse proxy'sini bekleyen yapılar, mailcow'u bu proxy'nin arkasına almadığınız sürece farklı bir sunucuda barındırılmalıdır. İstisna, hiçbir zaman herkese açık bir web portu talep etmeyen servislerdir: kendi kendine barındırılan bir RustDesk relay, yalnızca kendi 21115 ile 21119 arasındaki port aralığını dinler; bu nedenle bant genişliği kapasiteniz yeterli olduğu sürece aynı sunucuyu paylaşabilir.

Adım 5, Yığını başlatma ve giriş yapma

sudo docker compose pull
sudo docker compose up -d
sudo docker compose ps

Çekme işlemi yaklaşık iki düzine imaj indirir; birkaç dakika bekleyin. docker compose ps komutu tüm container'ların running (veya healthy) durumunda olduğunu gösterdiğinde, tarayıcıda https://mail.example.com/admin adresini açın. Varsayılan yönetici kullanıcı adı admin, parola ise moohoo şeklindedir. Bu parolayı yönetici arayüzünde System → Configuration, ardından Access → Administrators yolunu izleyerek hemen değiştirin. Tarayıcı NET::ERR_CERT_AUTHORITY_INVALID uyarısı verirse, ACME sertifikası henüz oluşturulmamış demektir; bozuk olduğunu varsaymadan önce aşağıdaki ACME hatası bölümüne bakın; ilk bir veya iki dakika için kendinden imzalı bir yer tutucu sertifika olması normaldir.

Adım 6, Alan adı ve posta kutusu ekleme, DKIM yayınlama

Yönetici arayüzünde E-Mail → Configuration kısmını açın, Domains sekmesi altında Add domain butonuna tıklayın ve example.com değerini girin. Ardından, Mailboxes sekmesinden Add mailbox diyerek bir parola ile you@example.com posta kutusunu oluşturun. Bu, IMAP üzerinden erişilebilir durumda olan çalışan bir posta kutusudur.

Şimdi DKIM anahtarı için; System → Configuration, ardından Options → ARC/DKIM keys yolunu izleyin. mailcow, alan adını eklediğinizde bir anahtar oluşturmuş olabilir; oluşturmadıysa oradan bir tane oluşturun, alan adını seçin, seçiciyi (selector) dkim olarak bırakın, 2048-bit seçeneğini tercih edin ve Add butonuna tıklayın. Gösterilen uzun TXT değerini kopyalayın ve şu şekilde yayınlayın:

dkim._domainkey.example.com.  TXT  "v=DKIM1;k=rsa;t=s;s=email;p=MIIBIjANBgkqh...long-key...QAB"

mailcow'un Domains sayfası, beklediği tüm kayıtları listeleyen ve halihazırda yayınlanmış olanların yanında yeşil onay işareti veya kırmızı çarpı gösteren bir DNS butonuna sahiptir. Bunu bir kontrol listesi olarak kullanın ve teslim edilebilirliği test etmeden önce her satırı yeşil hale getirin. Yayınladıktan sonra kırmızı bir DKIM satırı görmeniz, genellikle anahtarın TXT parçalarına yanlış bölündüğü anlamına gelir; 2048-bit bir anahtar, tek bir TXT dizisi için 255 karakter sınırından daha uzundur. Bu yüzden anahtarı tek bir mantıksal değer olarak yapıştırın ve DNS sağlayıcınızın bunu sizin yerinize parçalara bölmesine izin verin.

Adım 7, Teslim edilebilirliği test edin ve 10/10 puanı hedefleyin

mail-tester.com adresine gidin, size gösterilen rastgele adresi kopyalayın ve yeni posta kutunuzdan bu adrese bir ileti gönderin; bunun için https://mail.example.com/SOGo adresindeki SOGo webmail arayüzüne giriş yapıp gönderim sağlayın. Ardından "Then check your score" butonuna tıklayın.

10/10 puanı hedefleyin. Yaygın puan kesintileri ve nedenleri şunlardır:

  • SPF uyumsuzluğu, MX/SPF kaydınız eksik veya gönderim yapan IP adresi kapsam dahilinde değil. SPF TXT kaydını tekrar kontrol edin.
  • DKIM imzası doğrulanamıyor, dkim._domainkey TXT kaydı eksik, henüz yayılma sürecinde veya hatalı biçimlendirilmiş. En sık karşılaşılan hata budur.
  • PTR kaydı yok / PTR uyuşmazlığı, ters DNS (reverse DNS) sorgusu mail.example.com adresine çözümlenmiyor. Sağlayıcınız üzerinden düzeltin.
  • Blok listesinde yer alıyor, IP adresinizin geçmiş itibarı. Listeden çıkarılma talebinde bulunun veya daha temiz bir IP adresi talep edin.

Puanınız 10/10 olana kadar Gmail veya Outlook gibi servislere gerçek e-posta göndermeyin. Düşük bir puan ve yeni bir IP adresi, alan adınızın daha ilk günden işaretlenmesine (flagged) neden olur.

Adım 8, Gerçek bir e-posta istemcisi bağlama

Thunderbird, Apple Mail veya telefonunuzu bu ayarları kullanarak sunucuya yönlendirin. Sunucu ana bilgisayar adı (host) hepsi için mail.example.com şeklindedir:

  • IMAP: port 993, SSL/TLS (veya STARTTLS ile 143)
  • SMTP gönderimi: port 465, SSL/TLS (veya STARTTLS ile 587)
  • Kullanıcı adı: tam e-posta adresi, you@example.com
  • Parola: belirlediğiniz posta kutusu parolası

İstemci postalarını asla 25 numaralı port üzerinden göndermeyin; bu port yalnızca sunucudan sunucuya iletişim içindir. mailcow bu portta kimlik doğrulamalı gönderime izin vermez ve bu porta yönlendirilen istemciler reddedilir. Eğer bir istemci Relay access denied hatası veriyorsa, 25 numaralı port üzerinden veya kimlik doğrulaması olmadan gönderim yapmaya çalışıyordur; ayarları posta kutusu kimlik bilgilerinizle 465 veya 587 numaralı portlara geçirin.

Adım 9, Gerçekten önemli olan verileri yedekleyin

mailcow, tüm durum bilgisi içeren (stateful) birimleri anlık görüntü (snapshot) olarak alan bir yedekleme betiği ile gelir. Bu betiği harici bir diske veya bağlı bir uzak dizine çalıştırın:

sudo MAILCOW_BACKUP_LOCATION=/opt/mailcow-backups \
  ./helper-scripts/backup_and_restore.sh backup all

all altı farklı öğeyi yakalar; bunlardan herhangi birinin kaybı veri kaybı anlamına gelir: vmail (gerçek posta kutuları), crypt (vmail verilerini şifreleyen anahtarlar; vmail olmadan işe yaramazlar), mysql (alan adlarını, kullanıcıları, takma adları ve ayarları tutan MariaDB), redis (kuyruk ve önbellek durumu), rspamd (öğrenilmiş spam/ham verileri) ve postfix (posta kuyruğu). Bu betik, sıkıştırılmış arşivler oluşturan bir yardımcı container içinde çalışır; böylece stack canlıyken bile yedekler tutarlı kalır. Bunu her gece çalışan bir cron job ile otomatize edin ve eski yedekleri temizlemek için --delete-days 14 parametresini ekleyin. Çalışmayı durduran bir cron job sessizce başarısız olur; bu nedenle betiğin çıkış durumunu (exit status) fark edebileceğiniz bir yere gönderin; kendi barındırdığınız bir ntfy sunucusu, aynı cron girdisinden tek satırlık bir curl komutu ile hata bildirimini gerçekleştiği gece telefonunuza iletebilir. Geri yükleme işlemi, anlık görüntüleri listeleyen ve hangisini geri getireceğinizi seçmenize olanak tanıyan restore parametresi ile aynı betik üzerinden yapılır. Geri yükleme testi yapmadığınız bir yedek, yedek değil sadece bir temennidir; boş bir VPS üzerinde bir deneme çalışması yapın.

Adım 10, Düzenli güncelleme planı

mailcow güncellemeleri, yeni kodu çeken, mailcow.conf üzerinde migrasyon gerçekleştiren, imajları önceden yükleyen ve container'ları sırasıyla yeniden başlatan kendi betiği aracılığıyla yapılır:

cd /opt/mailcow-dockerized
sudo ./update.sh --check   # reports whether an update exists, changes nothing
sudo ./update.sh           # applies it

Öncelikle yedek alın (Adım 9), çünkü şema migrasyonunu geri almak zordur. Güncellemeler sık yayınlanır ve internete açık daemon'lar için güvenlik yamaları içerir, bu nedenle bir posta sunucusunun güncellemelerini aylarca aksatmayın. Eğer bir güncelleme herhangi bir container'ın sağlıksız durumda kalmasına neden olursa, sudo docker compose logs --tail=50 <service>-mailcow yeniden ayağa kalkamayan daemon'ın adını belirtir.

Sıkılaştırma üzerine bir not

mailcow, posta ve web posta portlarına yönelik saldırı yapan IP adreslerini engelleyen kendi netfilter servisini (netfilter-mailcow) çalıştırır; bu nedenle posta tarafı kutudan çıktığı haliyle korunmaktadır. Bu durum, ana makine üzerindeki SSH servisini kapsamaz; SSH hala dış dünyaya açıktır ve kaba kuvvet (brute-force) saldırılarına maruz kalmaya devam eder. Bu kurulumu SSH kimlik doğrulama günlüğünü izleyen Fail2ban ve yalnızca anahtar tabanlı giriş yöntemiyle birlikte kullanın. mailcow yönetici arayüzünü güçlü bir parola ile koruyun ve ideal olarak genel internete kapatın veya bir VPN arkasında tutun.

Hata modları ve kesin dizeler

Posta kuyruğa alınıyor ancak iletilmiyor. sudo docker compose exec postfix-mailcow postqueue -p komutunu çalıştırın veya yönetici arayüzündeki posta kuyruğunu inceleyin; girdiler, Postfix bunları geri çevirene kadar beş güne kadar ertelenmiş durumda bekler ve şu hatayı verir:

status=deferred (connect to gmail-smtp-in.l.google.com[142.250.x.x]:25: Connection timed out)

Bu durum neredeyse her zaman servis sağlayıcınız tarafından 25 numaralı giden portun engellenmesinden kaynaklanır (Adım 1). Kendi sunucu güvenlik duvarınızdaki bir giden kuralı da aynı zaman aşımına neden olur, bu yüzden önce bunu eleyin; sunucu tarafında bir sorun yoksa, yapılandırma değişikliği çözüm sağlamaz, bir destek talebi oluşturun. Sorun DNS veya TLS kaynaklı değildir; belirleyici işaret, uzak bir MX sunucusuna karşı 25 numaralı portta alınan timed out hatasıdır.

Gmail her şeyi spam olarak işaretliyor veya geri çeviriyor. Gmail'de iletiyi açın, "Orijinali göster" seçeneğine tıklayın ve kimlik doğrulama sonuçlarını okuyun. dkim=fail veya dkim=none hatası, dkim._domainkey TXT kaydınızın eksik, hatalı veya henüz yayılmamış olduğu anlamına gelir; ARC/DKIM sayfasında gösterilen değeri tam olarak yeniden yayınlayın ve TTL süresinin dolmasını bekleyin. spf=fail hatası, SPF/MX kayıtlarınızın IP adresinizi kapsamadığı anlamına gelir. Hizalama her şeydir; tek bir kontrolün başarısız olması, iletinin spam klasörüne düşmesi için yeterlidir.

Büyük sağlayıcılar bağlantıyı reddediyor. Geri dönen iletiler veya Postfix günlükleri, Gmail'in PTR reddini içerir:

550-5.7.25 [10.0.0.10] The IP address sending this message does not have a PTR
550-5.7.25 record setup, or the corresponding forward DNS entry does not match
550 5.7.25 the sending IP. As a policy, Gmail does not accept messages from IPs
550 5.7.25 with missing PTR records.

550 5.7.25 kodu, eksik veya eşleşmeyen ters DNS (reverse DNS) anlamına gelir. Sağlayıcınız üzerinden IP adresiniz için PTR kaydını mail.example.com olarak ayarlayın (Adım 2). İleri (A) ve ters (PTR) kayıtlar birbiriyle uyumlu olmalı ve her ikisi de mailcow'un diğer sunuculara kendini tanıtırken kullandığı ana bilgisayar adını içermelidir.

Tarayıcı, geçmeyen bir sertifika uyarısı gösteriyor. acme-mailcow container'ı gerçek bir sertifika alamadı. Günlük kaydını kontrol edin:

sudo docker compose logs acme-mailcow | tail -n 40

Cannot validate any hostnames, skipping Let's Encrypt for 1 hour. gibi bir satır veya bir doğrulama (challenge) hatası, 80 numaralı portun internetten erişilemez olduğu veya A kaydının bu sunucuyu işaret etmediği anlamına gelir. Eğer bir AAAA kaydı yayınladıysanız, onu da kontrol edin: mailcow, doğrulama işlemini önce AAAA kaydına göre yapar ve bir tane mevcut olduğunda A kaydı kontrolünü atlar; bu nedenle yanlış bir AAAA kaydı veya 80 numaralı porta ulaşamayan bir IPv6 yolu, doğru bir A kaydı olsa bile doğrulamayı başarısız kılar. mail.example.com adresinin sunucuya çözümlendiğini doğrulayın, sunucu güvenlik duvarınız üzerinden 80 ve 443 numaralı portları açın ve başka hiçbir servisin bu portları kullanmadığından emin olun. Sorunu giderdikten sonra, bir saatlik bekleme süresinin dolmasını beklemek yerine sudo docker compose restart acme-mailcow komutuyla istemciyi yeniden başlatın.

FAQ

E-posta barındırmak (self-hosting) gerçekten buna değer mi?

Veri sahipliği, sınırsız takma ad ve tam kontrol istiyorsanız evet; mailcow size bir VPS fiyatına profesyonel bir yığın sunar. Ancak e-posta teslim edilebilirliği sürekli bir iştir: IP itibarı, DNS uyumu ve kara liste takibi asla tam olarak bitmez. Bir gün boyunca birinin spam klasöründe kalmanın size maliyet getireceği kritik iş adresleri için yönetilen bir servis sağlayıcı kullanmak daha pragmatik bir tercihtir. Kontrolü kolaylığa tercih ediyorsanız ve sunucuyla gerçekten ilgilenecekseniz kendi sunucunuzu barındırın. Eğer istediğiniz şey özellikle e-posta değil de verilerinizin başkalarının sunucularından çıkmasıysa, kimsenin müdahale edemeyeceği bir servisle başlayın: bir fotoğraf kütüphanesinin teslim edilebilirlik sorunu yoktur ve PhotoPrism ve Immich karşılaştırmamız, aynı tür VPS üzerinde bu kurulum için gereken RAM alt sınırlarını ve yedekleme komutlarını kapsar.

25 numaralı giden portun engelli olduğunu nasıl anlarım?

Sunucudan nc -vz -w 5 gmail-smtp-in.l.google.com 25 komutunu çalıştırın. "succeeded!" ifadesi portun açık olduğu anlamına gelir; duraklamadan sonra gelen bir timed out hatası ise portun engellendiğini gösterir. Kendi tarafınızda bir giden güvenlik duvarı kuralınız yoksa, bu durum servis sağlayıcınızdan kaynaklanıyordur. Bu, kendi barındırdığınız bir sunucunun e-posta alıp gönderememesinin en yaygın nedenidir ve servis sağlayıcı engeli için tek çözüm sağlayıcının portu açmasıdır; hiçbir yerel ayar değişikliği bunu düzeltmez.

Postalarım neden hala Gmail'in spam klasörüne düşüyor?

Neredeyse her zaman bozuk bir kimlik doğrulama zinciri söz konusudur. Gmail'de "Orijinali göster" seçeneğini kullanın ve spf=pass, dkim=pass ve dmarc=pass değerlerini kontrol edin. Bir dkim=fail hatası, eksik veya hatalı bir dkim._domainkey TXT kaydına işaret eder; PTR uyuşmazlığı veya gönderim geçmişi olmayan yeni bir IP de e-postaların spam'e düşmesine neden olur. Önce mail-tester.com üzerinde 10/10 puanına ulaşın, ardından IP'nizi yavaşça ısıtın; ilk günden yüksek hacimli gönderim yapmak yerine, günlük birkaç mesajla başlayıp zamanla artırın.

Tam olarak neleri yedeklemem gerekiyor?

backup_and_restore.sh backup all komutunu çalıştırın ve tüm yedek setini sunucunun dışında tutun. Bu komut vmail (posta kutuları), crypt (bunların şifresini çözen anahtarlar), MariaDB veritabanı (alan adları, kullanıcılar, takma adlar, ayarlar), Redis, Rspamd'in öğrendiği veriler ve Postfix kuyruğunu kapsar. Crypt birimi insanların gözden kaçırdığı kısımdır; o olmadan vmail yedeği okunamaz şifreli metinlerden ibarettir. En az bir kez boş bir sunucuda geri yükleme testi yapın.

mailcow'u 2 GB RAM'li bir VPS üzerinde çalıştırabilir miyim?

Rahat bir şekilde çalıştıramazsınız. generate_config.sh, 2.5 GiB altındaki sistemlerde ClamAV'yi devre dışı bırakmayı önerir; ancak ClamAV kapalı olsa bile Rspamd, Dovecot, MariaDB ve yığının geri kalanı bellek için yarışır. Bu durumda gerçek bir yük altında swap kullanımına düşersiniz ve OOM (Out of Memory) nedeniyle süreçleriniz sonlandırılır. Kararlı bir tek kullanıcılı kurulum için 6 GiB RAM ve 1 GiB swap alanını taban seviye olarak kabul edin; ikiden fazla kişi kullanmaya başladığında ise 8 GiB seviyesine geçin.