E-posta bülteni, hâlâ elinizdeki en değerli iletişim kanallarından biridir. Sosyal medya algoritmalarının aksine, abone listeniz doğrudan sizindir; kimseye kira ödemeden, kime ne zaman ulaşacağınıza siz karar verirsiniz. Ne var ki liste büyüdükçe iş, bir e-posta istemcisinden toplu gönderim yapmakla çözülemeyecek kadar ciddileşir: abonelik onayları, listeden çıkma (unsubscribe) talepleri, geri dönen (bounce) adresler, açılma ve tıklanma istatistikleri derken karşınıza gerçek bir yazılım ihtiyacı çıkar.
İşte bu noktada çoğu kullanıcı Mailchimp gibi bulut servislerine yönelir. Ancak abone sayısı büyüdükçe bu servislerin faturası hızla kabarır ve verileriniz üçüncü bir tarafın sunucusunda tutulur. Listmonk tam da bu iki soruna yanıt veren bir alternatiftir: kendi sunucunuzda çalışan, tek bir binary dosyadan ibaret, milyonlarca aboneyi ve yüksek gönderim hacmini kaldırabilen açık kaynak bir bülten ve liste yönetim aracıdır. Bu rehberde Listmonk'un ne olduğunu, listeleri ve segmentasyonu nasıl yönettiğini, Docker ile kurulumunu, SMTP bağlamayı, teslim edilebilirlik için gereken DNS ayarlarını ve API ile otomasyonu adım adım ele alıyoruz.
Listmonk Nedir ve Ne İşe Yarar#
Listmonk, Go dilinde yazılmış, arka planda PostgreSQL kullanan, kendi kendine yeten (self-hosted) bir e-posta bülteni ve abone yönetim uygulamasıdır. En dikkat çeken özelliği tek bir binary dosya olarak dağıtılmasıdır; harici bir çalışma zamanı (runtime), yorumlayıcı ya da karmaşık bir bağımlılık zinciri gerektirmez. Bu da onu hem kurması kolay hem de kaynak tüketimi açısından oldukça verimli kılar. Mütevazı bir sanal sunucuda bile saatte yüz binlerce e-posta gönderebilecek bir performansa sahiptir.
Uygulamanın temelde üç işi vardır. Birincisi abone ve liste yönetimi: kimlerin hangi listede olduğunu, abonelik durumlarını ve her aboneye ait ek bilgileri tutar. İkincisi kampanya gönderimi: HTML ya da düz metin bültenleri hazırlar, kuyruğa alır ve tanımladığınız SMTP sunucusu üzerinden yollar. Üçüncüsü raporlama: gönderilen her kampanya için açılma, tıklanma, listeden çıkma ve geri dönme oranlarını gösterir. Tüm bu işler, tarayıcıdan eriştiğiniz sade bir yönetim panelinden yürütülür.
Listmonk'un self-hosted olması yalnızca bir teknik ayrıntı değil, doğrudan bir sahiplik meselesidir. Abone e-postaları, açılma verileri ve gönderim geçmişi sizin sunucunuzda kalır; hiçbir veri zorunlu olarak bir bulut sağlayıcının sistemlerinden geçmez. KVKK gibi veri koruma düzenlemelerine uyum söz konusu olduğunda, verinin nerede tutulduğu ve kimin eriştiği üzerindeki bu doğrudan kontrol ciddi bir avantajdır.
Mailchimp ve Diğer Bulut Servislerinden Farkı#
Listmonk'u değerlendirirken en sık sorulan soru, "Neden Mailchimp yerine bunu kurayım?" olur. Yanıt büyük ölçüde ölçek, maliyet ve veri sahipliği önceliklerinize bağlıdır. Aşağıdaki tablo temel farkları özetliyor.
| Özellik | Listmonk | Mailchimp / Bulut Servisler |
|---|---|---|
| Barındırma | Kendi sunucunuz (self-host) | Yalnızca sağlayıcının bulutu |
| Lisans | Açık kaynak (AGPL) | Kapalı kaynak |
| Fiyatlandırma | Sabit sunucu maliyeti | Abone/gönderim başına artan ücret |
| Veri sahipliği | Tamamen sizde | Sağlayıcıda |
| Abone limiti | Donanımınız kadar | Plan sınırlarına bağlı |
| E-posta altyapısı | Kendi SMTP'niz veya harici sağlayıcı | Dahili, kapalı |
| Özelleştirme | Kaynak kodu düzeyinde | Panelin izin verdiği kadar |
Bu tablodan çıkan en önemli sonuç şudur: Listmonk gönderim altyapısını (SMTP) kendisi içermez. Yani e-postaların gerçekten dağıtılması için bir SMTP sunucusu tanımlamanız gerekir. Bu ilk bakışta bir eksiklik gibi görünse de aslında bir esnekliktir; kendi posta sunucunuzu, bir kurumsal SMTP hizmetini ya da özel bir gönderim sağlayıcısını serbestçe seçebilirsiniz. Bulut servisler ise gönderim altyapısını kapalı bir kutu olarak sunar, karşılığında da gönderim başına ücret alır.
Maliyet tarafında fark özellikle liste büyüdükçe belirginleşir. Bulut servislerin çoğu 10 bin, 50 bin, 100 bin abone gibi kademelerde fiyatı katlar. Listmonk'ta ise abone sayısı arttıkça yalnızca sunucunuzun kaynak ihtiyacı artar; yazılım için ek bir lisans kalemi ödemezsiniz. Yüz binlerce aboneli bir listeyi orta ölçekli bir sanal sunucuda rahatça çalıştırabilirsiniz.
Abone Listeleri ve Segmentasyon#
Listmonk'ta her şey listeler etrafında döner. Bir liste, aboneleri gruplamanın temel birimidir; örneğin "Haftalık Bülten", "Ürün Duyuruları" ve "Kampanyalar" ayrı listeler olabilir. Her liste iki temel özellikle tanımlanır: görünürlük (public/private) ve onay tipi (single opt-in / double opt-in). Double opt-in listelerde abone, kayıt olduktan sonra e-postasına gelen onay bağlantısına tıklamadan listeye tam olarak dahil edilmez. Bu, hem liste kalitesini hem de yasal uyumu güçlendiren önerilen yöntemdir.
Listmonk'un asıl gücü segmentasyondadır. Her abonenin adı ve e-postası dışında, attribs adı verilen bir JSON alanında istediğiniz ek bilgileri saklayabilirsiniz: şehir, üyelik tipi, son satın alma tarihi, ilgi alanı gibi. Kampanya gönderirken bu alanlar üzerinden SQL benzeri sorgularla hedef kitlenizi daraltabilirsiniz. Örneğin yalnızca İstanbul'daki premium üyelere gönderim yapmak isterseniz, kampanyanın gelişmiş sorgu (advanced query) alanına şöyle bir ifade yazarsınız:
subscribers.attribs->>'city' = 'İstanbul'
AND subscribers.attribs->>'plan' = 'premium'
Bu sorgu doğrudan PostgreSQL üzerinde çalışır; dolayısıyla veritabanının tüm sorgu gücünü kullanabilirsiniz. Sayısal karşılaştırmalar, tarih filtreleri ya da birden çok koşulun birleşimi mümkündür. Aynı yaklaşımla, örneğin son 30 gündür hiç e-posta açmamış aboneleri hedefleyip bir "geri kazanım" kampanyası kurabilirsiniz.
Aboneleri sisteme eklemenin birkaç yolu vardır. Yönetim panelinden tek tek ekleyebilir, CSV dosyasıyla toplu içe aktarabilir ya da web sitenize koyacağınız bir abonelik formuyla otomatik olarak toplayabilirsiniz. Listmonk, her liste için hazır bir kayıt formu ve gömülü bir "abonelik yönetimi" sayfası sunar; aboneleriniz buradan tercihlerini güncelleyebilir veya listeden çıkabilir. Listeden çıkma bağlantısı her e-postaya otomatik eklenir ki bu hem yasal bir zorunluluk hem de teslim edilebilirlik açısından kritiktir.
Kampanya Şablonları ve İçerik Oluşturma#
Kampanya, Listmonk'ta gönderdiğiniz her bir bültenin karşılığıdır. Yeni bir kampanya oluştururken önce bir şablon seçersiniz. Şablonlar, bültenlerinizin ortak dış çerçevesini (logo, başlık, alt bilgi, renk düzeni) tanımlar; böylece her kampanyada bu tasarımı sıfırdan kurmazsınız. İçerik ise şablonun içine yerleşir. Listmonk, içerik hazırlamak için hem sürükle-bırak mantığında bir zengin metin editörü hem de doğrudan HTML yazma seçeneği sunar; teknik kullanıcılar için ham HTML tam kontrol sağlar.
Şablonlar Go'nun metin şablonlama motorunu kullanır; bu da içeriğe dinamik alanlar yerleştirebileceğiniz anlamına gelir. Her aboneye ismiyle hitap etmek ya da bir özniteliğini metne gömmek için şablon değişkenlerini kullanırsınız:
<p>Merhaba {{ .Subscriber.Name }},</p>
<p>{{ .Subscriber.Attribs.city }} şehrindeki aboneler için özel bir duyurumuz var.</p>
<p>
<a href="{{ .Campaign.URL }}">Detaylar</a> —
Listeden çıkmak için <a href="{{ UnsubscribeURL }}">buraya tıklayın</a>.
</p>
Bu yapı sayesinde tek bir kampanya, her aboneye kişiselleştirilmiş biçimde ulaşır. UnsubscribeURL gibi yerleşik fonksiyonlar, listeden çıkma ve tarayıcıda görüntüleme gibi bağlantıları otomatik üretir. Kampanyayı yollamadan önce test gönderimi yapıp kendi adresinize bir örnek çekmeniz, hem tasarımı hem de değişkenlerin doğru dolduğunu görmek açısından güçlü bir alışkanlıktır.
Kampanyaları anında yollamak zorunda değilsiniz; ileri bir tarihe zamanlayabilir ya da gönderim hızını (dakikada kaç e-posta) sınırlayabilirsiniz. Gönderim hızını kısıtlamak, hem SMTP sağlayıcınızın limitlerini aşmamak hem de aniden büyük hacimli gönderimle spam filtrelerini tetiklememek için önemlidir. Kampanya gönderilirken panel, gerçek zamanlı olarak kaç e-postanın yollandığını ve kuyrukta ne kaldığını gösterir.
Docker ile Kurulum#
Listmonk'u kurmanın en pratik yolu Docker'dır; çünkü hem uygulamayı hem de ihtiyaç duyduğu PostgreSQL veritabanını tek bir tanım dosyasıyla ayağa kaldırır. Docker mantığına yeniyseniz Docker başlangıç rehberimize göz atmanız faydalı olur. Aşağıda üretim için sadeleştirilmiş bir docker-compose.yml örneği yer alıyor:
services:
db:
image: postgres:16-alpine
restart: unless-stopped
environment:
POSTGRES_USER: listmonk
POSTGRES_PASSWORD: cok-guclu-bir-parola
POSTGRES_DB: listmonk
volumes:
- ./data/postgres:/var/lib/postgresql/data
app:
image: listmonk/listmonk:latest
restart: unless-stopped
ports:
- "9000:9000"
depends_on:
- db
environment:
LISTMONK_app__address: "0.0.0.0:9000"
LISTMONK_db__host: db
LISTMONK_db__user: listmonk
LISTMONK_db__password: cok-guclu-bir-parola
LISTMONK_db__database: listmonk
command: ["sh", "-c", "./listmonk --install --idempotent --yes && ./listmonk --upgrade --yes && ./listmonk"]
Bu dosyayı hazırladıktan sonra ilk çalıştırma tek komuttur:
docker compose up -d
--install bayrağı veritabanı şemasını kurar; --idempotent ise şema zaten varsa hata vermeden geçmesini sağlar, bu yüzden yeniden başlatmalarda sorun çıkmaz. Konteynerler ayağa kalktığında Listmonk paneline http://sunucu-ip:9000 adresinden erişirsiniz. İlk açılışta uygulama sizi bir kurulum ekranıyla karşılar ve süper yönetici hesabını burada oluşturursunuz. Panelin dışarıya açık bir portta çalışacağını unutmayın; bu yüzden üretimde önüne bir ters proxy (reverse proxy) koyup HTTPS ile yayınlamanız gerekir. Nginx ile basit bir örnek şöyledir:
server {
listen 443 ssl;
server_name bulten.ornek.com;
ssl_certificate /etc/letsencrypt/live/bulten.ornek.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/bulten.ornek.com/privkey.pem;
location / {
proxy_pass http://127.0.0.1:9000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
SSL sertifikasını ücretsiz almak için Let's Encrypt rehberimizi izleyebilirsiniz. Bu kurulum adımlarıyla tek tek uğraşmak istemiyorsanız, Docker, SSL ve sunucu yapılandırmasının hazır geldiği Clou.TR App Center çözümleri işinizi belirgin biçimde kısaltır.
SMTP Bağlama ve Gönderim Ayarları#
Listmonk kurulduğunda henüz tek bir e-posta gönderemez; çünkü daha önce belirttiğimiz gibi gönderim altyapısını kendisi barındırmaz. E-postaların gerçekten dağıtılması için panelde Ayarlar → SMTP bölümüne bir posta sunucusu tanımlarsınız. Buraya bir SMTP sağlayıcısının bilgilerini girebilirsiniz: kendi Postfix sunucunuz, bir kurumsal e-posta hizmeti ya da toplu gönderim için tasarlanmış bir SMTP servisi olabilir.
Tipik bir SMTP yapılandırması şu alanlardan oluşur:
| Alan | Örnek Değer | Açıklama |
|---|---|---|
| Host | mail.ornek.com | SMTP sunucu adresi |
| Port | 587 | STARTTLS için standart port |
| Auth protocol | LOGIN | Kimlik doğrulama yöntemi |
| Username | [email protected] | Gönderici hesabı |
| Password | (uygulama parolası) | Hesabın SMTP parolası |
| TLS | STARTTLS | Şifreli bağlantı |
| Max connections | 10 | Eşzamanlı bağlantı sayısı |
Buradaki Max connections ve gönderim hızı ayarları, kampanyaların ne kadar hızlı yollanacağını belirler. Sağlayıcınızın saatlik/dakikalık limitlerini öğrenip bu değerleri buna göre ayarlamanız gerekir; aksi halde sunucu bağlantıları reddetmeye başlar ve gönderim yarıda kalır. Ayarları girdikten sonra panelin sunduğu test e-postası düğmesiyle bağlantıyı hemen doğrulayın; bu adım, gerçek bir kampanyaya girişmeden önce yapılandırmanın çalıştığını görmenin en hızlı yoludur.
Gönderilen e-postaların geri dönenlerini (bounce) işlemek için Listmonk ayrıca bir bounce yapılandırması sunar. Böylece kalıcı olarak teslim edilemeyen adresler otomatik olarak işaretlenir ve listeniz zamanla kendini temizler. Bu, teslim edilebilirlik puanınızı korumanın önemli bir parçasıdır; çünkü sürekli geçersiz adreslere gönderim yapmak, gönderici itibarınızı düşürür.
Teslim Edilebilirlik için DNS Ayarları#
E-posta göndermenin en zor kısmı, mesajların gerçekten gelen kutusuna düşmesidir; spam klasörüne değil. Bu, büyük ölçüde alan adınızın DNS kayıtlarında yaptığınız kimlik doğrulama ayarlarına bağlıdır. Üç kayıt burada belirleyicidir: SPF, DKIM ve DMARC. Bu üçünün ne olduğunu ve nasıl kurulduğunu ayrıntılı biçimde SPF, DKIM ve DMARC rehberimizde ele aldık; burada Listmonk bağlamında özetliyoruz.
SPF (Sender Policy Framework), hangi sunucuların sizin alan adınız adına e-posta gönderebileceğini belirtir. SMTP sağlayıcınızın sunucularını yetkilendiren bir TXT kaydı eklersiniz:
ornek.com. IN TXT "v=spf1 include:_spf.saglayici.com -all"
DKIM (DomainKeys Identified Mail), giden e-postaları kriptografik olarak imzalar; alıcı sunucu bu imzayı DNS'teki açık anahtarla doğrular. Sağlayıcınız size bir DKIM anahtarı verir ve bunu yine bir TXT kaydı olarak eklersiniz:
sec1._domainkey.ornek.com. IN TXT "v=DKIM1; k=rsa; p=MIGfMA0GCS..."
DMARC, SPF ve DKIM başarısız olduğunda alıcının ne yapması gerektiğini söyler ve size raporlama sağlar. Başlangıç için gözlem amaçlı yumuşak bir politikayla başlamak akıllıcadır:
_dmarc.ornek.com. IN TXT "v=DMARC1; p=none; rua=mailto:[email protected]"
Bu üç kayıt doğru kurulduğunda, gönderdiğiniz bültenlerin gelen kutusuna ulaşma oranı belirgin biçimde artar. Ek olarak, listeden çıkma bağlantısını her e-postaya eklemek (Listmonk bunu otomatik yapar), aynı içeriği çok kısa aralıklarla bombardıman etmemek ve listenizi temiz tutmak da teslim edilebilirliğin ayrılmaz parçalarıdır. Profesyonel e-posta altyapısı ihtiyaçlarınız için e-posta çözümlerimize de göz atabilirsiniz.
API ile Otomasyon ve Entegrasyon#
Listmonk'un panelden yapabildiğiniz hemen her işlemi bir REST API üzerinden de yapabilirsiniz. Bu, aracı diğer sistemlerinizle entegre etmenin kapısıdır: bir müşteri sitenize kayıt olduğunda otomatik abone eklemek, bir sipariş tamamlandığında işlemsel (transactional) e-posta yollamak ya da CRM'inizden gelen verilerle listeleri güncel tutmak gibi. API çağrıları, panelde oluşturduğunuz bir API kullanıcısı ve ona ait token ile kimlik doğrulaması yapar.
Örneğin bir aboneyi programatik olarak eklemek için:
curl -u "api_user:TOKEN" \
-H "Content-Type: application/json" \
-X POST https://bulten.ornek.com/api/subscribers \
-d '{
"email": "[email protected]",
"name": "Yeni Abone",
"status": "enabled",
"lists": [3],
"attribs": { "city": "İstanbul", "plan": "premium" }
}'
Bir sipariş onayı ya da parola sıfırlama gibi işlemsel e-postalar için ise /api/tx uç noktasını kullanırsınız; önceden tanımladığınız bir şablona veri geçirerek tek bir alıcıya kişiselleştirilmiş mesaj yollarsınız:
curl -u "api_user:TOKEN" \
-H "Content-Type: application/json" \
-X POST https://bulten.ornek.com/api/tx \
-d '{
"subscriber_email": "[email protected]",
"template_id": 5,
"data": { "order_id": "TR-10482", "total": "749,90 TL" }
}'
Bu API'yi doğrudan kodla çağırabileceğiniz gibi, kod yazmadan görsel bir otomasyon aracıyla da bağlayabilirsiniz. Örneğin n8n gibi bir iş akışı otomasyonu aracıyla, "web formuna kayıt geldiğinde Listmonk'a abone ekle" ya da "e-ticaret sisteminde sipariş tamamlandığında teşekkür e-postası gönder" gibi akışları birkaç dakikada kurabilirsiniz. Böylece Listmonk, izole bir bülten aracı olmaktan çıkıp tüm dijital altyapınızın e-posta motoru haline gelir. Bu tür entegrasyonların ve kampanya verilerinizin sürekliliği için düzenli yedekleme almayı da ihmal etmeyin.
Sıkça Sorulan Sorular#
Listmonk ücretsiz mi?#
Evet, Listmonk açık kaynak bir yazılımdır (AGPL lisansıyla dağıtılır) ve kendi sunucunuzda çalıştırdığınızda yazılım için herhangi bir lisans ücreti ödemezsiniz. Tek maliyetiniz, üzerinde çalıştığı sunucu ve e-postaları gönderdiğiniz SMTP hizmetidir. Bu yapısıyla, abone sayısı büyüdükçe faturası katlanan bulut servislere kıyasla uzun vadede belirgin biçimde ekonomiktir.
Listmonk e-postaları kendisi mi gönderiyor?#
Hayır, Listmonk e-postaları doğrudan kendisi dağıtmaz; bir SMTP sunucusuna ihtiyaç duyar. Panelde tanımladığınız SMTP hizmeti (kendi posta sunucunuz ya da bir gönderim sağlayıcısı) üzerinden e-postaları yollar. Bu ayrım aslında bir esneklik sağlar, çünkü gönderim altyapınızı ihtiyaçlarınıza ve bütçenize göre serbestçe seçebilirsiniz.
Listmonk kaç aboneyi kaldırabilir?#
Listmonk yüksek performans için tasarlanmıştır ve milyonlarca aboneyi rahatça yönetebilir. Gerçek sınır, yazılımdan çok sunucunuzun kaynaklarına ve SMTP sağlayıcınızın gönderim limitlerine bağlıdır. Orta ölçekli bir sanal sunucuda yüz binlerce aboneli listelerle sorunsuz çalışabilir; asıl darboğaz genellikle e-posta gönderim hızıdır, veritabanı değil.
Mailchimp'ten Listmonk'a nasıl geçebilirim?#
Mevcut abonelerinizi Mailchimp'ten CSV formatında dışa aktarıp Listmonk'un içe aktarma aracıyla toplu olarak yükleyebilirsiniz. İçe aktarırken aboneleri hangi listeye ekleyeceğinizi ve durumlarını seçersiniz; ek alanları (şehir, üyelik tipi gibi) attribs sütunlarına eşleyebilirsiniz. Geçişten sonra teslim edilebilirliği korumak için SPF, DKIM ve DMARC kayıtlarınızı yeni gönderim altyapınıza göre güncellemeyi unutmayın.
Listmonk için hangi sunucu kaynakları yeterli olur?#
Küçük ve orta ölçekli kullanımda 1-2 GB RAM'e sahip bir sanal sunucu çoğu senaryoya rahatça yeter, çünkü Listmonk tek binary olarak çok verimli çalışır. Abone sayısı yüz binleri aştığında veya sık kampanya gönderdiğinizde RAM ve CPU'yu, ayrıca PostgreSQL'in disk performansını artırmanız yerinde olur. Sabit ve öngörülebilir bir performans için SSD tabanlı bir sanal sunucu tercih etmek en sağlıklısıdır.
E-postalarım neden spam klasörüne düşüyor?#
Bunun en yaygın nedeni, alan adınızda SPF, DKIM ve DMARC kayıtlarının eksik ya da hatalı yapılandırılmış olmasıdır. Bu üç kimlik doğrulama kaydı doğru kurulduğunda gelen kutusuna ulaşma oranınız belirgin biçimde artar. Bunun yanında listenizi temiz tutmak, geri dönen adresleri ayıklamak ve içerikte spam tetikleyici kalıplardan kaçınmak da teslim edilebilirliği doğrudan etkiler.
Kapanış#
Listmonk, e-posta bülteni yönetimini kendi kontrolünüze almak isteyenler için olgun, hızlı ve ekonomik bir çözümdür. Tek binary yapısıyla kolay kurulur, milyonlarca aboneyi kaldırır, güçlü segmentasyon sunar ve API'siyle mevcut sistemlerinize sorunsuz entegre olur. Karşılığında sizden istediği tek şey, bir sunucu ve doğru yapılandırılmış bir gönderim altyapısıdır.
Listmonk'u Docker, SSL ve sunucu ayarlarıyla tek tek uğraşmadan çalışır durumda denemek isterseniz Clou.TR App Center üzerinden hazır bir kuruluma hızla geçebilirsiniz. Yüksek hacimli gönderim ve tam kaynak kontrolü için ise sanal sunucu (VDS) seçeneklerimizi inceleyebilir, gönderim öncesi alan adınızın e-posta kimlik doğrulamasını SPF, DKIM ve DMARC rehberimizle sağlama alabilirsiniz. Böylece hem verileriniz sizde kalır hem de bültenleriniz doğru kutuya, gelen kutusuna ulaşır.