E-posta
E-posta kanalı — SMTP, Amazon SES ve Resend sağlayıcıları, gönderici alan adı doğrulaması, içerik alanları (MJML/HTML, Liquid), açılma/tıklama izleme, List-Unsubscribe ve gelen geri bildirim webhook'ları.
E-posta kanalı işlemsel ve pazarlama e-postalarını aynı POST /v1/notifications, kampanya ve journey akışıyla gönderir. Sürükle-bırak editörü için e-posta editörü, spam'e düşmemek için teslim edilebilirlik.
Sağlayıcılar
| Sağlayıcı | Alanlar (gizli olanlar italik) | Doğrulama |
|---|---|---|
smtp | host, port, secure (465 TLS / STARTTLS), username, password, gönderici alanları | SMTP EHLO + kimlik (verify); özel ağ adresleri reddedilir, IP sabitlenir (SSRF) |
ses | region, access_key_id, secret_access_key, configuration_set, gönderici alanları | GET /v2/email/account (SigV4) |
resend | api_key, webhook_secret (whsec_…, isteğe bağlı), gönderici alanları | GET /domains |
mock | isteğe bağlı from_address, from_name | her zaman geçerli (simülasyon) |
Gönderici alanları: from_address (zorunlu), from_name, reply_to, postal_address (altbilgide gösterilen fiziksel adres). API: PUT /v1/apps/{app_id}/channels/email + POST …/validate (admin).
Alan adı doğrulaması: gönderici alan adınızı sağlayıcıda doğrulayın; SPF kaydına sağlayıcının include: değerini, DKIM için verilen CNAME/TXT kayıtlarını ekleyin ve en az v=DMARC1; p=none DMARC kaydı yayınlayın. Dashboard Kanallar → E-posta → Alan adı (GET /v1/apps/{app_id}/email-deliverability) SPF/DKIM/DMARC durumunu canlı gösterir; ısındırma planı ve itibar için teslim edilebilirlik.
İçerik alanları
| Alan | Açıklama |
|---|---|
email_subject | Konu (Liquid). Yoksa headings kullanılır. |
email_mjml | MJML kaynağı (Liquid → MJML derlemesi). mj-include dosya erişimi kapalıdır. |
email_body | Hazır HTML (Liquid). MJML yoksa kullanılır. |
email_preheader | Gelen kutusu önizleme metni (gizli ön başlık). |
email_from_name, email_from_address, email_reply_to_address | Kanal varsayılanlarını ezer. |
disable_email_click_tracking | Bağlantılar yönlendirmeye çevrilmez. |
contents | MJML/HTML yoksa sade şablonla gövde olur. |
template_id | Sürümlü şablon; email_* alanları şablondan gelir. |
include_unsubscribed | Yalnızca işlemsel e-posta: abonelikten çıkmış adresler de hedeflenir (bounce/şikâyet/STOP bastırmaları korunur). |
Yalnızca e-posta gönderilen mesajda contents zorunlu değildir; email_subject + email_mjml/email_body yeterlidir. Liquid çıktıları HTML gövdede HTML kaçışlıdır; bilinçli ham HTML için {{ değer | raw }}. {{ unsubscribe_url }} teslimata özgü abonelikten çıkma bağlantısıdır. Önizleme: POST /v1/apps/{app_id}/templates/{id}/render (channel: "email" → subject, preheader, html, text).
Doğrudan adresler: target.email_to: ["ayse@example.com"] aboneliği olmayan adrese gönderir; anonim kullanıcı + abonelik oluşturulur.
İzleme ve abonelikten çıkma
Her e-postaya teslimata özgü, imzalı adresler eklenir (API_URL kökü):
| Adres | Davranış |
|---|---|
GET /t/o/{dlv} | 1×1 GIF; ilk istekte opened |
GET /t/c/{dlv}?u= | İmza hedef URL'yi kapsar; clicked + 302 (açık yönlendirme yok) |
GET /t/u/{dlv} | Onay sayfası (tr/en, açık/koyu); GET abonelikten çıkarmaz |
POST /t/u/{dlv} | RFC 8058 tek tık (List-Unsubscribe=One-Click) ve onay formu → abonelik unsubscribed, suppression unsubscribe_link |
Başlıklar: List-Unsubscribe, List-Unsubscribe-Post: List-Unsubscribe=One-Click, X-HS-Delivery-Id. Düz metin sürümü HTML'den üretilir.
Gelen geri bildirim (bounce, şikâyet, teslim)
Adres: Kanallar → E-posta → Webhook adresi (gizli token içerir; Yenile ile rotasyon). Biçim {API_URL}/hooks/email/{ses|resend|smtp|mock}/{token}.
| Sağlayıcı | Kurulum | Doğrulama | Olaylar |
|---|---|---|---|
| SES | Configuration set → SNS konusu → HTTPS aboneliği bu adrese | SNS imzası, TopicArn bölgesi kanal bölgesiyle aynı; abonelik otomatik onaylanır | Bounce (Permanent → bounce, diğerleri soft), Complaint, Delivery, Open, Click, Reject |
| Resend | Webhooks → endpoint = bu adres; signing secret → webhook_secret | Svix imzası (5 dk tolerans) | email.delivered/bounced/complained/opened/clicked/failed |
Genel (smtp, mock) | Kendi ESP/MTA'nızdan JSON POST | URL token'ı | { "type": "delivered|bounced|soft_bounced|complained|opened|clicked|failed|unsubscribed", "delivery_id"?, "provider_message_id"?, "address"?, "url"?, "error_code"?, "error_message"? } |
Etkiler: bounce → teslimat bounced, abonelik invalid, suppression bounce, webhook delivery.bounced (+ geriye uyum için delivery.failed, error_code: bounced) ve subscription.invalidated; complaint → suppression complaint, abonelik unsubscribed, delivery.complained. Senkron SMTP 550 de suppression bounce yazar. Aynı olayın tekrarı sayaçları ikinci kez artırmaz.
Yerel geliştirme
Mailpit (smtp://localhost:1025, arayüz http://localhost:8025): kanalı smtp, host localhost, port 1025, secure: false olarak kaydedip Doğrula. Mock e-postada yerel kısmı invalid/bounce → kalıcı ret, transient, rate, auth, fail, open (5 sn sonra açılma) ile başlayan adresler davranışı simüle eder.
Metrikler
/metrics: messaging_feedback_total{source,type} ve suppression_entries_total{channel,reason}; analitik raporlarında açılma/tıklama/bounce/şikâyet oranları (Analitik).
Konum tabanlı hedefleme
Kullanıcının izniyle cihaz konumunu alıp "şu noktanın X km yakınındakiler" segmentleri oluşturabilirsiniz (ADR-0025).
E-posta teslim edilebilirlik: ısındırma, adres doğrulama ve arşiv kopyası
Yeni bir gönderici alan adı veya IP ile büyük hacimde e-posta göndermek itibar kaybına ve spam klasörüne düşmeye yol açar. Pushizo bunun için ısındırma planları, gönderim öncesi adres doğrulama ve BCC/arşiv kopyası…