Form gönderildi yazıyor ama mail nerede?
WordPress iletişim formunun maili neden gelmez, neden spama düşer ve bir kahve süresinde nasıl düzelir

Merhaba arkadaşlar,

Şöyle bir sahne düşünün. Müşteri sitenizdeki formu dolduruyor, ekranda yeşil bir teşekkürler yazısı çıkıyor, siz de hiçbir şeyden habersiz kahvenizi içiyorsunuz. Üç gün sonra telefon çalıyor, hocam formdan yazdım kimse dönmedi. O an spam klasörünü açıyorsunuz ve sizi sabırla bekleyen bir yığın talep görüyorsunuz.

Forumda bu soru çok sık soruluyor ve cevabı hep aynı birkaç adıma çıkıyor. Hepsini tek konuda toplayayım dedim.

Alıntı
Kısaca
WordPress maili varsayılan olarak sunucunun PHP mail fonksiyonuyla, kimlik doğrulaması olmadan gönderir. Gmail, Outlook ve Yandex böyle maillere güvenmez. Çözüm alan adınıza ait bir mail hesabıyla SMTP üzerinden göndermek ve DNS'te SPF, DKIM, DMARC kayıtlarını düzgün kurmak. Sorun neredeyse hiçbir zaman Contact Form 7, WPForms, Elementor ya da MetForm'da değil, gönderim yolunda.
1. Alan adınıza ait bir mail hesabı açın

cPanel ya da Plesk üzerinden info@alanadiniz.com gibi bir hesap oluşturun. cPanel'de E-posta Hesapları ekranında hesabın yanındaki Cihazları Bağla bölümü SMTP sunucusunu ve portu gösterir. Genelde şöyle olur:

SMTP sunucu : mail.alanadiniz.com
Port 465    : SSL
Port 587    : TLS
Kullanıcı   : info@alanadiniz.com (tam adres)
Şifre       : mail hesabının şifresi
Doğru: 465 ile SSL, 587 ile TLS.
Yanlış: 465 ile TLS ya da 587 ile SSL. Bağlantı zaman aşımına düşer ve siz eklentiyi suçlarsınız.

2. SMTP eklentisini kurun

WP Mail SMTP, FluentSMTP ya da Post SMTP işinizi görür. Birini kurun, Diğer SMTP seçeneğini seçip yukarıdaki bilgileri girin. Gönderen adresi mutlaka aynı mail hesabı olsun.

Gmail ya da Yandex hesabıyla gönderecekseniz normal şifre çalışmaz. Hesapta iki adımlı doğrulamayı açıp bir uygulama şifresi oluşturun, eklentiye onu yazın.

3. Formun Kimden alanı, işin en sinsi kısmı

Kimden alanına ziyaretçinin mail adresini koymak çok yaygın. Bu durumda sunucunuz başka birinin alan adı adına mail atmış olur, alıcı servis de bunu sahtecilik gibi görür.

Yanlış: Kimden alanında ziyaretçinin mail etiketi var.
Doğru: Kimden sizin alan adınız, ziyaretçi sadece yanıt adresinde.

Contact Form 7 için formun Posta sekmesi şöyle olmalı:
Kime        : bildirimleri almak istediğiniz adres
Kimden      : Site Adı <info@alanadiniz.com>
Ek başlıklar: Reply-To: [your-email]
Elementor ve MetForm'da da mantık aynı. Gönderen sizin alan adınız, yanıt adresi ziyaretçi.

4. SPF, tek kayıt tek gerçek

DNS bölgesinde alan adınız için tek bir SPF kaydı olmalı. Hosting mail sunucusunu kullanıyorsanız cPanel'deki E-posta Teslim Edilebilirliği ekranı doğru kaydı önerir, Onar demeniz yeterli. Elle eklenecekse örnek:
v=spf1 +a +mx include:hostingfirmanizin-spf-adresi ~all
İki ayrı v=spf1 kaydı varsa ikisi de geçersiz sayılır. Birleştirip teke indirin.

5. DKIM ve DMARC

DKIM kaydını panel üretir, yine E-posta Teslim Edilebilirliği ekranında görünür. DNS'iniz Cloudflare'deyse panelin verdiği default._domainkey kaydını oraya TXT olarak ekleyin. Hosting panelindeki DNS o zaman devrede değil. DMARC için başlangıçta şu yeterli:
_dmarc  TXT  v=DMARC1; p=none; rua=mailto:info@alanadiniz.com
Test zamanı
  1. SMTP eklentisinin test mailini Gmail adresinize gönderin.
  2. Gelen mailde üç nokta menüsünden Orijinali göster deyin. SPF, DKIM ve DMARC satırlarında PASS görmelisiniz.
  3. Sonra formu siteden gerçekten doldurun. Test maili gidip form maili gitmiyorsa sorun formun Kimden alanındadır.
  4. Eklentinin mail kaydı özelliğini açın. Hangi mail gitti, hangisi hata verdi, panelden görürsünüz.

Orijinali göster ekranında ne görmelisiniz
Her şey yolundaysa Gmail üst kısımda buna benzer üç satır gösterir:
SPF:   PASS with IP 203.0.113.10
DKIM:  'PASS' with domain alanadiniz.com
DMARC: 'PASS'
SPF'te SOFTFAIL görüyorsanız mail, kayıtta izin verilmeyen bir sunucudan çıkıyor demektir. Kayda o sunucuyu ekleyin. DKIM satırı hiç yoksa DNS'e eklediğiniz kayıt yayılmamış ya da yanlış alt alan adına yazılmıştır.

DMARC'ı p=none ile başlatıp birkaç hafta raporları izleyin. Her şey PASS geliyorsa p=quarantine'e geçebilirsiniz. Doğrudan p=reject ile başlamak kendi meşru maillerinizi de kapıdan çevirebilir.


En sık yapılan 5 hata
  • İki SPF kaydı. Biri hostingden kalma, biri yeni eklenmiş. Sonuç ikisi de yok hükmünde.
  • Turuncu bulutta mail kaydı. Cloudflare kullanıyorsanız mail. kaydı gri bulutta, yani sadece DNS modunda olmalı.
  • Unutulan şifre. Mail şifresi değişti, eklentideki aylardır eski.
  • Kapalı port. Bazı hostinglerde dışarıya 465 ve 587 kapalı. Bağlantı hep zaman aşımına düşüyorsa desteğe sorun.
  • Otomatik cevap. Ziyaretçiye giden otomatik yanıtta da Kimden kuralı geçerli, orayı atlamayın.
Mini quiz

SMTP eklentisinde hosting mail hesabınız tanımlı ama formun Kimden alanına kendi Gmail adresinizi yazdınız. Test maili sorunsuz gidiyor, form maili spama düşüyor. Neden?


Cevap: Mail sizin sunucunuzdan çıkıyor ama gmail.com adına geliyor gibi görünüyor. gmail.com'un SPF kaydında sizin sunucunuz yok ve DKIM imzası da gmail.com'a ait değil, DMARC uyumu bozuluyor. Kimden adresini alan adınızdaki hesap yapın, Gmail adresinizi Kime alanına yazın. Bu kadar.


Kendi kontrol listeniz
  • Alan adına ait mail hesabı açıldı
  • SMTP eklentisi kuruldu, port ve şifreleme eşleşti
  • Formun Kimden alanı alan adınızdaki hesap
  • Tek SPF kaydı var
  • DKIM ve DMARC eklendi
  • Orijinali göster ekranında üç PASS görüldü
Sizin mailleriniz en son nereye düştü? Anketten bir oy bırakın, takıldığınız yer varsa hangi form eklentisini kullandığınızı ve test mailinde aldığınız hatayı aşağıya yazın, birlikte bakalım.