Ana içeriğe geç
MailLand

Geçiş rehberi

Amazon SES'ten Mail.Land'e geçiş

SES'ten geçiş, AWS kimlik bilgilerini, yapılandırma kümelerini ve olay hedeflerini tek bir API anahtarı ve imzalı webhook'larla değiştirir. Bu rehber her yaygın SendEmail alanını eşler ve kod değişikliği gerektirenleri listeler.

SMTP
# Before (Amazon SES)
SMTP_HOST=email-smtp.eu-central-1.amazonaws.com   # your Region's endpoint
SMTP_PORT=587          # STARTTLS (465 for TLS wrapper)
SMTP_USER=<SES SMTP user name for that Region>
SMTP_PASS=<SES SMTP password for that Region>

# After (Mail.Land)
SMTP_HOST=smtp.mail.land
SMTP_PORT=587          # STARTTLS; 465 is not offered
SMTP_USER=apikey       # any value; Mail.Land ignores it
SMTP_PASS=ml_pet_...   # a Mail.Land key with SMTP enabled

Mail.Land'de Amazon SES kavramları

Mail.Land'de Amazon SES kavramları
Amazon SESMail.Land
IAM kullanıcısı ve SigV4 istek imzalamaX-API-Key başlığında API anahtarı (kimlik bilgisi)
AWS bölgesi başına SMTP kimlik bilgileriSMTP parolası olarak kullanılan aynı API anahtarı
Doğrulanmış kimlik (alan adı) ve özel MAIL FROMDoğrulanmış alan adı (SPF, DKIM, DMARC ve dönüş yolu)
Yapılandırma kümeleri ve olay hedefleri (SNS, EventBridge, Firehose)HMAC-SHA256 ile imzalanan ve doğrudan uç noktanıza gönderilen webhook'lar
Hesap düzeyinde engelleme listesiTürü ve kapsamı olan engelleme listeleri
E-posta şablonları (Handlebars){{name}} yer tutuculu şablonlar
Kişi listeleri ve konular (topics)Posta listeleri, kampanyalar ve abonelik iptali yönetimi (Pro ve Max)
SandboxSandbox anahtarları (ml_set_, ml_sem_): sandboxBehavior LogOnly iken istekler kabul edilir ve kaydedilir ama hiçbir zaman teslim edilmez

Doğru API anahtarlarını oluşturun

Yazılacak IAM politikası yoktur. Bir Mail.Land anahtarının ön eki modunu ve akışını gösterir; her uygulama ve akış için bir anahtar oluşturun ve onu kullanan alan adları ile IP adresleriyle sınırlandırın.

Doğru API anahtarlarını oluşturun
Ön ekNe 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.

API anahtarları belgeleri

SMTP'yi değiştirin: sunucuyu ve kimlik bilgilerini güncelleyin

SES SMTP kimlik bilgileri IAM üzerinden oluşturulur ve her AWS bölgesinde farklıdır. Mail.Land ise API anahtarınızı parola olarak kullanır ve kullanıcı adını yok sayar.

SMTP'yi değiştirin: sunucuyu ve kimlik bilgilerini güncelleyin
AyarAmazon SESMail.Land
Sunucuemail-smtp.<region>.amazonaws.comsmtp.mail.land
PortSTARTTLS ile 25, 587 veya 2587 ya da TLS wrapper ile 465 ve 2465STARTTLS ile 587
Kullanıcı adıO bölgenin SMTP kullanıcı adıHerhangi bir değer, örneğin apikey
ParolaO bölgenin SMTP parolasıSMTP'si etkin bir Mail.Land API anahtarı (işlemsel e-posta için ml_pet_)

Mail.Land oturum açmayı yalnızca STARTTLS'ten sonra kabul eder; 465 ve 2465 portları sunulmaz. Uygulamanız TLS wrapper kullanıyorsa STARTTLS ile 587'ye geçirin. Mail.Land, X-SES-CONFIGURATION-SET gibi X-SES-* başlıklarını dikkate almaz; bu yüzden onları kaldırabilirsiniz. Mesajlar 15 MiB'a kadar olabilir.

SMTP rölesi belgeleri

API çağrısını değiştirin

SES istekleri genellikle bir AWS SDK'sı aracılığıyla AWS Signature Version 4 ile imzalanır. Mail.Land yalnızca X-API-Key başlığına ve daha düz bir JSON gövdesine ihtiyaç duyar. İşte ikisinde de aynı mesaj ve şablonlu bir gönderim.

aws sesv2 send-email --region eu-central-1 \
  --from-email-address "[email protected]" \
  --destination '{"ToAddresses":["[email protected]"]}' \
  --reply-to-addresses "[email protected]" \
  --email-tags Name=type,Value=order-shipped \
  --content '{
    "Simple": {
      "Subject": { "Data": "Order 12345 has shipped" },
      "Body": {
        "Text": { "Data": "Your order is on its way." },
        "Html": { "Data": "<p>Your order is on its way.</p>" }
      }
    }
  }'
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

SES API v2 SendEmail'den (POST /v2/email/outbound-emails) POST /v1/transactional/send'e.

Gönderim çağrısı için alan eşlemesi
Amazon SESMail.LandNot
AWS Signature Version 4X-API-Key: <key>İstek imzalama yok; anahtarı HTTPS üzerinden gönderin.
FromEmailAddressfrom.email, from.nameAdres doğrulanmış bir alan adında olmalıdır.
Destination.ToAddressesto[].email, to[].nameİşlemsel anahtarla istek başına en fazla 5 alıcı; her biri ayrı bir kopya alır.
Destination.CcAddresses, BccAddressesYokDesteklenmez. Her alıcıya ayrı bir mesaj gönderin.
ReplyToAddressesreplyToListe yerine tek bir adres dizesi. Birden fazla kullandıysanız birini tutun.
Content.Simple.Subject.DatasubjectŞablon kullanmıyorsanız zorunludur.
Content.Simple.Body.Html.DatahtmlContent
Content.Simple.Body.Text.DatatextContent
Content.Simple.Headers [{ Name, Value }]customHeadersDizi yerine başlık adları ve değerlerinden oluşan bir nesne.
Content.Simple.Attachments[].FileName, ContentType, RawContent, ContentId, ContentDispositionattachments[].fileName, contentType, content, contentId, inlineBase64 içerik. Satır içi görsel için inline: true ayarlayın. En fazla 10 ek ve toplam 10 MiB.
Content.Raw.Data (MIME)API'de yokHazır MIME mesajlarını bunun yerine SMTP rölesi üzerinden gönderin.
Content.Template.TemplateName, TemplateArntemplateIdÖnce şablonu Mail.Land'de yeniden oluşturun.
Content.Template.TemplateDatavariables, to[].variablesJSON dizesi yerine bir JSON nesnesi.
EmailTags [{ Name, Value }]tagsAd ve değer çiftleri yerine dizelerden oluşan bir dizi.
ConfigurationSetNameYokWebhook'lar ve izleme, Mail.Land hesabınızda ve her alan adında ayarlanır.
ConfigurationOverrides.Trackingtracking.opens, tracking.clicksAlan adının açılma izleme tercihi önceliklidir.
ListManagementOptionsGönderim çağrısında yokPazarlama abonelik iptalleri Mail.Land listeleri ve kampanyalarıyla yönetilir.
Karşılığı yokscheduledAtBir mesajı 7 güne kadar ileriye zamanlayın.
Karşılığı yokX-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.

SES bir MessageId ile 200 yanıtı verir. 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.

REST API belgeleri

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 SES hâlâ gönderim yaparken yapabilirsiniz.

Alan adınızı ve DNS kayıtlarını ekleyin
KayıtAdDeğerNot
SPF (TXT)yourdomain.cominclude:spf.mlnd.netinclude'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.comv=DKIM1; k=rsa; p=...Seçici (selector) mlnd olduğundan kayıt, SES'in kullandığı DKIM kayıtlarının yanında durur.
DMARC (TXT)_dmarc.yourdomain.comv=DMARC1; p=...Zorunludur. Tek bir DMARC kaydı tutun; politikası olan mevcut bir kayıt yeterlidir.
Dönüş yolu (CNAME)bounce.yourdomain.combounce.mlnd.netDNS only olarak, proxy olmadan ayarlayın. SES'teki özel MAIL FROM alan adınız bu adı zaten kullanıyorsa SES göndermeyi bırakana kadar koruyun.

SES'in DNS kayıtlarını taşıma bitene kadar koruyun ve yalnızca son mesajı gittikten sonra kaldırın.

DNS kurulumu belgeleri

Önce engelleme listenizi aktarın

SES hesap düzeyindeki engelleme listesi AWS bölgesi başına geçerlidir. Gönderim yaptığınız her bölgeden ListSuppressedDestinations (aws sesv2 list-suppressed-destinations) 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.

Önce engelleme listenizi aktarın
SES nedeni veya kaynağıMail.Land türüKapsam
BOUNCEHardBounceGlobal
COMPLAINTComplaintGlobal
Kişi listesi konularındaki abonelik iptalleriUnsubscribeMarketing; ya da yalnızca eşleşen Mail.Land posta listesine gönderilen kampanyalara uygulanan List

SES listeye yalnızca kalıcı geri dönmeleri ekler ve Gmail spam bildirimleri listeye ulaşmaz; bu yüzden kendi sistemlerinizin tuttuğu engellemeleri de aktarın. Mail.Land üzerinden ilk gönderimden önce aktarın; böylece aboneliğini iptal edenler baştan engelli kalır.

Engelleme listesi belgeleri

Webhook'larınızı Mail.Land'e yönlendirin

Yapılandırma kümesini ve olay hedefini bir Mail.Land webhook'uyla değiştirin: HTTPS uç noktanızı ekleyin, olayları seçin ve X-MLND-Signature başlığını o webhook'un gizli anahtarıyla doğrulayın. Onaylanacak bir SNS aboneliği yoktur.

Webhook'larınızı Mail.Land'e yönlendirin
SES olayıMail.Land olayıNot
SendŞimdilik yokmessage.sent henüz kullanılamıyor; 202 yanıtı kabulü doğrular.
Teslimat (Delivery)message.delivered
DeliveryDelaymessage.deferred
Geri dönme (Bounce)message.bounced
Complaintmessage.complained
Subscriptionmessage.unsubscribedAlıcının kendi abonelik iptali için gönderilir; API üzerinden yaptığınız değişiklikler için gönderilmez.
RejectYok
RenderingFailureYokEksik bir şablon değeri, API çağrısı sırasında 422 TEMPLATE_VARIABLE_MISSING ile reddedilir.
Açılma, tıklama (Open, Click)Henüz yokAçılma ve tıklama olayları katalogda yer alır ama bugün gönderilmez.

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.

Webhook olayları

Webhook imzası doğrulama

Ş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.

Şablonlarınızı yeniden oluşturun
Amazon SESMail.Land
{{firstName}}{{firstName}}
{{contact.firstName}} (iç içe){{firstName}}
{{#each}}, {{#if}} ... {{else}}Yok
Satır içi partial'lar ({{> name}})Yok

Mail.Land yer tutucuları sadedir: iç içe değer, koşul, döngü veya partial yoktur. Düz değerler geçirin ve mantığı uygulamanıza taşıyın ya da her varyant için bir şablon tutun.

Şablon belgeleri

Adım adım geçiş

  1. 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.
  2. Kullandığınız her AWS bölgesinin engelleme listesini dışa aktarıp içe aktarın.
  3. Her uygulama ve akış için alan adlarınız ve IP adreslerinizle sınırlı Mail.Land anahtarları oluşturun.
  4. Şablonlarınızı yeniden oluşturun ve her olay hedefini bir webhook'la değiştirin.
  5. sandboxBehavior LogOnly olan bir sandbox anahtarı oluşturun ve entegrasyon testlerinizi e-posta teslim etmeden Mail.Land'e karşı çalıştırın.
  6. Denetiminizdeki adreslere gerçek mesajlar gönderin ve e-posta günlüğünde kontrol edin.
  7. 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.
  8. İki sağlayıcı birlikte çalışırken abonelik iptallerini iki yönde senkron tutun: yeni abonelik iptallerini, şikâyetleri ve geri dönmeleri SES'ten Mail.Land'e ve Mail.Land'den SES'e kopyalayın; kalan trafiği taşımadan önce son bir senkronizasyon yapın.
  9. 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.
  10. Ardından kalanını taşıyın ve SES'i son mesajları gidene kadar etkin tutun.

Mail.Land ile Amazon SES: kaynaklı karşılaştırma

Kaynaklar

Bu rehberde kullanılan AWS'nin herkese açık sayfaları.

  1. [1]Amazon SES API v2: SendEmailhttps://docs.aws.amazon.com/ses/latest/APIReference-V2/API_SendEmail.html4 Kasım 2026 tarihinde kontrol edildi
  2. [2]Amazon SES: SMTP uç noktasına bağlanmahttps://docs.aws.amazon.com/ses/latest/dg/smtp-connect.html4 Kasım 2026 tarihinde kontrol edildi
  3. [3]Amazon SES: SMTP kimlik bilgilerini edinmehttps://docs.aws.amazon.com/ses/latest/dg/smtp-credentials.html4 Kasım 2026 tarihinde kontrol edildi
  4. [4]Amazon SES: gelişmiş e-posta kişiselleştirmehttps://docs.aws.amazon.com/ses/latest/dg/send-personalized-email-advanced.html4 Kasım 2026 tarihinde kontrol edildi
  5. [5]Amazon SES: olay yayımlamahttps://docs.aws.amazon.com/ses/latest/dg/monitor-using-event-publishing.html4 Kasım 2026 tarihinde kontrol edildi
  6. [6]Amazon SES: hesap düzeyinde engelleme listesihttps://docs.aws.amazon.com/ses/latest/dg/sending-email-suppression-list.html4 Kasım 2026 tarihinde kontrol edildi

Sık sorulan sorular

Test ederken SES üzerinden göndermeye devam edebilir miyim?

Evet. Bir alan adını Mail.Land'de doğrulamak, SES'in o alan adı için göndermesini durdurmaz; ikisini birlikte çalıştırıp trafiği kademeli olarak taşıyabilirsiniz.

Hâlâ bir AWS SDK'sına ihtiyacım var mı?

Hayır. Her HTTP istemcisi Mail.Land API'sini X-API-Key başlığıyla çağırabilir ve her SMTP kütüphanesi röleyle çalışır.

SendBulkEmail ile gönderdiğim toplu e-postayı nasıl gönderirim?

Bir pazarlama anahtarıyla (ml_pem_) POST /v1/transactional/send-batch kullanın. Her biri kendi değişkenleriyle 10.000 alıcıya kadar kabul eder.

Mail.Land nerede çalışıyor?

Mail.Land'de seçilecek bölge yoktur. Verilerinizin birincil kopyası Almanya'dadır; AB dışındaki sağlayıcılar GDPR sayfamızda listelenir.

Amazon SES'ten 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.