MailLandDocs
Gelen E-posta

Gelen E-posta Genel Bakış

Mail.Land'ın gelen ağ geçidiyle gelen e-postaları alın ve işleyin

MailLand'ın gelen ağ geçidi, alan adlarınıza gelen e-postaları alır ve bunları webhook'lar aracılığıyla uygulamanıza iletir ya da daha sonra alınmak üzere depolar. Destek gelen kutuları oluşturmak, makine tarafından üretilen e-postaları ayrıştırmak veya yanıtları uygulamanıza yönlendirmek için gelen işlemeyi kullanın.

Nasıl Çalışır

Alan adınızı yapılandırın

Alan adınızın MX kayıtlarını MailLand'ın gelen sunucularına yönlendirin. Alan adının inboundEnabled ve aktif bir kiracıya ihtiyacı vardır. MailLand yalnızca etkin bir rotayla eşleşen bir alıcı için posta kabul eder, veya catchAllEnabled açıksa herhangi bir adres için; diğer her şey RCPT aşamasında reddedilir.

Yönlendirme kuralları oluşturun

Alıcı adresinin yerel kısmıyla eşleşen rotalar tanımlayın ve bunlara bir eylem atayın (yönlendirme, webhook veya depolama).

Ayrıştırılmış e-postaları alın

MailLand e-postayı işler; başlıkları, gövdeyi ve ekleri ayrıştırır ve sonucu webhook uç noktanıza iletir veya API ile alınmak üzere depolar.

Gelen Ayarları

Ayarlar tüm çalışma alanı genelinde değil, alan adı bazında geçerlidir:

GET https://api.mail.land/v1/transactional/inbound/domains/{domainId}/settings
PUT https://api.mail.land/v1/transactional/inbound/domains/{domainId}/settings

Authorization: Bearer <token> veya X-API-Key: <api key> ile kimlik doğrulayın.

Get inbound settings
curl https://api.mail.land/v1/transactional/inbound/domains/k3v9x2m8q1w7z4/settings \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."
Inbound settings response
{
  "isEnabled": true,
  "catchAllEnabled": true,
  "maxMessageSizeBytes": 26214400,
  "retentionDays": 30,
  "dailyLimit": 10000,
  "storeEmails": true
}

Ayarları güncelleyin:

PUT https://api.mail.land/v1/transactional/inbound/domains/k3v9x2m8q1w7z4/settings
Update settings request
{
  "isEnabled": true,
  "catchAllEnabled": true,
  "maxMessageSizeBytes": 26214400,
  "retentionDays": 30,
  "dailyLimit": 10000,
  "storeEmails": true
}
Update inbound settings
curl -X PUT https://api.mail.land/v1/transactional/inbound/domains/k3v9x2m8q1w7z4/settings \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..." \
  -H "Content-Type: application/json" \
  -d '{
    "isEnabled": true,
    "catchAllEnabled": true,
    "maxMessageSizeBytes": 26214400,
    "retentionDays": 30,
    "dailyLimit": 10000,
    "storeEmails": true
  }'
AlanTürAçıklama
isEnabledboolBu alan adı için gelen işlemeyi etkinleştir/devre dışı bırak
catchAllEnabledboolYalnızca etkin bir rotayla eşleşen alıcılar değil, alan adındaki herhangi bir alıcı için postayı kabul et
maxMessageSizeBytesintBu alan adı için bayt cinsinden kabul edilen maksimum ileti boyutu; SMTP 552 5.3.4 ile uygulanır. Ayarlar API'si 50 MiB'ye kadar değer kabul eder, ancak platform bu ayardan bağımsız olarak asla 25 MiB'nin üzerini kabul etmez
dailyLimitintBu alan adı için günde kabul edilen maksimum gelen ileti sayısı
retentionDaysintDepolanan e-postaların saklanacağı gün sayısı. Varsayılan 30, izin verilen 1–90
storeEmailsboolAyrıştırılmış tam e-postanın daha sonra alınmak üzere depolanıp depolanmayacağı
routeCountintBu alan adı için yapılandırılmış rota sayısı

Virüs taraması yoktur ve tüm çalışma alanı için tek bir webhookUrl/webhookSecret yoktur; webhook'lar webhookId üzerinden rota bazında eklenir (bkz. Rotalar).

maxMessageSizeBytes, dailyLimit ve retentionDays uygulanmaktadır. Postalar, MX kaydının işaret ettiği ana bilgisayar olan <inboundSubdomain>.<domain> adresinde alınır; kök alan adı da almaya devam eder. Alan adının maxMessageSizeBytes değerini aşan bir ileti, SMTP 552 5.3.4 ile reddedilir ve daha büyük bir değer ayarlansa bile platformun 25 MiB sınırının hiçbir zaman üzerine çıkılmaz (ayarlar API'si 50 MiB'ye kadar kabul eder, ancak yalnızca 25 MiB uygulanır). Günlük dailyLimit (varsayılan 10.000) değerine ulaşıldığında, gönderenler geçici bir 452 4.2.2 alır ve daha sonra tekrar denemesi beklenir; posta kaybolmaz. Saklanan iletiler, retentionDays (varsayılan 30, izin verilen 1–90) süresi dolduğunda silinir.

E-posta Durumları

Sayı olarak değil, dize (string) olarak döndürülür:

DurumAçıklama
ReceivedE-posta alındı, işlenmeyi bekliyor
Processingİşleniyor (ayrıştırma, spam kontrolü, yönlendirme)
Processedİşlendi ve eylemi tamamlandı
DeliveredBaşarıyla teslim edildi (yönlendirildi veya webhook gönderildi)
Failedİşleme başarısız oldu
ExpiredSaklama süresi doldu; e-posta silindi

Ayrı bir Quarantined durumu yoktur; spam, status'tan bağımsız olarak e-posta üzerindeki bir boole isSpam bayrağıdır.

Gelen E-postaları Listele

GET https://api.mail.land/v1/transactional/inbound/emails
List inbound emails
curl https://api.mail.land/v1/transactional/inbound/emails \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."
ParametreTürVarsayılanAçıklama
cursorstring-Önceki sayfanın nextCursor değerinden gelen opak imleç. İlk sayfa için atlayın.
limitint20Sayfa başına öğe sayısı (maks. 100), reddedilmek yerine sınırlandırılır
domainIdstring-Alan adının genel kimliğine göre filtrele
statusstring-E-posta durumuna göre filtrele (Received, Processing, Processed, Delivered, Failed, Expired)
routeIdstring-Eşleşen rotaya göre filtrele
isSpambool-Spam bayrağına göre filtrele. isSpam belirtmek (true veya false) spam boyutuna tek başına karar verir ve varsayılan excludeQuarantined filtresini devre dışı bırakır, bu yüzden isSpam=true spam satırlarını döndürür (yine de aşağıdaki yalnızca-depolanmış kuralına tabidir). Spam'i gizleyen gelen kutusu varsayılanını korumak için isSpam'i belirtmeyin.
fromdatetime-Bu tarihten sonra alınan e-postalar
todatetime-Bu tarihten önce alınan e-postalar
searchstring-Konu ve gönderende arama yapar (adres veya ad); alıcıyla eşleşmez
sortBystring-Sıralama alanı: subject, from veya varsayılan receivedAt
sortDescbooltrueAzalan sırada sırala
excludeQuarantinedbooltrueSpam olarak işaretlenmiş e-postaları listeden hariç tutar. isSpam belirtildiğinde yok sayılır.
includeWebhookOnlyboolfalseAlınırken depolanmamış e-postaları dahil eder (yalnızca webhook veya bırakma rotaları). Varsayılan olarak gizlidir, bu yüzden tüm rotaları yalnızca webhook olan bir kiracı burada boş bir liste görür.

Yalnızca subject araması yoktur, tek başına gönderen/alıcı adres filtresi yoktur ve buradaki from/to adres değil tarihtir (gönderen/konu metin eşleşmesi için search kullanın).

Inbound emails list response
{
  "items": [
    {
      "id": "k7m2x9q4p1w8z3",
      "domainId": "k3v9x2m8q1w7z4",
      "domainName": "yourdomain.com",
      "matchedRouteId": "r7k3m9q2p4w8x1",
      "matchedRouteName": "Support inbox",
      "fromAddress": "[email protected]",
      "fromName": "Customer Name",
      "subject": "Need help with my account",
      "textPreview": "Hi, I need help with...",
      "hasHtml": true,
      "hasText": true,
      "attachmentCount": 1,
      "sizeBytes": 45230,
      "status": "Delivered",
      "spfResult": "Pass",
      "dkimResult": "Pass",
      "dmarcResult": "Pass",
      "isSpam": false,
      "spamScore": 1.2,
      "receivedAt": "2026-02-17T14:30:00Z",
      "expiresAt": "2026-03-19T14:30:00Z"
    }
  ],
  "nextCursor": "eyJ2IjoxLCJzIjoiY3JlYXRlZGF0OmRlc2MiLCJrIjoi...",
  "hasMore": true
}

Liste öğesinde to alanı yoktur; alıcılar detay yanıtındaki envelopeRecipients/headerRecipients içinde bulunur. status bir sayı değil, dizedir.

E-posta Ayrıntılarını Al

GET https://api.mail.land/v1/transactional/inbound/emails/{id}
Get email details
curl https://api.mail.land/v1/transactional/inbound/emails/{id} \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."

Ayrıştırılmış e-postanın meta verilerini, başlıklarını, bir metin önizlemesini ve ek meta verilerini döndürür; tam HTML/metin gövdesini döndürmez. Bunun için ham iletiyi alın (aşağıya bakın).

Inbound email detail response
{
  "id": "k7m2x9q4p1w8z3",
  "domainId": "k3v9x2m8q1w7z4",
  "domainName": "yourdomain.com",
  "matchedRouteId": "r7k3m9q2p4w8x1",
  "matchedRouteName": "Support inbox",
  "fromAddress": "[email protected]",
  "fromName": "Customer Name",
  "subject": "Need help with my account",
  "textPreview": "Hi, I need assistance with...",
  "hasHtml": true,
  "hasText": true,
  "attachmentCount": 1,
  "sizeBytes": 45230,
  "status": "Delivered",
  "spfResult": "Pass",
  "dkimResult": "Pass",
  "dmarcResult": "Pass",
  "isSpam": false,
  "spamScore": 1.2,
  "receivedAt": "2026-02-17T14:30:00Z",
  "expiresAt": "2026-03-19T14:30:00Z",
  "envelopeFrom": "[email protected]",
  "replyTo": "[email protected]",
  "messageId": "<[email protected]>",
  "inReplyTo": null,
  "dateHeader": "2026-02-17T14:30:00Z",
  "authResultsHeader": "spf=pass dkim=pass dmarc=pass",
  "spamReason": null,
  "sourceIp": "203.0.113.5",
  "heloHostname": "mail.example.com",
  "processingError": null,
  "processedAt": "2026-02-17T14:30:01Z",
  "envelopeRecipients": [
    { "address": "[email protected]", "localPart": "support", "matchedRouteId": "r7k3m9q2p4w8x1" }
  ],
  "headerRecipients": [
    { "type": "To", "address": "[email protected]", "name": null }
  ],
  "attachments": [
    { "id": "a3k7m2q9p4w1x8", "fileName": "screenshot.png", "contentType": "image/png", "sizeBytes": 34500, "isInline": false, "contentId": null }
  ],
  "webhookAttempts": [
    { "attemptNumber": 1, "status": "Delivered", "webhookUrl": "https://yourapp.com/webhooks/inbound", "httpStatusCode": 200, "errorMessage": null, "durationMs": 145, "attemptedAt": "2026-02-17T14:30:02Z", "nextRetryAt": null }
  ]
}

Kimlik Doğrulama Sonuçları

Her gelen e-posta, SPF, DKIM ve DMARC doğrulama sonuçlarını içerir. Olası değerler her kontrol için farklıdır: headerRecipients[].type "To", "Cc" veya "Bcc" değerini alır (bu büyük/küçük harf biçimiyle), ve dateHeader ham RFC 2822 başlık dizesi değil, ISO 8601 zaman damgasıdır.

spfResultAçıklama
NoneSPF kaydı bulunamadı veya kontrol yapılmadı
PassGönderen yetkili
FailGönderen yetkili değil
SoftFailGönderen yetkili olmayabilir
NeutralYetkilendirme hakkında bir bildirim yok
TempErrorGeçici DNS hatası
PermErrorKalıcı DNS hatası
dkimResultAçıklama
NoneDKIM imzası bulunamadı veya kontrol yapılmadı
Passİmza doğrulandı
Failİmza doğrulaması başarısız
TempErrorGeçici DNS hatası
PermErrorKalıcı DNS hatası
dmarcResultAçıklama
NoneDMARC politikası bulunamadı veya kontrol yapılmadı
PassHizalama başarılı
FailHizalama başarısız
QuarantinePolitika karantinayı öneriyor
RejectPolitika reddi öneriyor

Ham E-postayı İndir

GET https://api.mail.land/v1/transactional/inbound/emails/{id}/raw
Download raw email
curl https://api.mail.land/v1/transactional/inbound/emails/{id}/raw \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..." \
  -o email.eml

Orijinal ham e-postayı (RFC 5322 biçiminde) indirilebilir bir dosya olarak döndürür.

E-postaları Sil

Tek bir e-postayı sil:

DELETE https://api.mail.land/v1/transactional/inbound/emails/{id}
Delete inbound email
curl -X DELETE https://api.mail.land/v1/transactional/inbound/emails/{id} \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."

E-postaları toplu sil:

POST https://api.mail.land/v1/transactional/inbound/emails/bulk-delete
Bulk delete request
{
  "ids": ["k7m2x9q4p1w8z3", "p3q8w2x7m9k4z1", "w9k3p7m2q8x4z6"]
}
Bulk delete inbound emails
curl -X POST https://api.mail.land/v1/transactional/inbound/emails/bulk-delete \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..." \
  -H "Content-Type: application/json" \
  -d '{
    "ids": ["k7m2x9q4p1w8z3", "p3q8w2x7m9k4z1", "w9k3p7m2q8x4z6"]
  }'

Aynı e-posta grubunu tek bir çağrıda spam olarak işaretlemek için aynı {"ids": [...]} gövdesine sahip POST /v1/transactional/inbound/emails/bulk-mark-spam de mevcuttur.

Karantina

isSpam: true olan e-postalar burada görünür (virüs taraması yoktur ve ayrı bir Quarantined durumu yoktur; spam yalnızca bir boole bayrağıdır). Karantinadaki e-postaları görüntüle:

GET https://api.mail.land/v1/transactional/inbound/quarantine
List quarantined emails
curl https://api.mail.land/v1/transactional/inbound/quarantine \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."

Bir e-postayı karantinadan serbest bırak:

POST https://api.mail.land/v1/transactional/inbound/quarantine/{id}/release
Release from quarantine
curl -X POST https://api.mail.land/v1/transactional/inbound/quarantine/{id}/release \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."

Bir e-postayı serbest bırakmak yalnızca isSpam bayrağını temizler. Yönlendirmeyi yeniden çalıştırmaz ve webhook'ları yeniden göndermez. Serbest bırakılan (veya herhangi bir) e-posta için webhook'u yeniden teslim etmek üzere POST /v1/transactional/inbound/emails/{id}/replay-webhook çağrısı yapın: bu, eşleşen rotanın webhook'una tek bir kalıcı teslimatı sıraya alır ve 202 Accepted döndürür (bkz. Inbound Webhooks). İsteğe bağlı bir ?addToAllowlist=true sorgu parametresi, serbest bırakma sırasında gönderen kişiyi de izin listesine ekler.

İzin Listesi ve Engelleme Listesi

İzin Listesi

İzin listesindeki gönderenlerden gelen e-postalar spam filtrelemesini atlar:

GET https://api.mail.land/v1/transactional/inbound/allowlist
Get allowlist
curl https://api.mail.land/v1/transactional/inbound/allowlist \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."
POST https://api.mail.land/v1/transactional/inbound/allowlist
Add to allowlist
{
  "pattern": "[email protected]",
  "matchType": "ExactEmail",
  "description": "Trusted partner"
}
Add to allowlist
curl -X POST https://api.mail.land/v1/transactional/inbound/allowlist \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..." \
  -H "Content-Type: application/json" \
  -d '{
    "pattern": "[email protected]",
    "matchType": "ExactEmail",
    "description": "Trusted partner"
  }'

Sayı olarak değil, dize olarak döndürülür ve gönderilir:

Eşleşme TürüAçıklama
ExactEmailTam e-posta adresiyle eşleşir
DomainBir alan adından gelen tüm e-postalarla eşleşir
WildcardPatternJoker karakter deseniyle eşleşme

Engelleme Listesi

Engelleme listesindeki gönderenlerden gelen e-postalar otomatik olarak işlenir:

GET https://api.mail.land/v1/transactional/inbound/blocklist
Get blocklist
curl https://api.mail.land/v1/transactional/inbound/blocklist \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."
POST https://api.mail.land/v1/transactional/inbound/blocklist
Add to blocklist
{
  "pattern": "[email protected]",
  "matchType": "ExactEmail",
  "action": "RejectAtSmtp",
  "description": "Known spammer"
}
Add to blocklist
curl -X POST https://api.mail.land/v1/transactional/inbound/blocklist \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..." \
  -H "Content-Type: application/json" \
  -d '{
    "pattern": "[email protected]",
    "matchType": "ExactEmail",
    "action": "RejectAtSmtp",
    "description": "Known spammer"
  }'

Sayı olarak değil, dize olarak döndürülür ve gönderilir. Belirtilmezse varsayılan eylem MarkAsSpam'dır:

Engelleme EylemiAçıklama
RejectAtSmtpSMTP düzeyinde reddet (550 yanıtı)
MarkAsSpamKabul et ancak spam olarak işaretle (varsayılan)
DropE-postayı sessizce düşür

İzin listesinden veya engelleme listesinden sil:

DELETE https://api.mail.land/v1/transactional/inbound/allowlist/{id}
DELETE https://api.mail.land/v1/transactional/inbound/blocklist/{id}
Delete from allowlist or blocklist
# Delete from allowlist
curl -X DELETE https://api.mail.land/v1/transactional/inbound/allowlist/{id} \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."

# Delete from blocklist
curl -X DELETE https://api.mail.land/v1/transactional/inbound/blocklist/{id} \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."

Gelen İstatistikleri

GET https://api.mail.land/v1/transactional/inbound/stats
Get inbound stats
curl https://api.mail.land/v1/transactional/inbound/stats \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."
ParametreTürAçıklama
domainIdstringAlan adının genel kimliğine göre filtrele
fromdatetimeBu andan itibaren receivedAt alanına göre filtrele
todatetimeBu günün sonundan önce receivedAt alanına göre filtrele
Inbound stats response
{
  "totalEmails": 1500,
  "todayEmails": 42,
  "receivedCount": 1500,
  "processingCount": 5,
  "processedCount": 1345,
  "failedCount": 20,
  "spamCount": 80,
  "webhookFailedCount": 3,
  "storageUsedBytes": 52428800,
  "byDomain": [
    { "domainId": "k3v9x2m8q1w7z4", "domainName": "yourdomain.com", "count": 1500 }
  ],
  "byStatus": { "Received": 5, "Processing": 5, "Processed": 1345, "Delivered": 1300, "Failed": 20, "Expired": 50 },
  "dailyStats": [
    { "date": "2026-02-17", "total": 120, "processed": 115, "spam": 8 }
  ]
}

spamRate/averageSizeBytes alanı yoktur; yukarıdaki yapı eksiksizdir.

Hata Yanıtları

DurumKodAçıklama
400VALIDATION_FAILEDGeçersiz istek parametreleri
403FORBIDDENYetersiz izinler
404RESOURCE_NOT_FOUNDE-posta bulunamadı

Sonraki Adımlar

  • Rotalar: gelen e-postalar için yönlendirme kurallarını yapılandırın
  • Webhook'lar: ayrıştırılmış e-posta verilerini webhook ile alın
  • Alan Adları: gelen işleme için MX kayıtlarını ayarlayın

Bu sayfada