Geçiş rehberi
Postmark'tan Mail.Land'e geçiş
Postmark ve Mail.Land'in ikisi de JSON gönderim çağrısı alır; bu yüzden çoğu alan birebir eşlenir. Bu rehber her yaygın alanı, SMTP için değiştirilecek ayarları ve kod değişikliği gerektiren farkları listeler.
# Before (Postmark)
SMTP_HOST=smtp.postmarkapp.com # broadcasts: smtp-broadcasts.postmarkapp.com
SMTP_PORT=587 # STARTTLS
SMTP_USER=<Server API token, or SMTP token access key>
SMTP_PASS=<Server API token, or SMTP token secret key>
# After (Mail.Land)
SMTP_HOST=smtp.mail.land
SMTP_PORT=587 # STARTTLS
SMTP_USER=apikey # any value; Mail.Land ignores it
SMTP_PASS=ml_pet_... # transactional; use an ml_pem_ key for broadcastsMail.Land'de Postmark kavramları
| Postmark | Mail.Land |
|---|---|
| Server ve Server API token | Çalışma alanı ve her biri API veya SMTP ile, alan adlarıyla ve IP adresleriyle sınırlandırılabilen API anahtarları (kimlik bilgileri) |
| Mesaj akışları (işlemsel, toplu) | Anahtarın akışı: işlemsel (ml_pet_) veya pazarlama (ml_pem_) |
| Gönderici imzaları ve alan adları | Doğrulanmış alan adı (SPF, DKIM, DMARC ve dönüş yolu) |
| Şablonlar ve düzenler (Mustachio) | {{name}} yer tutuculu şablonlar |
| Mesaj akışı başına engelleme listeleri | Türü ve kapsamı olan engelleme listeleri |
| Webhook'lar | HMAC-SHA256 ile imzalanan, webhook başına ayrı gizli anahtarlı webhook'lar |
| Gelen akışı | Gelen yönlendirmeleri |
Doğru API anahtarlarını oluşturun
Postmark'ta akışı MessageStream alanı veya başlığı seçer. Mail.Land'de bunu anahtar yapar: ön eki modunu ve akışını gösterir. Her uygulama ve akış için bir anahtar oluşturun.
| Ön ek | Ne için |
|---|---|
ml_pet_ | Üretim, işlemsel: makbuzlar, parola sıfırlama, uyarılar. İstek başına en fazla 5 alıcı. |
ml_pem_ | Üretim, pazarlama: send-batch ile bültenler ve toplu gönderimler, çağrı başına en fazla 10.000 alıcı. |
ml_set_ | Sandbox, işlemsel: sandboxBehavior LogOnly (varsayılan) iken istekler kabul edilir ve kaydedilir ama hiçbir zaman teslim edilmez. Entegrasyon testleriniz için kullanın. |
Her anahtar API'ye, SMTP'ye veya ikisine, seçili alan adlarına ve bilinen IP adreslerine sınırlandırılabilir. Anahtar bir kez gösterilir; Mail.Land yalnızca karmasını (hash) saklar.
SMTP'yi değiştirin: sunucuyu ve kimlik bilgilerini güncelleyin
Postmark bir Server API token veya SMTP token ile akışı seçmek için bir başlık kullanır. Mail.Land ise API anahtarınızı parola olarak kullanır, kullanıcı adını yok sayar ve akışı anahtardan alır.
| Ayar | Postmark | Mail.Land |
|---|---|---|
| Sunucu | smtp.postmarkapp.com veya toplu gönderimler için smtp-broadcasts.postmarkapp.com | smtp.mail.land |
| Port | STARTTLS ile 25, 587 veya 2525 | STARTTLS ile 587 |
| Kullanıcı adı | Server API token veya SMTP token'ın access key'i | Herhangi bir değer, örneğin apikey |
| Parola | Server API token veya SMTP token'ın secret key'i | SMTP'si etkin bir Mail.Land API anahtarı |
| Akış | X-PM-Message-Stream başlığı | Anahtar: işlemsel için ml_pet_, pazarlama için ml_pem_ |
Mail.Land oturum açmayı yalnızca STARTTLS'ten sonra kabul eder. Mail.Land, X-PM-Message-Stream başlığını dikkate almaz: akışı anahtar belirler. Mesajlar 15 MiB'a kadar olabilir.
API çağrısını değiştirin
Her iki API de JSON alır. Postmark PascalCase adlar ve X-Postmark-Server-Token başlığı, Mail.Land ise camelCase adlar ve X-API-Key başlığı kullanır. İşte ikisinde de aynı mesaj ve şablonlu bir gönderim.
curl -X POST https://api.postmarkapp.com/email \
-H "X-Postmark-Server-Token: $POSTMARK_SERVER_TOKEN" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"From": "Your Shop <[email protected]>",
"To": "[email protected]",
"ReplyTo": "[email protected]",
"Subject": "Order 12345 has shipped",
"TextBody": "Your order is on its way.",
"HtmlBody": "<p>Your order is on its way.</p>",
"Tag": "order-shipped",
"MessageStream": "outbound"
}'curl -X POST https://api.mail.land/v1/transactional/send \
-H "X-API-Key: $MAILLAND_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"from": { "email": "[email protected]", "name": "Your Shop" },
"to": [{
"email": "[email protected]", "name": "Jane",
"variables": { "orderNumber": "12345" }
}],
"replyTo": "[email protected]",
"subject": "Order {{orderNumber}} has shipped",
"textContent": "Your order {{orderNumber}} is on its way.",
"htmlContent": "<p>Your order {{orderNumber}} is on its way.</p>",
"tags": ["order-shipped"]
}'
# MAILLAND_API_KEY=ml_pet_... (production, transactional)Gönderim çağrısı için alan eşlemesi
POST /email ve /email/withTemplate'ten POST /v1/transactional/send'e.
| Postmark | Mail.Land | Not |
|---|---|---|
X-Postmark-Server-Token: <token> | X-API-Key: <key> | Farklı bir başlık. |
From | from.email, from.name | Görünen adı adresten ayırın. Adres doğrulanmış bir alan adında olmalıdır. |
To | to[].email, to[].name | Virgülle ayrılmış dize yerine nesnelerden oluşan bir dizi. İşlemsel anahtarla istek başına en fazla 5 alıcı; her biri ayrı bir kopya alır. |
Cc, Bcc | Yok | Desteklenmez. Her alıcıya ayrı bir mesaj gönderin. |
Subject | subject | Şablon kullanmıyorsanız zorunludur. |
HtmlBody | htmlContent | |
TextBody | textContent | |
ReplyTo | replyTo | Tek bir adres dizesi. Virgülle ayrılmış birden çok reply-to adresi kullandıysanız birini tutun. |
Tag | tags | Bir dizi; böylece bir mesaj birden çok etiket taşıyabilir. |
Metadata | Yok | Anahtar-değer meta veri alanı yoktur. tags veya özel bir başlık kullanın. |
Headers [{ Name, Value }] | customHeaders | Dizi yerine başlık adları ve değerlerinden oluşan bir nesne. |
TrackOpens | tracking.opens | Alan adının açılma izleme tercihi önceliklidir. |
TrackLinks | tracking.clicks | None, HtmlAndText, HtmlOnly veya TextOnly yerine bir boolean değer. |
Attachments[].Name, Content, ContentType, ContentID | attachments[].fileName, content, contentType, contentId, inline | Base64 içerik önceki gibi. Satır içi görsel için inline: true ayarlayın. En fazla 10 ek ve toplam 10 MiB. |
MessageStream | Yok | Akışı anahtar belirler: ml_pet_ veya ml_pem_. |
TemplateId, TemplateAlias | templateId | Önce şablonu Mail.Land'de yeniden oluşturun; yeni bir kimlik alır. |
TemplateModel | variables, to[].variables | Yalnızca düz değerler; çünkü yer tutucularda bölüm veya döngü yoktur. |
POST /email/batch (en fazla 500 mesaj) | POST /v1/transactional/send-batch | Farklı bir model: her biri kendi değişkenlerine sahip en fazla 10.000 alıcı için ortak içerik, pazarlama anahtarıyla gönderilir. Farklı mesajlar için her biri için ayrı bir gönderim çağrısı yapın. |
Karşılığı yok | scheduledAt | Bir mesajı 7 güne kadar ileriye zamanlayın. |
Karşılığı yok | X-Idempotency-Key başlığı | Saklama süresi içinde aynı anahtarla yapılan yeniden deneme, yeniden göndermek yerine özgün yanıtı döndürür. |
Mail.Land; bir jobId, kabul edilen her alıcı için bir mesaj kimliği ve kabul edilen ile reddedilen alıcıların listeleriyle 202 Accepted yanıtı verir.
Alan adınızı ve DNS kayıtlarını ekleyin
Alan adını Mail.Land'e ekleyin ve panelin gösterdiği kayıtları yayımlayın. Gönderebilmek için SPF, DKIM ve DMARC'nin doğrulanması gerekir. Bunu Postmark hâlâ gönderim yaparken yapabilirsiniz.
| Kayıt | Ad | Değer | Not |
|---|---|---|---|
| SPF (TXT) | yourdomain.com | include:spf.mlnd.net | include'u mevcut SPF kaydınıza ekleyin. Bir alan adının yalnızca bir SPF kaydı olmalıdır. |
| DKIM (TXT) | mlnd._domainkey.yourdomain.com | v=DKIM1; k=rsa; p=... | Seçici (selector) mlnd olduğundan kayıt, Postmark'ın DKIM kaydının yanında durur. |
| DMARC (TXT) | _dmarc.yourdomain.com | v=DMARC1; p=... | Zorunludur. Tek bir DMARC kaydı tutun; politikası olan mevcut bir kayıt yeterlidir. |
| Dönüş yolu (CNAME) | bounce.yourdomain.com | bounce.mlnd.net | DNS only olarak, proxy olmadan ayarlayın. Bu adın zaten kullanılmadığını kontrol edin. |
Postmark'ın DNS kayıtlarını taşıma bitene kadar koruyun ve yalnızca son mesajı gittikten sonra kaldırın.
Önce engelleme listelerinizi aktarın
Postmark engelleme listelerini her mesaj akışı için ayrı tutar. Her akışın listesini, örneğin GET /message-streams/<stream>/suppressions/dump ile dışa aktarın, ardından uygun tür ve kapsamla, panelde veya POST /v1/transactional/suppressions/import ile Mail.Land'e aktarın.
| Postmark nedeni | Mail.Land türü | Kapsam |
|---|---|---|
| HardBounce | HardBounce | Global |
| SpamComplaint | Complaint | Global |
| Toplu akıştaki ManualSuppression (abonelik iptalleri) | Unsubscribe | Marketing; ya da yalnızca eşleşen Mail.Land posta listesine gönderilen kampanyalara uygulanan List |
| İşlemsel akıştaki ManualSuppression | Manual | Transactional |
Mail.Land üzerinden ilk gönderimden önce aktarın; böylece aboneliğini iptal edenler baştan engelli kalır. Zaten var olan adresler atlanır, çoğaltılmaz.
Webhook'larınızı Mail.Land'e yönlendirin
Uç noktanızı Mail.Land'e ekleyin, olayları seçin ve X-MLND-Signature başlığını o webhook'un gizli anahtarıyla doğrulayın. Postmark uç noktanızı Basic kimlik doğrulaması veya IP izin listesiyle koruyorduysanız bunun yerine imzayı doğrulayın.
| Postmark webhook'u | Mail.Land olayı | Not |
|---|---|---|
Teslimat (Delivery) | message.delivered | |
Geri dönme (Bounce) | message.bounced | Kalıcı ve geçici geri dönmeleri kapsar. Geçici gecikmeler message.deferred'dır. |
Spam şikâyeti (Spam complaint) | message.complained | |
Abonelik değişikliği (Subscription change) | message.unsubscribed | Alıcının kendi abonelik iptali için gönderilir; API üzerinden yaptığınız değişiklikler için gönderilmez. |
Açılma, tıklama (Open, Click) | Henüz yok | Açılma ve tıklama olayları katalogda yer alır ama bugün gönderilmez. |
Gelen (Inbound) | inbound.received | Alıcı adres için bir gelen yönlendirmesi kurun. |
SMTP API hatası | Yok | SMTP rölesi mesajı oturum sırasında bir yanıt koduyla reddeder. |
event_id'ye göre yinelenenleri ayıklayın; yeniden denenen teslimat aynı olay kimliğini taşır. Bir durum sonradan düzeltilebilir; bu yüzden son bir olaydan sonra da olayları işlemeye devam edin ve status_version'ı karşılaştırın.
Şablonlarınızı yeniden oluşturun
Her şablonu Mail.Land panelinde veya şablon API'siyle oluşturun, ardından templateId ve variables ile gönderin. Her yer tutucunun bir değeri olmalıdır; yoksa gönderim 422 koduyla ve eksik adlarla reddedilir.
| Postmark | Mail.Land |
|---|---|
{{firstName}} | {{firstName}} |
{{#each items}} ... {{/each}} | Yok |
{{#section}}, {{^section}} | Yok |
Düzen (layout) şablonları | Yok |
Mail.Land yer tutucuları sadedir: bölüm, döngü veya düzen yoktur. Düz değerler geçirin, listeleri uygulamanızda oluşturun ve ortak üst bilgi ile alt bilgi HTML'sini her şablonda tekrarlayın.
Adım adım geçiş
- Gönderim alan adınızı Mail.Land'e ekleyip doğrulayın ve include:spf.mlnd.net'i mevcut SPF kaydınıza ekleyin.
- Her Postmark mesaj akışının engelleme listesini dışa aktarıp içe aktarın.
- Her uygulama için bir işlemsel anahtar, toplu gönderim yapıyorsanız bir de pazarlama anahtarı oluşturun.
- Şablonlarınızı ve webhook'larınızı yeniden oluşturun.
- sandboxBehavior LogOnly olan bir sandbox anahtarı oluşturun ve entegrasyon testlerinizi e-posta teslim etmeden Mail.Land'e karşı çalıştırın.
- Denetiminizdeki adreslere gerçek mesajlar gönderin ve e-posta günlüğünde kontrol edin.
- Bir uygulamayı veya trafiğin küçük bir bölümünü taşıyın, ardından teslimatı, geri dönmeleri ve şikâyetleri izleyin.
- İki sağlayıcı birlikte çalışırken abonelik iptallerini iki yönde senkron tutun: yeni abonelik iptallerini, şikâyetleri ve geri dönmeleri Postmark'tan Mail.Land'e ve Mail.Land'den Postmark'a kopyalayın; kalan trafiği taşımadan önce son bir senkronizasyon yapın.
- Alan adınızın ısınma sürecini kontrol edin: Free ve Pro'da yeni bir alan adının aşamalarla artan bir günlük sınırı vardır ve bu sınırı aşan gönderimler reddedilir. Geçişi bu sınırlar içinde planlayın veya bize özel bir takvim sorun. Max'te ısınma aşaması yoktur.
- Ardından kalanını taşıyın ve Postmark'ı son mesajları gidene kadar etkin tutun.
Kaynaklar
Bu rehberde kullanılan Postmark'ın herkese açık sayfaları.
- [1]Postmark Email APIhttps://postmarkapp.com/developer/api/email-api4 Kasım 2026 tarihinde kontrol edildi
- [2]Postmark Templates APIhttps://postmarkapp.com/developer/api/templates-api4 Kasım 2026 tarihinde kontrol edildi
- [3]Postmark: SMTP ile e-posta göndermehttps://postmarkapp.com/developer/user-guide/send-email-with-smtp4 Kasım 2026 tarihinde kontrol edildi
- [4]Postmark webhook'larına genel bakışhttps://postmarkapp.com/developer/webhooks/webhooks-overview4 Kasım 2026 tarihinde kontrol edildi
- [5]Postmark Suppressions APIhttps://postmarkapp.com/developer/api/suppressions-api4 Kasım 2026 tarihinde kontrol edildi
Sık sorulan sorular
Test ederken Postmark üzerinden göndermeye devam edebilir miyim?
Evet. Bir alan adını Mail.Land'de doğrulamak, Postmark'ın o alan adı için göndermesini durdurmaz; ikisini birlikte çalıştırıp trafiği kademeli olarak taşıyabilirsiniz.
Mail.Land cc ve bcc'yi destekliyor mu?
Gönderim çağrısında hayır. Her alıcı ayrı bir kopya alır; bu yüzden cc veya bcc kullandığınız yerlerde ayrı bir mesaj gönderin.
Toplu gönderim akışımı nasıl değiştiririm?
API ile gönderimler için send-batch ile bir pazarlama anahtarı (ml_pem_) kullanın veya Pro ya da Max planında panelde bir kampanya oluşturun.
Resmi bir Mail.Land SDK'sı var mı?
Henüz yok. Belgelerde REST API için cURL, Node.js, Python, PHP, C#, Java ve Go'da kopyalanmaya hazır örnekler var ve her SMTP kütüphanesi röleyle çalışır.
Postmark'tan geçmeye hazır mısınız?
Ücretsiz bir hesap oluşturun ve ilk testinizi bugün gönderin. Yardım isterseniz kurulumunuzu bize anlatın.