Email Service
İşlemsel e-posta gönderir ve alır; Workers binding’i, REST API veya SMTP ile.
- DurumAçık beta
- FiyatGiden e-posta sayısı; gelen e-posta ücretsiz ve sınırsız
- Doğrulama
Email Service nedir?
Her uygulama er ya da geç e-posta gönderir: şifre sıfırlama, sipariş onayı, uyarı bildirimi. Bunun için genelde üçüncü taraf bir sağlayıcıya abone olunur.
Cloudflare Email Service bu ihtiyacı aynı platform içinde karşılar. İki parçası vardır:
| Parça | Ne yapar | Durum |
|---|---|---|
| Email Routing | Alan adına gelen e-postayı mevcut kutuna yönlendirir | Genel kullanımda, ücretsiz, sınırsız |
| Email Sending | Uygulamandan giden işlemsel e-postayı gönderir | Beta, Workers Paid gerektirir |
Nasıl çalışır?
Üç gönderim yolu
| Yol | Nasıl | Ne zaman |
|---|---|---|
| Workers binding | env.EMAIL.send() | Worker içinden gönderiyorsan |
| REST API | POST /accounts/{account_id}/email/sending/send | Cloudflare dışından, herhangi bir dilden |
| SMTP | smtps://smtp.mx.cloudflare.net:465 | Mevcut uygulamanın yalnızca SMTP ayarı değiştirilebiliyorsa |
Yeni kod yazıyorsan binding veya REST API tercih et; SMTP daha çok eski uygulamaları taşımak için vardır.
Doğrulanmış hedefler ayrı bir kategori
Bu, fiyatlandırmanın en önemli ayrıntısıdır:
“Sends to verified destination addresses are free and do not count toward the included quota.”
Yani hesabında doğrulanmış bir adrese gönderim her planda ücretsizdir ve kotaya sayılmaz. Kendine sistem uyarısı göndermek, bir iç ekibe rapor yollamak gibi senaryolar bu kapsamda kalır. Ayrıca bu adreslere gönderimde mesaj boyutu sınırı 5 MiB yerine 25 MiB’dır.
Teslim edilebilirlik
Gönderim yapacağın alan adının doğrulanması gerekir. İşlemsel e-posta teslim edilebilirliği üç DNS kaydına dayanır:
| Kayıt | Ne yapar |
|---|---|
| SPF | Hangi sunucuların senin adına gönderebileceğini beyan eder |
| DKIM | Mesajı kriptografik olarak imzalar |
| DMARC | SPF ve DKIM başarısız olursa alıcının ne yapacağını söyler |
Cloudflare kurulum sırasında gereken kayıtları panelde gösterir. Alan adın zaten Cloudflare DNS’inde ise kayıtlar tek tıkla eklenebilir.
Ne zaman kullanılır, ne zaman kullanılmaz
Uygun olduğu işler
- Şifre sıfırlama, doğrulama kodu, sipariş onayı gibi işlemsel e-postalar
- Sistem uyarıları ve iç bildirimler (özellikle doğrulanmış adreslere — ücretsiz)
- Gelen e-postayı bir Worker ile işleyip yanıtlayan akışlar
- Alan adındaki e-posta adreslerini mevcut kutuya yönlendirme (Email Routing)
Uygun olmadığı işler
- Ücretsiz plan. Giden e-posta kullanılamaz.
- Pazarlama e-postası ve bülten. Bu ürün işlemsel e-posta için tasarlandı; kampanya yönetimi, segmentasyon, açılma takibi gibi özellikler yok. Türkiye’de ticari elektronik ileti ayrıca İYS yükümlülüğü doğurur.
- Yüksek hacimli toplu gönderim. Günlük kota muhafazakâr başlar ve kademeli artar.
- Tek başına kritik yol. Beta olduğu için şifre sıfırlama gibi kritik akışlarda yedek sağlayıcı düşünmek gerekir.
- 50’den fazla alıcıya tek mesaj. Sınır sert; bölmek gerekir.
Somut örnekler
1. Worker’dan işlemsel e-posta
export default {
async fetch(request, env) {
const { eposta, kod } = await request.json();
await env.EMAIL.send({
from: { email: "bildirim@sirket.com", name: "Şirket" },
to: [{ email: eposta }],
subject: "Doğrulama kodunuz",
text: `Doğrulama kodunuz: ${kod}\n\nBu kod 10 dakika geçerlidir.`,
html: `<p>Doğrulama kodunuz: <strong>${kod}</strong></p>
<p>Bu kod 10 dakika geçerlidir.</p>`,
});
return Response.json({ gonderildi: true });
},
};
wrangler.jsonc:
{
"name": "eposta-worker",
"main": "src/index.ts",
"compatibility_date": "2026-08-31",
"send_email": [{ "name": "EMAIL" }]
}
2. Cloudflare dışından REST API ile
curl -X POST \
"https://api.cloudflare.com/client/v4/accounts/$HESAP_ID/email/sending/send" \
-H "Authorization: Bearer $CF_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"from": { "email": "bildirim@sirket.com", "name": "Şirket" },
"to": [{ "email": "kullanici@ornek.com" }],
"subject": "Siparişiniz onaylandı",
"text": "Siparişiniz hazırlanıyor."
}'const res = await fetch(
`https://api.cloudflare.com/client/v4/accounts/${HESAP_ID}/email/sending/send`,
{
method: "POST",
headers: {
Authorization: `Bearer ${process.env.CF_TOKEN}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
from: { email: "bildirim@sirket.com", name: "Şirket" },
to: [{ email: "kullanici@ornek.com" }],
subject: "Siparişiniz onaylandı",
text: "Siparişiniz hazırlanıyor.",
}),
},
);
if (!res.ok) throw new Error(`e-posta gönderilemedi: ${res.status}`);import os, requests
res = requests.post(
f"https://api.cloudflare.com/client/v4/accounts/{HESAP_ID}/email/sending/send",
headers={"Authorization": f"Bearer {os.environ['CF_TOKEN']}"},
json={
"from": {"email": "bildirim@sirket.com", "name": "Şirket"},
"to": [{"email": "kullanici@ornek.com"}],
"subject": "Siparişiniz onaylandı",
"text": "Siparişiniz hazırlanıyor.",
},
)
res.raise_for_status()3. Kuyrukla toplu gönderim — alıcı sınırını aşmadan
50 alıcı sınırı sert olduğu için toplu bildirimler kuyruğa alınmalıdır.
export default {
// Üretici: gönderilecekleri kuyruğa yaz
async fetch(request, env) {
const { alicilar, konu, govde } = await request.json();
for (let i = 0; i < alicilar.length; i += 50) {
await env.EPOSTA_KUYRUGU.send({
grup: alicilar.slice(i, i + 50),
konu,
govde,
});
}
return Response.json({ kuyruga_alindi: alicilar.length });
},
// Tüketici: her grubu tek mesajda gönder
async queue(batch, env) {
for (const mesaj of batch.messages) {
const { grup, konu, govde } = mesaj.body;
try {
await env.EMAIL.send({
from: { email: "bildirim@sirket.com", name: "Şirket" },
to: grup.map((e) => ({ email: e })), // en fazla 50
subject: konu,
text: govde,
});
mesaj.ack();
} catch (h) {
mesaj.retry(); // kuyruk yeniden dener
}
}
},
};
4. Gelen e-postayı işleme
export default {
async email(mesaj, env, ctx) {
const gonderen = mesaj.from;
const konu = mesaj.headers.get("subject") ?? "";
// Destek talebi gibi görünüyorsa kaydet ve otomatik yanıt gönder
if (konu.toLocaleLowerCase("tr").includes("destek")) {
await env.DB.prepare(
"INSERT INTO talepler (gonderen, konu, alindi) VALUES (?, ?, ?)",
).bind(gonderen, konu, Date.now()).run();
await env.EMAIL.send({
from: { email: "destek@sirket.com", name: "Destek" },
to: [{ email: gonderen }],
subject: `Re: ${konu}`,
text: "Talebiniz alındı. En kısa sürede dönüş yapacağız.",
});
return;
}
// Diğerlerini insan ekibe ilet
await mesaj.forward("ekip@sirket.com");
},
};
Demo 1: Alan adı doğrulama ve ilk gönderim
Adım 1 — Alan adını Email Sending için yapılandır
Panel → Email → Email Sending → alan adı ekle.
Adım 2 — Binding’i tanımla ve gönder
npx wrangler deploy
curl -X POST https://<worker>/gonder \
-H 'content-type: application/json' \
-d '{"eposta":"test@ornek.com","kod":"123456"}'
Adım 3 — Teslim edilebilirlik başlıklarını incele
Gelen e-postanın kaynağını aç ve Authentication-Results başlığına bak.
Adım 4 — Panelde kullanımı izle
Demo 2: Gelen e-postayı işleyen akış
Adım 1 — Email Routing kuralı kur
Adım 2 — Worker’ın email handler’ını çalıştır
Adım 3 — Otomatik yanıtı doğrula
Adım 4 — Sınırları test et
51 alıcılı bir mesaj göndermeyi dene.
Ölçüm
| Ölçüt | Değer |
|---|---|
| SPF / DKIM / DMARC sonucu | — |
| Gönderimden gelen kutusuna süre | — |
| Doğrulanmış adrese gönderim kotayı tüketti mi | — |
| 50 alıcı sınırında dönen hata | — |
| Spam klasörüne düştü mü | — |
Fiyatlandırma
Rakamlar 31 Ağustos 2026’da resmî dokümandan doğrulanmıştır.
| Workers Free | Workers Paid | |
|---|---|---|
| Giden e-posta | Kullanılamaz | Ayda 3.000 dahil, sonrası 1.000 e-posta başına 0,35 USD |
| Gelen e-posta (Email Routing) | Sınırsız | Sınırsız |
| Doğrulanmış hedeflere gönderim | Ücretsiz, kotaya sayılmaz | Ücretsiz, kotaya sayılmaz |
Dahil kota abonelik faturalama döngüsüne göre hesap başına uygulanır. Reddedilen API gönderimleri — bastırma listesine takılanlar dahil — kotaya sayılmaz.
Limitler
| Sınır | Değer |
|---|---|
| Alıcı sayısı | 50 (to + cc + bcc toplamı) |
| Konu satırı | 998 karakter |
| Mesaj boyutu | 5 MiB (doğrulanmış hedeflere 25 MiB) |
| Gelen mesaj boyutu | 25 MiB |
| Özel başlıklar toplamı | 16 KB |
| Zone başına alan adı | 30 (Routing + Sending ortak) |
| Alan adı başına yönlendirme kuralı | 200 |
| Hesap başına doğrulanmış hedef adres | 200 |
Lisanslama ve hukuki çerçeve
Email Service tescilli bir hizmettir; Cloudflare Hizmet Şartları ve Kabul Edilebilir Kullanım Politikası kapsamındadır. İstenmeyen e-posta gönderimi politikaya aykırıdır.
Türkiye’ye özgü yükümlülük — İYS. Bu, e-posta gönderiminde Türkiye’de en çok gözden kaçan konudur ve Cloudflare bunu sağlamaz:
- İşlemsel e-posta (şifre sıfırlama, sipariş onayı, fatura) — kullanıcının kendi eylemine yanıt olarak gönderilir, ticari ileti sayılmaz.
- Ticari elektronik ileti (kampanya, bülten, tanıtım) — Türkiye’de İleti Yönetim Sistemi (İYS) kaydı, onay yönetimi ve ret hakkı sunma yükümlülüğü doğurur.
Bu ürün işlemsel e-posta için tasarlanmıştır. Ticari ileti gönderecekseniz İYS uyumluluğunu ayrıca çözmeniz gerekir.
Veri işleme. Gönderdiğiniz e-postaların içeriği ve alıcı adresleri Cloudflare üzerinden geçer. Kişisel veri içeriyorsa Veri İşleme Ek Sözleşmesi ve alt işleyici listesi incelenmelidir.
Sık yapılan hatalar
Ücretsiz planda gönderim beklemek. Giden e-posta Workers Paid gerektirir; ücretsiz planda yalnızca doğrulanmış hedeflere gönderim çalışır.
DNS kayıtlarını eksik bırakmak. SPF, DKIM veya DMARC eksikse mesajlar spam klasörüne düşer
veya hiç teslim edilmez. Gönderim öncesi Authentication-Results başlığını mutlaka kontrol et.
50 alıcı sınırını fark etmemek. to, cc ve bcc toplamı 50’yi geçemez. Toplu bildirimde
kuyruk kullan.
Büyük dosyaları ek olarak göndermek. 5 MiB sınırı düşüktür. Dosyayı R2’ye koyup imzalı bağlantı göndermek hem sınırı aşar hem teslim edilebilirliği artırır.
Bounce’ları yönetmemek. Kalıcı olarak bounce eden adreslere göndermeye devam etmek gönderim itibarını düşürür ve kotayı boşa harcar.
Beta ürünü kritik yolda tek başına kullanmak. Şifre sıfırlama gibi akışlarda yedek sağlayıcı düşünün.
İşlemsel ile ticari iletiyi karıştırmak. Türkiye’de ikincisi İYS yükümlülüğü doğurur ve bu ürün onu çözmez.
Sıkça sorulan sorular
- Email Service GA mi?
- İkiye ayırmak gerekiyor. Email Routing (gelen e-posta) genel kullanımda ve hem ücretsiz hem ücretli planlarda var. Email Sending (giden işlemsel e-posta) ise “Beta for outbound transactional emails” olarak işaretli ve Workers Paid planı gerektiriyor. Yani gelen taraf olgun, giden taraf beta.
- Ücretsiz planda e-posta gönderebilir miyim?
- Hayır. Giden e-posta için resmî fiyat tablosunda Workers Free planı karşısında “Not available” yazıyor. Tek istisna var ve önemli: “Sends to verified destination addresses are free and do not count toward the included quota.” Yani hesabındaki doğrulanmış adreslere gönderim her planda ücretsizdir — kendine bildirim göndermek gibi senaryolar için bu yeterli olabilir.
- Kaç e-posta gönderebilirim, ne kadara?
- Workers Paid planında ayda 3.000 e-posta dahil, sonrası 1.000 e-posta başına 0,35 USD. Gelen e-posta (Email Routing) her iki planda da sınırsız ve ücretsiz. Reddedilen API gönderimleri — bastırma listesine takılanlar dahil — kotaya sayılmaz.
- Günlük gönderim sınırım ne?
- Resmî dokümantasyon sabit bir günlük kota yayımlamıyor. Bunun yerine şu yaklaşımı anlatıyor: “start with a conservative daily quota and scale up.” Yani hesabın muhafazakâr bir kotayla başlar ve gönderim itibarın oluştukça artar. Daha yüksek kota için Cloudflare’in limit artırma formu var. Toplu gönderim planlıyorsan bunu önceden hesaba kat.
- Üç erişim yolundan hangisini seçmeliyim?
- Workers binding (
env.EMAIL.send()) — Worker içinden gönderiyorsan; en az gecikme, ek kimlik bilgisi yok. REST API (POST /accounts/{account_id}/email/sending/send) — Cloudflare dışından, kendi sunucundan veya başka bir dilde yazılmış bir uygulamadan. SMTP (smtps://smtp.mx.cloudflare.net:465) — mevcut bir uygulamanın SMTP ayarlarını değiştirmekten başka bir şey yapamıyorsan. Yeni kod yazıyorsan binding veya REST API tercih et. - Bir e-postada kaç alıcı olabilir?
- 50 — ve bu sayı
to,ccvebccalanlarının toplamıdır. Daha fazla alıcıya ulaşman gerekiyorsa e-postayı bölmen ve muhtemelen bir kuyruk kullanman gerekir. - Mesaj boyutu sınırı nedir?
- Standart gönderimde 5 MiB. Doğrulanmış hedef adreslere gönderimde 25 MiB. Gelen e-postada da 25 MiB. Konu satırı en fazla 998 karakter, tüm özel başlıklar toplamı en fazla 16 KB. Büyük ekler için dosyayı R2'ye koyup bağlantı göndermek daha sağlıklıdır.
- Teslim edilebilirlik için ne yapmam gerekiyor?
- Gönderim yapacağın alan adının Cloudflare’de doğrulanması gerekir. Genel olarak işlemsel e-posta teslim edilebilirliği üç DNS kaydına dayanır: SPF (hangi sunucular senin adına gönderebilir), DKIM (mesajın imzalanması) ve DMARC (ikisi başarısız olursa ne yapılacağı). Cloudflare kurulum sırasında gereken kayıtları panelde gösterir. Kurulum adımlarını demo bölümünde birlikte yapacağız.
- Türkiye'den gönderimde ek bir sorun var mı?
- Teknik olarak fark yok — teslim edilebilirlik alan adının itibarına ve DNS kayıtlarının doğruluğuna bağlıdır, gönderenin ülkesine değil. Ancak ticari elektronik ileti gönderiyorsan Türkiye'de İYS (İleti Yönetim Sistemi) kaydı ve onay yönetimi ayrı bir yükümlülüktür ve Cloudflare bunu sağlamaz. İşlemsel e-posta (şifre sıfırlama, sipariş onayı) ile ticari ileti (kampanya, bülten) arasındaki ayrım burada kritiktir.
- Email Routing ile Email Sending aynı ürün mü?
- Aynı çatı altında iki ayrı yetenek. Email Routing alan adına gelen e-postayı mevcut kutuna yönlendirir — ücretsiz, sınırsız, genel kullanımda. Email Sending uygulamandan e-posta gönderir — beta, ücretli. İkisi birlikte kullanıldığında uygulaman çift yönlü e-posta yapabilir: gelen mesajı bir Worker işler, yanıtı yine Worker gönderir.
- Bir alan adında kaç yapılandırma olabilir?
- Zone başına 30 alan adı — Email Routing ve Email Sending için ortak toplam. Ayrıca alan adı başına 200 yönlendirme kuralı ve hesap başına 200 doğrulanmış hedef adres.
- Bounce ve şikâyetleri nasıl yönetiyorum?
- Cloudflare bir bastırma listesi tutuyor ve bu listeye takılan gönderimler kotana sayılmıyor. Bu, itibarını koruyan otomatik bir mekanizma. Yine de kendi tarafında kalıcı bounce alan adresleri işaretlemek ve tekrar denememek iyi bir alışkanlıktır — özellikle 3.000'lik aylık kotayı boşa harcamamak için.
- Beta olması ne anlama geliyor, üretimde kullanmalı mıyım?
- Beta etiketi API'nin değişebileceği ve SLA taahhüdü olmadığı anlamına gelir. Şifre sıfırlama veya sipariş onayı gibi kritik işlemsel e-postalar için tek gönderim yolunuz bu olmamalı; en azından bir yedek sağlayıcı düşünün. Düşük riskli bildirimler ve iç araçlar için beta yeterlidir.
İlgili servisler
- WorkersJavaScript/TypeScript/Python kodunu Cloudflare’in 330+ şehirdeki sunucularında, sunucu yönetmeden çalıştırır.
- Email RoutingAlan adındaki e-posta adreslerini ücretsiz olarak mevcut kutuna yönlendirir. Artık Cloudflare Email Service’in içinde.
- Queuesİşleri kuyruğa alıp arka planda batch ve garantili biçimde işler.
- WorkflowsSaatler veya günler süren çok adımlı işleri, adım bazında kalıcı state ve otomatik retry ile yürütür.
- R2S3 uyumlu object storage — çıkış (egress) trafiği ücretsiz.
Bu sayfadaki fiyat ve özellik bilgileri 31 Ağustos 2026 tarihinde Cloudflare’in resmî kaynaklarından doğrulanmıştır. Cloudflare fiyatlandırmasını önceden haber vermeden değiştirebilir; bağlayıcı bilgi içinresmî sayfaya bakın.