PHP'nin yerleşik mail() fonksiyonu, basit ve hızlı e-posta göndermek için pratik görünse de, modern e-posta sağlayıcılarının güvenlik standartlarını karşılamaz. Gmail, Outlook, Yandex Mail, Türk Telekom (TTMail) ve diğer sağlayıcılar, e-postanın gerçek bir kaynaktan geldiğini doğrulayan SPF, DKIM ve DMARC kayıtlarını kontrol ederler. mail() bu mekanizmaları uygun şekilde desteklemediğinden, gönderdiğiniz e-postalar spam klasöründe sona ermesi veya hiç gelmemesi riski vardır. Bu sorunun çözümü ise oldukça basittir: SMTP protokolünü kullanan uygun kütüphanelere geçmek.
PHP mail() Fonksiyonu Neden Spam'e Düşüyor?
mail() fonksiyonu, e-postaları doğrudan sunucunuzun sendmail veya postfix servisi üzerinden gönderir. Ancak bu yöntemin temel sorunu, gönderilen e-postanın kendi e-posta sunucunuzun adı altında değil, sunucunuzun hostname'i altında görünmesidir. Örneğin, siteniz example.com ise, mail() ile gönderilen e-postalar example.com'un yerine mail.hosting-provider.com gibi bir hostname ile gelecektir.
Bu durum, alıcı tarafındaki e-posta sunucuları için kırmızı bayraktır. Eğer gönderen hostname sizin alan adınızla eşleşmiyorsa, Google, Microsoft ve Yandex gibi sağlayıcılar bu e-postayı güvenilir olmayan bir kaynaktan geldiğini düşünür. İşte bu nedenle e-postanız spam klasöründe sona erer. Buna bir de İYS uyumluluğu (Türkiye'deki ticari e-posta yönetim sistemi) ve KVKK gereklilikleri eklendiğinde, eksik doğrulama kayıtları ciddi yasal ve operasyonel sorunlara yol açabilir.
SPF, DKIM ve DMARC: Nedir ve Neden Gereklidir?
E-posta doğrulaması üç ana mekanizmaya dayanır. Bu mekanizmaları anlamak, neden mail() sorun yaratır ve nasıl düzeleceğinizi açıklamanıza yardımcı olacaktır.
SPF (Sender Policy Framework): Sizin alan adınızdan gönderilen e-postaların hangi IP adreslerinden çıkabileceğini belirtir. Alıcı e-posta sunucusu, gelen e-postanın gönderen IP'sini SPF kaydıyla karşılaştırır. mail() ile gönderilen e-postalar genellikle hosting sağlayıcınızın IP'sinden çıktığı için, sizin SPF kaydınızda bu IP belirtilmişse doğrulama geçer—ancak çoğu durumda bu otomatik olarak ayarlanmaz.
DKIM (DomainKeys Identified Mail): E-postanın içeriğine sayısal bir imza ekler. Alıcı sunucu, bu imzayı sizin DKIM ortak anahtarınızla doğrular. Eğer e-posta transfer sırasında değiştirilmişse, imza başarısız olur. mail() kütüphane olarak DKIM desteği sağlamaz; bunu uygun bir SMTP sunucusu veya proxy yapmalıdır.
DMARC (Domain-based Message Authentication, Reporting, and Conformance): SPF ve DKIM sonuçlarını birleştirir. Eğer her ikisi de başarısız olursa, DMARC politikası belirttiğiniz şekilde (reject, quarantine, none) işlem yapar. Buna ek olarak, DMARC başarısızlıkları hakkında raporlar gönderir, böylece problem alanlarını tespit edebilirsiniz.
Çözüm 1: PHPMailer ile SMTP Kullanma
En doğrudan çözüm, mail() yerine SMTP protokolünü kullanan bir PHP kütüphanesi tercih etmektir. PHPMailer ve SwiftMailer gibi kütüphaneler, SMTP üzerinden e-posta gönderir ve sizin gönderen e-posta adresinizi ve doğrulama kayıtlarınızı doğru şekilde kullanır.
PHPMailer ile yapılan bir basit örnek:
<?php
require 'vendor/autoload.php';
use PHPMailer\PHPMailer\PHPMailer;
$mail = new PHPMailer(true);
try {
// SMTP Ayarları
$mail->isSMTP();
$mail->Host = 'smtp.gmail.com';
$mail->SMTPAuth = true;
$mail->Username = 'your-email@gmail.com';
$mail->Password = 'your-app-password';
$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
$mail->Port = 587;
// Gönderici Bilgileri
$mail->setFrom('no-reply@example.com', 'Şirketiniz');
$mail->addAddress('alici@example.com', 'Alıcı Adı');
// E-posta İçeriği
$mail->isHTML(true);
$mail->Subject = 'Sipariş Onayı';
$mail->Body = '<h1>Siparişiniz Onaylandı</h1>';
$mail->AltBody = 'Siparişiniz Onaylandı';
$mail->send();
echo 'E-posta başarıyla gönderildi';
} catch (Exception $e) {
echo "Hata: {$mail->ErrorInfo}";
}
?>Bu yöntemi kullanarak, e-posta kendi alan adınız altından gönderilir ve SPF/DKIM doğrulaması yapılabilir. Gmail, Microsoft 365, SendGrid, Amazon SES veya Mailgun gibi SMTP sağlayıcılarıyla bağlantı kurabilirsiniz.
Çözüm 2: WordPress Kullanıcıları İçin (WP Mail SMTP)
WordPress kullanan e-ticaret sitesi, blog veya LMS sahibiyseniz, sorun çözmek çok daha kolaydır. WP Mail SMTP eklentisi, Plugins > Yeni Ekle'den kurulabilir ve birkaç tıkla SMTP bağlantısını ayarlayabilirsiniz.
- WordPress yönetici paneline giriş yapın.
- Plugins > Yeni Ekle bölümünde "WP Mail SMTP" araştırın ve yükleyin.
- Settings > WP Mail SMTP'ye gidin.
- Mailer'ı Gmail, Outlook, SendGrid veya başka bir SMTP sağlayıcısı olarak seçin.
- Gönderici e-posta adresinizi ve SMTP kimlik bilgilerinizi girin.
- "Test E-postası Gönder" seçeneğini kullanarak doğrulayın.
WooCommerce mağazanız, Contact Form 7 temas formu, kullanıcı kaydı e-postaları ve şifre sıfırlama bağlantıları—tüm bunlar artık uygun SMTP üzerinden gönderilecek ve doğrulama mekanizmalarından geçecektir.
DNS Kayıtlarını Doğru Ayarlama
SMTP kütüphanesi kullanmaya başladıktan sonra, DNS kayıtlarınızı yapılandırmalısınız. Böylece alıcı sunucular, e-postanızın gerçekten size ait olduğunu doğrulayabilecektir.
SPF Kaydı Örneği:
v=spf1 include:_spf.google.com ~allBu kaydı DNS sağlayıcınızda (Namecheap, GoDaddy, Cloudflare vb.) TXT kayıt olarak ekleyin. Eğer SendGrid, Mailgun veya başka bir hizmet kullanıyorsanız, bu hizmetin SPF include kaydını ekleyin.
DKIM Kurulumu: DKIM anahtarı genellikle e-posta hizmet sağlayıcısı (Gmail, SendGrid, Mailgun vb.) tarafından sağlanır. Sağlayıcının kontrol panelinden DKIM kaydını alıp DNS'ye TXT kaydı olarak ekleyin.
default._domainkey.example.com IN TXT "v=DKIM1; k=rsa; p=MIGfMA0GCSq...kw=="DMARC Kaydı: Başlangıç olarak, aşağıdaki basit DMARC kaydı kullanın:
v=DMARC1; p=none; rua=mailto:dmarc@example.comBu kayıt, başarısızlıkları bildir (p=none), ancak e-postaları reddetme veya karantinaya alma yapma anlamına gelir. Test ettikten sonra, p=quarantine veya p=reject olarak değiştirebilirsiniz.
Test Etme ve Doğrulama
Yapılandırmanızı tamamladıktan sonra, gerçek e-posta sağlayıcılarında test etmelisiniz. check.live-direct-marketing.online gibi ücretsiz bir inbox placement test aracı, test e-postanızı Gmail, Outlook, Yandex Mail, TTMail ve diğer Türk sağlayıcılarında nasıl görüneceğini kontrol etmenizi sağlar.
Test sırasında dikkat ettiğiniz noktalar:
- Inbox vs Spam: Test e-postanız sağlayıcılarda Inbox'ta mı yoksa Spam'de mi görünüyor?
- SPF/DKIM Doğrulama: Test raporunuzda bu doğrulamalar "Pass" gösteriyor mu?
- DMARC: DMARC doğrulaması da geçiyor mu?
- Reklam Klasörü: Bazı sağlayıcılar e-postaları Promotions klasörüne yerleştirebilir. Bu, spam değildir.
Eğer hâlâ spam klasöründe görülüyorsanız, şunları kontrol edin:
- DNS kayıtlarınız doğru mu?
- SMTP kimlik bilgileriniz doğru mu?
- E-posta içeriğiniz spam tetikleyici sözcükler içeriyor mu?
- Listeden çıkma bağlantısı var mı? (RFC 8058)
Bütün bu kontroller yapıldıktan sonra, üretim ortamına geçebilirsiniz. İlk gönderimlerinizi ileri bir gönderme hızında değil, kademeli olarak başlatın (günde 100-200 e-posta gibi). Böylece ISP'ler sizin gönderme alışkanlığınızı tanıyabilecektir.
PHP mail() tamamen kötü müdür, bazı durumlarda kullanılabilir mi?
Yerel test ortamlarında veya admin bildirimlerinde mail() kullanılabilir. Ancak, müşterilere gönderilen sipariş onayları, şifre sıfırlama, pazarlama e-postaları ve diğer ticari iletişimler için mutlaka SMTP kütüphanesi kullanmalısınız. Türkiye'deki İYS ve KVKK gereklilikleri nedeniyle, tüm ticari e-postalar doğrulama mekanizmalarıyla gönderilmelidir.
Sadece SPF kaydı yeterli mi, DKIM ve DMARC da gerekli mi?
Teknisyen olarak, SPF + DKIM kombinasyonu çoğu durumda yeterlidir. Ancak, büyük e-posta sağlayıcıları DMARC'ı kontrol eder ve bu mekanizmaları yapılandırmış kuruluşlar daha güvenilir görünür. En iyi pratik: üçünü de ayarlayın. DMARC'ı başlangıçta p=none ile raporlama modunda tutabilir, daha sonra katılaştırabilirsiniz.
İYS uyumluluğu ile doğrulama kayıtları arasında bağlantı var mı?
Evet. İYS, Türkiye'de ticari e-posta ve SMS'ler için alıcıların açık rızasını gerektiren bir yönetim sistemidir. Eğer birisi İYS'de e-posta almayı reddetmişse, e-posta gönderilemez. Bununla birlikte, SPF/DKIM/DMARC yapılandırması, e-postaların spam filtrelerine takılmadan alıcılara ulaşmasını sağlar. İkisi de gereklidir: İYS uyumluluğu + düzgün teknik kurulum.