Arif

WFN Üye
Konular
714
Mesajlar
714
Çözüm
0
Ticaret Puanı
0
Üyelik
24 Gün
Konum
Bilecik
Web Sitesi
Var
Alanı
SEO Uzmanı
1/1
Konu sahibi
PHP ile e-posta göndermenin en kısa yolu, sunucunuzda bir posta aktarım hizmeti yapılandırılmışsa mail() işlevini kullanmaktır. Ancak mail() yalnızca iletiyi yerel sendmail programına veya yapılandırılmış SMTP sunucusuna teslim eder; true dönmesi, iletinin alıcının gelen kutusuna ulaştığını kanıtlamaz. Daha güvenilir teslimat, SMTP kimlik doğrulaması, HTML ileti ve ek dosya gerektiren uygulamalarda SMTP destekli bir e-posta kütüphanesi tercih edilmelidir.

Basit bir metin e-postası gönderme​


Önce alıcı adresini, konuyu, ileti metnini ve gönderen adresini hazırlayın. Gönderen adresini kullanıcıdan gelen ham veriyle doğrudan başlığa eklemeyin; aksi hâlde e-posta başlığı enjeksiyonu riski oluşabilir. Aşağıdaki örnek varsayımsaldır ve sunucunuzda posta gönderme hizmetinin çalıştığını kabul eder:

PHP:
<?php
$alici = '[email protected]';
$konu = 'Web sitesinden mesaj';
$mesaj = "Merhaba,\r\n\r\nBu ileti PHP ile gönderildi.";

$basliklar = [
    'From' => '[email protected]',
    'Reply-To' => '[email protected]',
    'Content-Type' => 'text/plain; charset=UTF-8'
];

$gonderildi = mail($alici, $konu, $mesaj, $basliklar);

if ($gonderildi) {
    echo 'İleti gönderim için kabul edildi.';
} else {
    echo 'İleti gönderilemedi.';
}

Burada From adresi, alan adınızda gerçekten kullanabildiğiniz bir adres olmalıdır. Kullanıcının formda yazdığı adresi From yerine koymak yerine, kendi alan adınızdaki sabit adresi gönderen olarak kullanıp kullanıcının adresini Reply-To başlığında değerlendirmek daha güvenlidir.

Sunucuyu gönderime hazırlama​


Linux sunucularda PHP genellikle sendmail_path ile tanımlı bir yerel posta programına ihtiyaç duyar. Windows ortamında ise php.ini içindeki SMTP, smtp_port ve sendmail_from ayarları kullanılabilir. Bu ayarların değiştirilmesinden sonra PHP-FPM, Apache veya ilgili web sunucusu hizmetini yeniden başlatmanız gerekebilir.
  • Linux'ta sendmail veya uyumlu bir posta aktarım aracının kurulu ve sendmail_path değerinin doğru olması gerekir.
  • Windows'ta SMTP sunucusu, port ve gönderen adresi php.ini içinde tanımlanmalıdır.
  • Sunucunun dış SMTP bağlantısına, özellikle kullanılan porta, güvenlik duvarı tarafından izin verilmelidir.
  • Gönderen adresi, kullandığınız alan adı ve posta hizmetinin kurallarıyla uyumlu olmalıdır.
Bu ayarlar yoksa PHP kodu doğru olsa bile ileti gönderilemez. phpinfo() çıktısı veya sunucunun PHP yapılandırması üzerinden etkin php.ini dosyasını kontrol edin; farklı PHP çalıştırma ortamları farklı yapılandırma dosyaları kullanabilir.

Sonucu nasıl yorumlamalısınız?​


mail() true döndürürse ileti, PHP'nin kullandığı posta aktarım bileşenine teslim edilmek üzere kabul edilmiştir. Bu sonuç, alıcının adresinin doğru olduğunu, iletinin spam klasörüne düşmeyeceğini veya alıcı sunucusunun iletiyi kabul ettiğini göstermez. Teslim edilememe, DNS, gönderen doğrulaması, itibar, içerik veya alıcı sunucusunun politikaları gibi daha sonraki aşamalarda gerçekleşebilir.

false sonucu ise PHP'nin iletiyi gönderim bileşenine teslim edemediğini gösterir. Bu durumda önce PHP hata günlüğünü, sendmail_path değerini, SMTP bilgilerini, port erişimini ve gönderen adresini kontrol edin. Uygulama bir formdan veri alıyorsa alıcı adresinin geçerli biçimde olduğunu ve başlıklara satır sonu karakteri eklenmediğini de doğrulayın.

Aynı uygulamada çok sayıda ileti gönderilecekse mail() işlevini büyük bir döngü içinde kullanmak uygun değildir; her ileti için bağlantı açılıp kapatılması verimsiz olabilir. Toplu veya işlem açısından kritik gönderimlerde SMTP kimlik doğrulaması ve bağlantı yönetimi sağlayan bir kütüphane kullanın. Bu yaklaşım hata ayrıntılarını, HTML gövdesini, ekleri ve SMTP sunucusunun yanıtlarını mail() işlevine göre daha kontrollü yönetmenizi sağlar.

Metin ve HTML ileti arasında seçim​


Yalnızca düz metin gönderecekseniz Content-Type: text/plain; charset=UTF-8 yeterlidir. HTML göndermek istediğinizde ileti gövdesini HTML olarak hazırlayıp içerik türünü text/html; charset=UTF-8 yapmanız gerekir. Kullanıcıdan gelen metni doğrudan HTML içine yerleştirmeyin; önce uygun HTML kaçışlama işlemi uygulayın. Aksi hâlde e-posta içinde istenmeyen HTML veya komut içeriği oluşabilir.

Gönderim testinde önce kendi kontrol ettiğiniz bir adrese ileti yollayın. true sonucu görülüp ileti ulaşmıyorsa yalnız PHP kodunu değiştirmek yerine posta aktarım aracının günlüğünü, SMTP sunucusunun yanıtını ve alıcının spam/karantina klasörünü birlikte inceleyin. Sorun hizmet sağlayıcıya bildirilecekse alıcı adresi, gönderim zamanı, PHP'nin döndürdüğü sonuç, hata günlüğündeki ilgili kayıt ve kullanılan SMTP yanıt kodunu paylaşın; SMTP parolasını veya uygulama gizli anahtarlarını paylaşmayın.
 

Sende şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Foruma git ?

Bu konuyu görüntüleyen kullanıcılar

Bu konuyu şu anda görüntüleyen üye bulunmuyor.
Robotlar:
  • Anthropic