PHP mail genel bakış
mail() fonksiyonu PHP’ye entegre edilmiştir ve e-postaları doğrudan bir web sunucusundan göndermek için kullanılır. Bildirimler, iletişim formu mesajları, sipariş onayları ve diğer türdeki mesajları göndermenin basit bir yoludur.
Harici kütüphaneler kullanmadan temel e-posta işlevselliği için uygundur.
mail() Nasıl Çalışır
mail() fonksiyonunu çağırdığınızda, PHP e-postayı sunucuda kurulu olan sistemin posta transfer aracısına (MTA) iletir (genellikle Sendmail veya Postfix). MTA daha sonra mesajı işleyip belirtilen adrese teslim eder.
Sözdizimi
mail(to, subject, message, headers, parameters);
Parametreler
| Parametre | Açıklama |
|---|---|
| $to | Alıcının e-posta adresi. Virgülle ayrılmış birden fazla adres belirtebilirsiniz. |
| $subject | E-postanın konusu. Satır sonları içermemelidir. |
| $message | Mesajın ana gövdesi. |
| $headers | From, Reply-To, Cc, Bcc gibi ek başlıklar. |
| $parameters | Sendmail için göndereni belirtme gibi ekstra parametreler (-f). |
Basit Örnek
<?php $to = "user@example.com"; $subject = "Test Email"; $message = "Hello! This is a test email sent using PHP."; $headers = "From: webmaster@yourdomain.com"; mail($to, $subject, $message, $headers); ?>
Önemli Notlar
1. From: Başlığı Zorunludur
Eğer bir From: başlığı belirtmezseniz, çoğu posta sunucusu mesajı şüpheli veya spam olarak reddedecektir.
$headers = "From: noreply@yourdomain.com";
2. Çok Satırlı Mesajların Biçimlendirilmesi
Mesajınızdaki satırları ayırmak için rn kullanın:
$message = "Hello,rnrnThank you for your order.rnrnBest regards,rnYour Team";
3. Birden Fazla Başlık
Reply-To, Cc ve Bcc gibi birden fazla başlığı ayırmak için rn kullanın:
$headers = "From: admin@yourdomain.comrn"; $headers .= "Reply-To: support@yourdomain.comrn"; $headers .= "Cc: someone@yourdomain.comrn";
Örnek: HTML E-posta Gönderimi (Sadece Metin)
mail() fonksiyonu yerel olarak ekleri desteklemez. Ancak HTML e-postaları gönderebilir veya içerik türünü manuel olarak ayarlayabilirsiniz:
$headers = "MIME-Version: 1.0rn"; $headers .= "Content-type: text/html; charset=UTF-8rn"; $headers .= "From: info@yourdomain.com"; $message = "<h1>Hello!</h1><p>Your order has been received.</p>"; mail("user@example.com", "Order Confirmation", $message, $headers);
Yaygın Sorunlar ve Çözümler
| Problem | Neden / Çözüm |
|---|---|
| E-posta teslim edilmedi | Eksik From: başlığı veya sunucu IP’si kara listede |
| E-posta hiç gönderilmiyor | Hiçbir MTA kurulu değil (ör. Sendmail/Postfix gerekli) |
| Hata: mail() devre dışı bırakıldı | mail() php.ini’de devre dışı bırakıldı (genellikle host politikası nedeniyle) |
| Rusça metin ???? olarak görünüyor | Başlıklarda charset UTF-8 olarak ayarlanmamış |
| E-postalar spam klasörüne gidiyor | Yanlış From, SPF/DKIM yok, veya yanlış yapılandırılmış alan adı |
Sonuç
mail() fonksiyonu, PHP betiklerinden doğrudan e-posta göndermek için temel ama güçlü bir araçtır. Şunlardır:
- Kullanımı kolaydır
- Ek kütüphaneler gerektirmez
- İç bildirimler, iletişim formları ve otomatik yanıtlayıcılar için uygundur
Ancak, sınırlamalarını göz önünde bulundurmalısınız:
- Sunucunun posta yapılandırmasına bağlıdır
- Eklere destek vermez
- Bazı paylaşımlı barındırma ortamlarında varsayılan olarak devre dışı bırakılabilir
Eğer düzenli olarak e-posta göndermeyi planlıyorsanız, sunucunuzun çıkış postası için doğru şekilde yapılandırıldığından emin olun (Sendmail/Postfix kurulu, SPF/DKIM kayıtları ayarlanmış ve mail() php.ini’de etkinleştirilmiş olmalıdır).


