PushizoDocs
Kanallar

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
smtphost, port, secure (465 TLS / STARTTLS), username, password, gönderici alanlarıSMTP EHLO + kimlik (verify); özel ağ adresleri reddedilir, IP sabitlenir (SSRF)
sesregion, access_key_id, secret_access_key, configuration_set, gönderici alanlarıGET /v2/email/account (SigV4)
resendapi_key, webhook_secret (whsec_…, isteğe bağlı), gönderici alanlarıGET /domains
mockisteğe bağlı from_address, from_nameher 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ı

AlanAçıklama
email_subjectKonu (Liquid). Yoksa headings kullanılır.
email_mjmlMJML kaynağı (Liquid → MJML derlemesi). mj-include dosya erişimi kapalıdır.
email_bodyHazır HTML (Liquid). MJML yoksa kullanılır.
email_preheaderGelen kutusu önizleme metni (gizli ön başlık).
email_from_name, email_from_address, email_reply_to_addressKanal varsayılanlarını ezer.
disable_email_click_trackingBağlantılar yönlendirmeye çevrilmez.
contentsMJML/HTML yoksa sade şablonla gövde olur.
template_idSürümlü şablon; email_* alanları şablondan gelir.
include_unsubscribedYalnı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ü):

AdresDavranış
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ıKurulumDoğrulamaOlaylar
SESConfiguration set → SNS konusu → HTTPS aboneliği bu adreseSNS imzası, TopicArn bölgesi kanal bölgesiyle aynı; abonelik otomatik onaylanırBounce (Permanent → bounce, diğerleri soft), Complaint, Delivery, Open, Click, Reject
ResendWebhooks → endpoint = bu adres; signing secret → webhook_secretSvix imzası (5 dk tolerans)email.delivered/bounced/complained/opened/clicked/failed
Genel (smtp, mock)Kendi ESP/MTA'nızdan JSON POSTURL 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).

Bu sayfada