API

Mail API

SSH üzerinden bir iRedMail yığını kurun ve benimseyin, posta yönetici panelini çalıştırın (alan adları, posta kutuları, istatistikler, yedeklemeler, DNS, bileşenler) ve webmail'i deploy edin.

Mail API, Alaf Server'ın self-hosted e-posta özelliğini yönetir: SSH üzerinden sunucularınızdan birine bir iRedMail yığını kurar, kurulum sihirbazının ilerlemesini takip eder, ardından çalışan sunucu için bir admin paneli sunar — alan adları, posta kutuları, istatistikler, yedeklemeler, DNS sağlığı ve bileşen bazında kontrol — artı tek tıklamayla bir webmail deploy'u. Dashboard'da bu, E-postalar sayfasıdır.

Yalnızca Self-hosted

Buradaki her route localOnly tarafından korunur ve Alaf Server Cloud'da asla mount edilmez — modül yalnızca self-hosted instancelarda dinamik olarak import edilir. Bir cloud instance'ında bu yollar 404 döndürür.

Temel yol ve auth

Tüm yollar, instance'ınıza göre /api/mail altında yer alır — örn. https://your-host/api/mail/status. alaf server token create ile oluşturulmuş bir personal access token'ı bearer header olarak gönderin (Authorization: Bearer <token>). Dashboard bunun yerine session cookie'nizi kullanır. Detaylar için API genel bakışına ve auth modeline bakın.

Her route sunucu kapsamlıdır

Çoğu yol bir :serverId taşır (veya body'de / ?serverId= ile alır). Alaf Server, her çağrıda sunucunun kuruluşunuza ait olup olmadığını kontrol eder — bir mail_server kutuya SSH düzeyinde erişim sağlar, bu nedenle kuruluşunuz dışındaki bir serverId mevcut olmayan bir sunucudan ayırt edilemez şekilde 404 döndürür.

Endpoints

Kurulum sihirbazı

Metot ve yolİzinNe yapar
GET /api/mail/stepsmail_server:readTüm kurulum adımlarını ve toplam sayıyı listeler.
GET /api/mail/status?serverId=mail_server:readBir sunucu için mevcut kurulum ilerlemesi (sunucu üzerindeki durum dosyasından render edilir).
GET /api/mail/serversmail_server:listAlaf Server'ın posta sağladığı (veya sağlamakta olduğu) her sunucuyu listeler.
DELETE /api/mail/servers/:serverIdmail_server:adminBir sunucuyu yönetmeyi durdurur (yalnızca DB satırını siler; yığını + durum dosyasını sağlam bırakır).
POST /api/mail/scanmail_server:writeMevcut bir iRedMail kurulumu + sunucu üzerindeki durumunu (salt okunur) bir sunucuda araştırır.
POST /api/mail/adoptmail_server:writeOrkestratör durumu kaybolmuş taranmış bir sunucuyu yeniden benimser.
POST /api/mail/setupmail_server:writeKurulum sihirbazını başlatır veya devam ettirir — bir SSE stream'i döndürür.
POST /api/mail/setup/cancelmail_server:writeÇalışan kurulumu iptal eder.
POST /api/mail/setup/dns-ackmail_server:writeDNS (DKIM) kayıtlarını yapılandırılmış olarak işaretler, DNS kapısını serbest bırakır.
POST /api/mail/setup/ptr-ackmail_server:writeReverse-DNS (PTR) kayıtlarını yapılandırılmış olarak işaretler, PTR kapısını serbest bırakır.
POST /api/mail/setup/resetmail_server:adminSunucu üzerindeki durum dosyasını siler (iRedMail'e dokunmaz).

Kurulum sonrası

Metot ve yolİzinNe yapar
GET /api/mail/health/:serverIdmail_server:readHer mail-core daemon'ının canlı systemd durumunu gösterir.
POST /api/mail/credentials/postmastermail_server:writePostmaster hesabının parolasını değiştirir.

Admin — alan adları

Metot ve yolİzinNe yapar
GET /api/mail/admin/:serverId/domainsmail_server:listSunucudaki posta alan adlarını listeler.
POST /api/mail/admin/:serverId/domainsmail_server:writeBir posta alan adı ekler.
GET /api/mail/admin/:serverId/domains/:domainmail_server:readBir alan adının yapılandırmasını alır.
PATCH /api/mail/admin/:serverId/domains/:domainmail_server:writeBir alan adını günceller (kotalar, limitler, aktif bayrağı).
DELETE /api/mail/admin/:serverId/domains/:domainmail_server:adminBir alan adını siler (posta kutularını da kaldırmak için ?cascade=true ekleyin).
GET /api/mail/admin/:serverId/domains/:domain/dependentsmail_server:readBir alan adına bağlı posta kutularını/alias'ları sayar.
GET /api/mail/admin/:serverId/domains/:domain/dnsmail_server:readEk bir alan adı için DNS kayıtları + yayın durumu.
POST /api/mail/admin/:serverId/domains/:domain/dns/acknowledgemail_server:writeBir alan adının DNS kayıtlarının yayınlandığını onaylar.
GET /api/mail/admin/:serverId/domains-dns/pendingmail_server:readDNS'i hala bekleyen ek alan adlarını listeler.

Admin — posta kutuları

Metot ve yolİzinNe yapar
GET /api/mail/admin/:serverId/mailboxes?domain=mail_server:listBir alan adındaki posta kutularını listeler.
POST /api/mail/admin/:serverId/mailboxesmail_server:writeBir posta kutusu oluşturur.
GET /api/mail/admin/:serverId/mailboxes/:emailmail_server:readBir posta kutusunu alır.
PATCH /api/mail/admin/:serverId/mailboxes/:emailmail_server:writeBir posta kutusunu günceller (ad, parola, kota, aktif).
DELETE /api/mail/admin/:serverId/mailboxes/:emailmail_server:adminBir posta kutusunu siler (maildir'ini temizlemek için ?hard=true ekleyin; varsayılan olarak soft delete yapılır).

Admin — istatistikler, yedeklemeler, DNS, bileşenler

Metot ve yolİzinNe yapar
GET /api/mail/admin/:serverId/statsmail_server:readToplu sayımlar (alan adları, posta kutuları, depolama).
GET /api/mail/admin/:serverId/backup-policymail_server:readPosta sunucusunun yedekleme politikası (veya null).
POST /api/mail/admin/:serverId/backup-policymail_server:adminYedekleme politikasını oluşturur veya günceller.
GET /api/mail/admin/:serverId/backup-runsmail_server:readPosta sunucusu için son yedekleme çalışmaları.
GET /api/mail/admin/:serverId/dns-scan?domain=mail_server:readCanlı DNS sağlık taraması (MX/SPF/DKIM/DMARC/PTR).
POST /api/mail/admin/:serverId/test-emailmail_server:writeSunucudan bir test e-postası gönderir.
POST /api/mail/admin/:serverId/components/restart-allmail_server:adminHer posta bileşenini yeniden başlatır.
POST /api/mail/admin/:serverId/components/:key/:actionmail_server:adminBir bileşen üzerinde bir eylem (start/stop/restart/…) çalıştırır.
GET /api/mail/admin/:serverId/components/:key/logs?lines=mail_server:readBir bileşenin log'larını takip eder.

Webmail

Metot ve yolİzinNe yapar
GET /api/mail/webmail/targets?serverId=mail_server:readDeploy hedefi seçeneklerini listeler (self-hosted sunucular / cloud).
POST /api/mail/webmail/deploy-projectmail_server:writeBir webmail projesi + deployment oluşturur ve build'i başlatır.

Kurulumu Başlat (veya Devam Ettir)

Bir sunucuya karşı iRedMail kurulum sihirbazını başlatır ve ilerlemeyi Server-Sent Events olarak stream eder. Sihirbaz idempotenttir: önceki bir çalıştırmanın durduğu (veya engellendiği) yerden devam etmek için startStep ile yeniden POST edin. Her instance'ta aynı anda yalnızca bir kurulum çalışabilir.

POST /api/mail/setup

Prop

Type

config isteğe bağlı bir IRedMailConfig'dir:

Prop

Type

curl -N -X POST https://your-host/api/mail/setup \
  -H "Authorization: Bearer $ALAFSERVER_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"serverId":"srv_123","domain":"example.com"}'

Stream, her adım için step_start, log ve step_done olaylarını, ayrıca bu kontrol olaylarını yayar:

  • dns_records / dns_pending — DKIM adımı eklemeniz gereken kayıtları yayınlar, ardından bekler. Kayıtları DNS sağlayıcınıza ekleyin ve POST /api/mail/setup/dns-ack çağrısını yapın, ardından olaydan gelen resumeStep ile /setup adresine yeniden POST edin.
  • ptr_pending — DNS onaylandıktan sonra, sihirbaz reverse-DNS (PTR) için tekrar bekler. PTR kaydını VPS sağlayıcınızda ayarlayın, POST /api/mail/setup/ptr-ack çağrısını yapın ve devam edin.
  • completedomain, webmailUrl ve adminUrl taşır.
  • errormessage ve (devam ettirilebilir olduğunda) resumeStep taşır.

DNS / PTR Onayla

Her ikisi de sunucu üzerindeki durum dosyasında tek bir bayrağı değiştirir, böylece sihirbaz bir sonraki /setup POST'unda kapısını geçebilir. Her ikisi de aynı body'yi alır.

POST /api/mail/setup/dns-ack
POST /api/mail/setup/ptr-ack

Prop

Type

Aynı { serverId } body'si POST /api/mail/scan, POST /api/mail/adopt, POST /api/mail/setup/cancel ve POST /api/mail/setup/reset için geçerlidir.

Mevcut bir kurulumu benimse

Alaf Server bir posta sunucusunun kaydını kaybettiyse (yeniden oluşturulmuş masaüstü, silinmiş DB), sunucuyu tarayın, ardından benimseyin — yeniden kurulum yok, kutuda hiçbir şey değişmez.

POST /api/mail/scan
POST /api/mail/adopt
# 1. iRedMail + sunucu üzerindeki durumunu araştır
curl -X POST https://your-host/api/mail/scan \
  -H "Authorization: Bearer $ALAFSERVER_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"serverId":"srv_123"}'

# 2. Yeniden benimse (idempotent)
curl -X POST https://your-host/api/mail/adopt \
  -H "Authorization: Bearer $ALAFSERVER_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"serverId":"srv_123"}'

Postmaster parolasını değiştir

POST /api/mail/credentials/postmaster

Prop

Type

Bir posta alan adı ekle

POST /api/mail/admin/:serverId/domains

Prop

Type

PATCH /api/mail/admin/:serverId/domains/:domain aynı alanları (hepsi isteğe bağlı) artı active (boolean) kabul eder.

curl -X POST https://your-host/api/mail/admin/srv_123/domains \
  -H "Authorization: Bearer $ALAFSERVER_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"domain":"example.com","defaultQuotaMB":2048}'

Bir posta kutusu oluştur

POST /api/mail/admin/:serverId/mailboxes

Prop

Type

PATCH /api/mail/admin/:serverId/mailboxes/:email name, password, quotaMB ve active (hepsi isteğe bağlı) kabul eder. DELETE varsayılan olarak soft delete yapar; maildir'i temizlemek için ?hard=true ekleyin.

curl -X POST https://your-host/api/mail/admin/srv_123/mailboxes \
  -H "Authorization: Bearer $ALAFSERVER_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"localPart":"alice","domain":"example.com","password":"a-strong-password"}'

Yedeklemeleri Yapılandır

Posta sunucusunu genel yedekleme sistemine bağlar — bir hedef ve neyin yakalanacağını seçin. Kuruluşunuzda mevcut bir yedekleme hedefi gerektirir.

POST /api/mail/admin/:serverId/backup-policy

Prop

Type

Bir test e-postası gönder

POST /api/mail/admin/:serverId/test-email

Prop

Type

Webmail deploy et

Bir webmail-<serverId> projesi oluşturur (veya yeniden kullanır), bir deployment'ı sıraya alır ve build'i başlatır. Dashboard'ın /build/[deploymentId] adresine yönlendirebilmesi için { deploymentId, projectId } döndürür.

POST /api/mail/webmail/deploy-project

Prop

Type

target şunlardan biridir:

  • { "kind": "self", "serverId": "srv_123" } — Alaf Server sunucularınızdan birinde self-hosted.
  • { "kind": "cloud" } — Alaf Server Cloud tarafından yönetilir.
curl -X POST https://your-host/api/mail/webmail/deploy-project \
  -H "Authorization: Bearer $ALAFSERVER_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"mailServerId":"srv_123","hostname":"mail.example.com","target":{"kind":"self","serverId":"srv_123"}}'

Görebileceğiniz Hatalar

404 — Mevcut Değil

Bir cloud instance'ını çağırıyorsunuz. Mail API yalnızca self-hosted'dir; CLOUD_MODE kapalı olan bir instance üzerinde çalıştırın.

404 — Sunucu bulunamadı

:serverId kuruluşunuza ait değil (veya mevcut değil). Geçerli ID'leri almak için GET /api/mail/servers ile posta sunucularınızı listeleyin.

409 — Kurulum zaten çalışıyor

Her instance'ta aynı anda yalnızca bir kurulum çalışır ve kurulumu aktifken sunucu başına yazma işlemleri (reset, postmaster rotasyonu) reddedilir. Bitmesini bekleyin veya POST /api/mail/setup/cancel ile iptal edin.

502 — Tarama / benimseme başarısız oldu

Alaf Server, SSH üzerinden sunucuya ulaşamadı veya probe hata verdi. Sunucunun çevrimiçi olduğunu ve SSH kimlik bilgilerinin geçerli olduğunu kontrol edin, ardından yeniden deneyin.

On this page