İçeriğe geç
Approvalens

Rehberler · 8 dk okuma

SPF, DKIM ve DMARC Nedir? Site Sahipleri İçin Kısa Kurulum

İletişim formu ya da bülten maili spam'e mi düşüyor? SPF, DKIM ve DMARC sade dille, Gmail ve Yahoo kuralları, tek SPF kaydı ve güvenli DMARC geçişi.

Approvalens ekibi

İletişim formundan ya da bülteninden giden mailler spam klasörüne düşüyorsa, karşı taraftaki sunucu büyük ihtimalle mailin gerçekten senin alan adından geldiğini doğrulayamamıştır. Bunu doğrulatan üç DNS kaydı var. SPF, alan adın adına mail göndermesine izin verilen sunucuları listeler. DKIM, mailin sahte olmadığını ve yolda değişmediğini kanıtlayan bir imza ekler. DMARC ikisini de okurun "Kimden" satırında gördüğü adrese bağlar ve kontroller başarısız olursa ne yapılacağını söyler. Gmail Şubat 2024'ten beri her gönderenden en az SPF ya da DKIM istiyor, toplu gönderenlerden üçünü birden. Küçük bir site de üçünü kurmalı; bir kerelik, bir saatlik iş.

SPF, DKIM ve DMARC sade dille

SPF, alan adındaki bir TXT kaydı: senin adına kimin mail gönderebileceğinin listesi. Alıcı sunucu maili teslim eden IP'ye bakar, gönderen alan adının SPF kaydını okur ve o IP listede mi diye kontrol eder.

ornek.com.  TXT  "v=spf1 include:_spf.google.com include:spf.hosting.example.com ~all"

DKIM bir imza. Mail sağlayıcın giden her maili gizli bir anahtarla imzalar, sen de eşleşen açık anahtarı DNS'te s1._domainkey.ornek.com gibi bir adla yayınlarsın. Alıcı anahtarı çeker ve imzayı kontrol eder. Mail yolda değiştirildiyse ya da başka yerden taklit edildiyse imza tutmaz.

DMARC bunların üstündeki politika. Google'ın gönderen yönergeleri açıkça söylüyor: "DMARC, alıcı sunuculara SPF veya DKIM koşullarını karşılamayan iletilerinizle ne yapılacağını söyler." Taklidi zorlaştıran kuralı da DMARC ekliyor: "Kimlik doğrulamasını yapan alan, iletinin "From:" üstbilgisindeki alanla aynı olmalıdır" (E-posta gönderen yönergeleri). Buna hizalama (alignment) deniyor. SPF ya da DKIM'in başka bir alan adı için geçmesi sayılmaz.

_dmarc.ornek.com.  TXT  "v=DMARC1; p=none; rua=mailto:dmarc@ornek.com"
Alıcı mail sunucusunun merhaba@ornek.com'dan gelen bir maili nasıl kontrol ettiği: SPF zarf alan adının TXT kaydını okuyup gönderen IP 203.0.113.25'in listede olup olmadığına bakar; DKIM s1._domainkey.ornek.com'daki açık anahtarı çekip d=ornek.com imzasını doğrular; DMARC bunlardan en az birinin Kimden adresindeki alan adı için geçip geçmediğine bakar ve p=none, quarantine ya da reject politikasını uygular; sonuç gelen kutusu, spam klasörü ya da ret
SPF ve DKIM "bu gönderen yetkili mi?" sorusunu cevaplar. DMARC, cevaplardan birinin Kimden satırındaki alan adıyla ilgili olup olmadığını sorar.

Gmail ve Yahoo 2024'ten beri ne istiyor?

Google'ın E-posta gönderen yönergeleri: "1 Şubat 2024'ten itibaren, Gmail hesaplarına e-posta gönderen tüm gönderenlerin bu bölümdeki koşulları karşılaması zorunlu olacaktır." Herkes için ilk koşul "Gönderen alanınız için SPF veya DKIM e-posta kimlik doğrulaması ayarlanmalıdır"; yanında gönderen IP için geçerli ileri ve ters DNS, TLS bağlantısı ve %0,3'ün altında spam oranı var.

Toplu gönderenlerden daha fazlası isteniyor: "Alanınız için SPF ve DKIM e-posta kimlik doğrulaması ayarlanmalıdır" ve "Gönderen alanınız için DMARC e-posta kimlik doğrulaması ayarlanmalıdır. DMARC yaptırım politikanız "none" olarak ayarlanabilir." Pazarlama maillerinde tek tıkla abonelikten çıkma da şart. Google'ın SSS sayfası toplu göndereni şöyle tanımlıyor: "24 saat içinde kişisel Gmail hesaplarına 5.000'e yakın veya daha fazla ileti gönderen herhangi bir e-posta gönderenidir." Ve ekliyor: "Gmail, Kasım 2025'ten itibaren koşulları karşılamayan trafikle ilgili kurallarını sıkılaştıracak. E-posta gönderenlere ilişkin koşulları karşılamayan iletiler, geçici veya kalıcı olarak teslim edilmeyecek."

Yahoo'nun gönderen kuralları da aynı yönde: herkes için "Implement SPF or DKIM at a minimum", toplu gönderenler için ikisi birden ve "Publish a valid DMARC policy with at least p=none".

Küçük bir blogun bülteni günde 5.000'e yaklaşmaz. Yine de üçünü kur. Google'ın kendisi "E-posta teslimini iyileştirmek için alanlarınızda her zaman SPF, DKIM ve DMARC ayarlarını yapmanızı öneririz" diyor ve uyarıyor: "Bu yöntemler kullanılarak kimliği doğrulanmayan iletiler spam olarak işaretlenebilir veya 5.7.26 hatası ile reddedilebilir."

İletişim formu mailleri neden spam'e düşüyor?

En sık gördüğümüzden başlayarak:

Form maili ziyaretçinin adresinden "gönderiyor"

Ziyaretçi forma ayse@gmail.com yazıyor, eklenti de mesajı sana From: ayse@gmail.com olarak gönderiyor. Web sunucunun gmail.com adına mail gönderme yetkisi yok; SPF ve DKIM bu Kimden alan adıyla hizalanamaz, DMARC başarısız olur. Google bunu herkes için geçerli koşullar arasında sayıyor: "Gmail "From:" üstbilgilerinde başka bir Gmail adresinin kimliğine bürünülmemelidir."

Form eklentisinin ayarlarından düzelt: Kimden (From) adresi kendi alan adında bir adres olsun (form@ornek.com), ziyaretçinin adresi Yanıtla (Reply-To) alanına gitsin. Yine tek tıkla cevap verirsin.

Mail paylaşımlı hostingde PHP mail() ile çıkıyor

WordPress maili wp_mail() ile gönderir; bir eklenti değiştirmediyse bu PHP'nin mail() fonksiyonunu kullanır (kaynak kodda açıkça // Set to use PHP's mail(). yazıyor) ve gönderen wordpress@ alan adın olur (wp_mail belgesi). Paylaşımlı hostingde bu, mailin web sunucusunun IP'sinden çıkması demek. Geçip geçmeyeceği hostinge bağlı: o IP SPF kaydında var mı, sunucu alan adın için DKIM imzası atıyor mu, o IP'den başka neler gönderiliyor? Google'ın paylaşılan IP notu: "Paylaşılan IP adresi kullanan tüm gönderenlerin etkinlikleri, söz konusu paylaşılan IP için tüm gönderenlerin itibarını etkiler."

Kalıcı çözüm: maili gerçek bir posta kutusu üzerinden SMTP ile gönder. Bir SMTP eklentisi kur, mail sağlayıcına (hostingin mail sunucusu, Google Workspace, Yandex 360, Zoho ya da benzeri) gerçek bir posta kutusunun bilgileriyle bağla ve Kimden adresini o kutu yap. SPF ve DKIM o zaman sağlayıcının işi olur ve bütün maillerin için bir kez kurulur.

İki ayrı SPF kaydı

Bir bülten servisine kaydolurken ikinci bir v=spf1 kaydı eklemek klasik hata. SPF standardı RFC 7208: "A domain name MUST NOT have multiple records that would cause an authorization check to select more than one record"; birden fazla kayıt bulunursa kontrol "permerror" sonucunu verir (RFC 7208). Yani iki kayıt da bozuk sayılır. Tek kayıtta birleştir:

# yanlış: iki kayıt
"v=spf1 include:spf.hosting.example.com ~all"
"v=spf1 include:spf.bulten.example.com ~all"

# doğru: tek kayıt, iki gönderen
"v=spf1 include:spf.hosting.example.com include:spf.bulten.example.com ~all"

(spf.bulten.example.com yerine bülten servisinin sana verdiği include'u yaz. Bazı servisler kendi dönüş adresiyle gönderdiği için SPF include'u hiç istemez; kurulum sayfaları hangisi olduğunu söyler.)

SPF'te çok fazla DNS sorgusu

Her include:, a, mx, ptr, exists ve redirect= bir DNS sorgusu demek, include'ların içindeki include'lar da sayılır. RFC 7208 bölüm 4.6.4 sınırı koyuyor: "SPF implementations MUST limit the total number of those terms to 10 during SPF evaluation". 10'u aşarsan sonuç yine "permerror". ip4: ve ip6: sayılmaz. Artık kullanmadığın servislerin include'larını sil; o sunucular mail göndermiyorsa a ve mx'i de çıkar.

Hiç DKIM yok

Mail yönlendirildiğinde (forward) tek başına SPF bozulur, çünkü yönlendiren sunucu senin kaydında yok. DKIM yönlendirmeden sağ çıkar. Senin adına gönderen her serviste aç ve anahtar uzunluğuna bak: Google'a göre "Kişisel Gmail hesaplarına gönderim için 1.024 bit veya daha uzun bir DKIM anahtarı gerekir"; 2.048 bit öneriliyor.

DKIM'i Türk hostinglerinde ve sık kullanılan servislerde açmak

  • cPanel (Türkiye'deki hostinglerin çoğu): Email » Email Deliverability (Türkçe arayüzde E-posta bölümünde). Her alan adının SPF ve DKIM durumunu ve önerilen kayıtları yazan bir Repair düğmesi gösterir (cPanel belgeleri). Belgelere göre sistem alan adının DNS kayıtlarını yönetmiyorsa Repair kullanılamıyor. DNS'in Cloudflare'de ya da alan adı firmasındaysa önerilen DKIM ve SPF değerlerini Manage ekranından kopyalayıp oraya elle ekle.
  • Plesk: Websites & Domains (Web Siteleri ve Alan Adları) > alan adın > Mail sekmesi > Mail Settings, "Use DKIM spam protection system to sign outgoing email messages" kutusunu işaretle (Plesk belgeleri). DNS dışarıdaysa Plesk kopyalanacak kayıtları gösterir.
  • Google Workspace, Yandex 360, Zoho, bülten servisleri: hepsinde bir veya iki DNS kaydı (TXT ya da CNAME) veren bir "alan adı doğrulama" sayfası var. Kayıtları birebir ekle, servis "doğrulandı" diyene kadar bekle.

Sık karıştırılan nokta: DNS kayıtları sadece alan adının nameserver'larının gösterdiği yerde geçerli. Nameserver'ların Cloudflare'deyse hosting panelinde eklediğin kayıt hiçbir şey yapmaz.

DMARC'ye mail kaybetmeden geçmek

Google'ın önerilen DMARC geçişi şu uyarıyla başlıyor: "DMARC'yi ayarlamadan en az 48 saat önce DKIM ve SPF'yi ayarlayın." Sonra:

  1. Raporlu p=none, en az bir hafta. Google: "İletiler normal şekilde teslim edilir. İletilerin reddedilme veya spam olarak işaretlenme riski yoktur." rua= adresine her gün senin alan adınla mail gönderen her sunucuyu ve geçip geçmediğini gösteren XML raporları gelir.
  2. Raporların gösterdiğini düzelt. Genelde unutulmuş bir gönderen: mağazanın sipariş mailleri, hostingin sunucu bildirimleri, eski bir bülten aracı.
  3. p=quarantine'e geç. Başarısız mailler gelen kutusu yerine spam'e gider. Google'ın sayfası pct= ile (örneğin pct=5) kademeli artırmayı öneriyor. Ancak Mayıs 2026 tarihli güncel DMARC standardı RFC 9989, alıcıların "pct" etiketini çoğunlukla doğru uygulamadığı gerekçesiyle ("the "pct" tag was usually not accurately applied") etiketi kaldırdı. İki üç göndereni olan küçük bir sitede yüzde adımını atlardık: birkaç haftalık raporlar her şeyin geçtiğini gösterince bütün mailler için p=quarantine'e geç.
  4. p=reject blog için isteğe bağlı. Taklidi tamamen durdurur ama unuttuğun bir gönderen sessizce düşer.
ornek.com için örnek DNS kayıtları: iki include'lu ve ~all ile biten tek bir SPF TXT kaydı, s1._domainkey'de açık anahtarlı bir DKIM TXT kaydı ve _dmarc'ta p=none ve rua rapor adresli bir DMARC TXT kaydı; altta kırmızıyla iki sık hata: SPF'i permerror yapan ikinci bir v=spf1 kaydı ve DMARC hizalamasını bozan, iletişim formunda gmail.com'lu bir Kimden adresi
Üç kayıt, her birinden bir tane. İkinci SPF kaydı gönderen eklemez, SPF'i bozar.

Kontrol et

Terminalden:

dig +short TXT ornek.com | grep spf1
dig +short TXT s1._domainkey.ornek.com
dig +short TXT _dmarc.ornek.com

s1 yerine sağlayıcının seçicisini (selector) yaz; DKIM kurulum sayfasında ya da bir mailin DKIM-Signature başlığındaki s= kısmında bulursun.

Sonra iletişim formundan bir Gmail adresine test maili gönder, aç ve Diğer (üç nokta) > Orijinali göster'e tıkla. Sayfanın üstünde SPF, DKIM ve DMARC sonuçları PASS ya da FAIL olarak yazar. SPF geçtiği halde DMARC başarısızsa alan adlarına bak: SPF büyük ihtimalle senin değil hostingin alan adı için geçmiştir.

Bunun sitenle bağlantısı

Cevaplarını gerçekten gelen kutusuna ulaştıran bir iletişim adresi, inandırıcı bir iletişim sayfasının parçası; okurların ve inceleyenlerin orada neye baktığını Hakkımızda ve iletişim sayfaları rehberinde anlattık. Bülten için e-posta adresi topluyorsan gizlilik politikanda bunu belirtmen gerekir.

Kayıtlarını ücretsiz kontrol et

Ücretsiz SPF ve DMARC kontrolü alan adının SPF ve DMARC kayıtlarını okur, SPF sorgularını sayar, ikinci bir SPF kaydını ya da eksik DMARC politikasını işaretler.

Sık sorulan sorular

Haftada birkaç mail gönderiyorum, DMARC'ye ihtiyacım var mı?

Google sadece toplu gönderenlerden istiyor, yani onsuz da idare edersin. Biz yine de rapor adresli p=none yayınlardık: hiçbir maliyeti yok, raporlar alan adınla mail gönderen herkesi gösterir ve Google her alan adı için öneriyor.

~all ile -all arasındaki fark ne?

~all yumuşak ret: listede olmayan sunuculardan gelen mail şüpheli sayılır ama sadece SPF yüzünden reddedilmez. -all kesin ret. DMARC kuruluysa genelde ~all seçilir, çünkü ne olacağına DMARC politikası karar verir.

Alan adı için bir, alt alan adı için ayrı SPF kaydı olabilir mi?

Evet. Tek kayıt kuralı her ad için ayrı geçerli. ornek.com ve bulten.ornek.com'un ayrı SPF kayıtları olabilir.

Alan adımdan hiç mail gönderilmiyor. Yine de kurmalı mıyım?

Evet, başkalarının kullanmasını engellemek için. Hiç mail göndermeyen alan adlarında v=spf1 -all ve v=DMARC1; p=reject; yayınla.

Hem hostingde hem Cloudflare'de DNS kayıtlarım var. Hangisi geçerli?

Sadece alan adının nameserver'larının gösterdiği DNS sağlayıcısı. Nameserver'lar Cloudflare'inse kayıtları Cloudflare'e ekle; hosting panelindekiler devrede değil.

Eskimiş ya da yanlış bir şey mi gördün? Bize yaz, düzeltelim.

Bu rehberi İngilizce oku →

Kendi sitende kontrol et. Ücretsiz, kayıt yok.

Bunun için ücretsiz araçlar

Ücretsiz tarama

Kendi siteni kontrol et

Ücretsiz tarama ilk 50 sayfayı okur; puanını ve bulduğu tüm sorunları gösterir.

İlk 50 sayfa ücretsiz · üyelik yok · kart gerekmez

Tüm rehberler