MailLandDocs
E-posta Gönderimi

Şablonlar

Dinamik değişken değişimi ile yeniden kullanılabilir e-posta şablonları oluşturun ve yönetin

Dinamik değişkenlerle yeniden kullanılabilir e-posta şablonları oluşturun. Şablonlar; e-posta konunuzu, HTML içeriğinizi ve metin içeriğinizi depolar; böylece her istekte içeriği yeniden oluşturmadan kişiselleştirilmiş e-postalar gönderebilirsiniz.

Şablon Oluşturma

POST https://api.mail.land/v1/templates
Create a template
curl -X POST https://api.mail.land/v1/templates \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..." \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Order Confirmation",
    "subject": "Your order #{{orderNumber}} is confirmed",
    "htmlContent": "<h1>Thanks, {{firstName}}!</h1><p>Order #{{orderNumber}} has been confirmed. Total: {{total}}</p>",
    "textContent": "Thanks, {{firstName}}! Order #{{orderNumber}} has been confirmed. Total: {{total}}",
    "categoryId": "k3v9q2m7xw4tpa"
  }'
Response: 201 Created
{
  "id": "t8x2m4q9zk7wpr",
  "name": "Order Confirmation",
  "subject": "Your order #{{orderNumber}} is confirmed",
  "htmlContent": "<h1>Thanks, {{firstName}}!</h1>...",
  "textContent": "Thanks, {{firstName}}!...",
  "categoryId": "k3v9q2m7xw4tpa",
  "categoryName": "Transactional",
  "categoryColor": "#3B82F6",
  "createdAt": "2026-02-17T10:00:00Z",
  "updatedAt": null
}

Doğrulama Kuralları

AlanKısıtlama
nameZorunlu, en fazla 200 karakter
subjectZorunlu, en fazla 500 karakter
htmlContentZorunlu, en fazla 1 MB
textContentİsteğe bağlı, en fazla 1 MB
categoryIdİsteğe bağlı, mevcut bir kategoriye başvurmalıdır

Değişken Sözdizimi

Değişken değişimi için çift süslü ayraç kullanın:

Template with variables
<h1>Hello {{firstName}},</h1>
<p>Your order #{{orderNumber}} shipped on {{shipDate}}.</p>
<p>Track your package: <a href="{{trackingUrl}}">{{trackingNumber}}</a></p>

Değişkenler gönderim sırasında değiştirilir. Değerleri gönderme isteğinizdeki variables alanı aracılığıyla iletin:

Send with template variables
{
  "from": { "email": "[email protected]" },
  "to": [
    {
      "email": "[email protected]",
      "variables": {
        "firstName": "Jane",
        "orderNumber": "ORD-12345",
        "shipDate": "Feb 17, 2026",
        "trackingUrl": "https://track.example.com/ABC123",
        "trackingNumber": "ABC123"
      }
    }
  ],
  "templateId": "t8x2m4q9zk7wpr"
}

Değişkenler hem subject hem de htmlContent/textContent içinde çalışır. Bir şablonun kullandığı her {{variable}} için ya isteğin variables alanında ya da alıcının kendi variables alanında bir değer bulunmalıdır. Biri için değer yoksa MailLand mesajı yer tutucuyla birlikte göndermez: POST /v1/transactional/send 422 TEMPLATE_VARIABLE_MISSING yanıtı verir ve eksik değişkenleri sayar, POST /v1/transactional/send-batch ise o alıcıyı atlar ve rejectedRecipients içinde listeler. Kampanyalar ve otomasyonlar da o alıcıyı atlar. Hiç variables olmadan gönderilen satır içi htmlContent yazıldığı gibi gider. Yer tutucular tam olarak {{name}} biçimindedir; filtre, koşul veya döngü yoktur. Şablon grammarVersion: "legacy-v1" bildirir, bugün tek sözdizimi budur; şablon oluştururken veya güncellerken bu alanı göndermeyebilirsiniz.

Varsayılan Değerler

Bir şablon, kullandığı her kişi alanı için varsayılan bir değer taşıyabilir; böylece o alanda değeri olmayan bir abone de e-postayı alır. Bunları oluştururken ve güncellerken variableDefaults ile ayarlayın; bu, yer tutucu adından değere giden bir nesnedir. Şablonu getirdiğinizde, listelediğinizde veya çoğalttığınızda da döner.

Varsayılanlı şablon
{
  "name": "Welcome",
  "subject": "Hello {{firstName}}",
  "htmlContent": "<p>Hi {{firstName}}</p>",
  "variableDefaults": { "firstName": "değerli müşteri" }
}

Kurallar:

  • Varsayılan değerler yalnızca kampanya ve otomasyon gönderimlerine uygulanır. Alıcının kendi boş olmayan değeri her zaman varsayılanın önüne geçer.
  • Ne değeri ne varsayılanı olan alan yine reddedilir: MailLand hiçbir zaman düz {{firstName}} göndermez.
  • API ve SMTP üzerinden işlemsel gönderimler etkilenmez. Orada değerler isteğinizden gelir ve eksik değer yukarıda anlatıldığı gibi reddedilir.
  • Güncellemede variableDefaults alanını göndermezseniz kayıtlı varsayılanlar korunur. Silmek için {} gönderin.
  • Adlar yer tutucu sözdizimine uyar. email ve subscriberId her zaman sağlanır ve varsayılan alamaz. Bir değer en fazla 200 karakterlik tek satırdır ve bir şablonda en fazla 50 varsayılan olur.

Panel düzenleyicisinde her yer tutucunun, o alanı eksik olan abone sayısını gösteren bir varsayılan girişi vardır; kaydederken, bazı abonelerde eksik olan bir alanın varsayılanı yoksa sizi uyarır.

Şablon Önizleme

Algılanan değişkenler için otomatik olarak doldurulan örnek değerlerle şablonu önizleyin:

GET https://api.mail.land/v1/templates/{id}/preview
Preview a template
curl https://api.mail.land/v1/templates/t8x2m4q9zk7wpr/preview \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."
Preview response
{
  "id": "t8x2m4q9zk7wpr",
  "name": "Order Confirmation",
  "subject": "Your order #12345 is confirmed",
  "renderedHtml": "<h1>Thanks, John!</h1><p>Order #12345 has been confirmed.</p>",
  "renderedText": "Thanks, John! Order #12345 has been confirmed."
}

Şablon Kopyalama

Mevcut bir şablonu klonlayın:

POST https://api.mail.land/v1/templates/{id}/duplicate
Duplicate a template
curl -X POST https://api.mail.land/v1/templates/t8x2m4q9zk7wpr/duplicate \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."

Kopya otomatik oluşturulmuş bir ad alır: "Order Confirmation (Copy)". Bir kopya zaten mevcutsa ad artar: "Order Confirmation (Copy 2)" vb.

Şablon Kategorileri

Şablonları isteğe bağlı renklerle kategorilere göre düzenleyin.

Kategori oluşturma

POST https://api.mail.land/v1/templates/categories
Create a category
curl -X POST https://api.mail.land/v1/templates/categories \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..." \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Transactional",
    "description": "Order confirmations, receipts, and shipping notifications",
    "color": "#3B82F6"
  }'
AlanKısıtlama
nameZorunlu, 1-100 karakter
descriptionİsteğe bağlı, en fazla 500 karakter
colorİsteğe bağlı, hex formatı (#3B82F6 veya #38F)

Kategorileri listeleme

GET https://api.mail.land/v1/templates/categories
List template categories
curl https://api.mail.land/v1/templates/categories \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."
Categories response
{
  "categories": [
    {
      "id": "k3v9q2m7xw4tpa",
      "name": "Transactional",
      "description": "Order confirmations, receipts",
      "color": "#3B82F6",
      "templateCount": 12,
      "createdAt": "2026-01-15T10:00:00Z"
    }
  ],
  "totalCount": 3
}

Şablonları Listeleme

GET https://api.mail.land/v1/templates?limit=50
List templates
curl "https://api.mail.land/v1/templates?limit=50" \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."

Kategoriye göre filtrele:

GET https://api.mail.land/v1/templates?categoryId=k3v9q2m7xw4tpa
List templates by category
curl "https://api.mail.land/v1/templates?categoryId=k3v9q2m7xw4tpa" \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."
Template list response
{
  "items": [
    {
      "id": "t8x2m4q9zk7wpr",
      "name": "Order Confirmation",
      "subject": "Your order #{{orderNumber}} is confirmed",
      "htmlContent": "...",
      "categoryName": "Transactional",
      "categoryColor": "#3B82F6",
      "createdAt": "2026-02-17T10:00:00Z"
    }
  ],
  "nextCursor": "eyJ2IjoxLCJzIjoiY3JlYXRlZGF0OmRlc2MiLCJrIjoi...",
  "hasMore": true
}

Şablon Güncelleme

PUT https://api.mail.land/v1/templates/{id}

Güncelleme isteğinde tüm alanlar zorunludur (bu tam bir değiştirmedir, kısmi güncelleme değildir):

Update a template
curl -X PUT https://api.mail.land/v1/templates/t8x2m4q9zk7wpr \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..." \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Order Confirmation v2",
    "subject": "Order #{{orderNumber}} confirmed - {{companyName}}",
    "htmlContent": "<h1>Thanks, {{firstName}}!</h1><p>Updated template content.</p>",
    "textContent": "Thanks, {{firstName}}! Updated template content.",
    "categoryId": "k3v9q2m7xw4tpa"
  }'

Şablon Silme

DELETE https://api.mail.land/v1/templates/{id}
Delete a template
curl -X DELETE https://api.mail.land/v1/templates/t8x2m4q9zk7wpr \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."

Başarı durumunda 204 No Content döner. Silinen bir şablon artık alınamaz, listelenemez veya gönderim için kullanılamaz: ona başvuran bir gönderim isteği, anlık veya zamanlanmış, 400 TEMPLATE_NOT_FOUND ile reddedilir; şablonu son tarihinden önce silinen bir zamanlama da gönderim anında aynı şekilde reddedilir.

Gönderirken Şablon Kullanma

Gönderme isteğinizde bir şablona kimliğiyle başvurun. Şablonun konusu ve içeriği, değişkenler değiştirilerek kullanılır:

Send with template
{
  "from": { "email": "[email protected]" },
  "to": [
    {
      "email": "[email protected]",
      "variables": {
        "firstName": "Jane",
        "orderNumber": "ORD-12345"
      }
    }
  ],
  "templateId": "t8x2m4q9zk7wpr",
  "variables": {
    "companyName": "Acme Inc"
  }
}

templateId ayarlandığında her zaman şablonun render edilmiş konusu kullanılır; gönderme isteğindeki subject yok sayılır.

Plan Sınırları

Oluşturabileceğiniz şablon sayısı planınıza bağlıdır. Sınıra ulaşırsanız, yeni bir şablon oluşturmak 403 PLAN_LIMIT_REACHED döner.

Sonraki Adımlar

  • REST API: şablonlarla e-posta gönderme
  • Toplu Gönderim: toplu e-postalarda şablon kullanma
  • Zamanlanmış E-postalar: scheduledAt ile /v1/transactional/send üzerinden şablon kullanımı (zamanlama uç noktasında templateId alanı yoktur)

Bu sayfada