PHP ile garantili mail göndermek

PHP’nin resmi sayfasında mail komutunun kullanımı hakkında şu bilgiler yer alıyor:

Kullanımı:

bool mail  ( string $to  , string $subject  , string $message  [, string $additional_headers  [, string $additional_parameters  ]] )

Mail komutunda kullanılması zorunlu parametreler:

  • $to: PHP ile mail göndereceğiniz kişinin adresi. Tipi string’dir.
  • $subject: Mail’in konusu. Tipi string’dir.
  • $message: Göndermek istediğiniz mail’in içeriği. Tipi string’dir.

Not: String tipine Türkçe’mizde bazen katar bazen de karakter dizgesi adı verilmektedir.

Dördüncü ve beşinci parametrelerin kullanılması zorunlu olmamakla birlikte görevlerini kısaca söyle açıklayabiliriz.

  • $additional_headers: Bu kısımda, gönderen adresi, karbon kopya (CC) adresi ve gizli karbon kopya (BCC) adresi gibi adresler belirtilebilir. CC adresi, gönderilen mailin bir kopyasının da (karbon kopya) başka bir adrese gönderilmesini sağlar. CC alıcısı gelen mail’in başlık bilgilerinden mail’in asıl alıcısının kim olduğunu görebilir.  BCC, CC ye benzemekle birlikte, tek farkı, asıl alıcı ile CC alıcısının mail’in bir kopyasının da BCC adresine gönderildiğini bilememesidir. Mail sunucusu başlık bilgilerine bu adresi dahil etmez. Bu kısımın da veri tipi String’dir.
  • $additional_parameters: SendMail yazılımına parametre yollamak için kullanılıyormuş. Ayrıntısını şimdilik bilemeyeceğim.

PHP’nin resmi sayfasında mail komutunun kullanımı hakkında şu bilgiler yer alıyor:

Kullanımı:

bool mail ( string $to  , string $subject  , string $message  [, string $additional_headers  [, string $additional_parameters  ]] )

Mail komutunda kullanılması zorunlu parametreler:

  • $to: PHP ile mail göndereceğiniz kişinin adresi. Tipi string’dir.
  • $subject: Mail’in konusu. Tipi string’dir.
  • $message: Göndermek istediğiniz mail’in içeriği. Tipi string’dir.

Not: String tipine Türkçe’mizde bazen katar bazen de karakter dizgesi adı verilmektedir.

Dördüncü ve beşinci parametrelerin kullanılması zorunlu olmamakla birlikte görevlerini kısaca söyle açıklayabiliriz.

  • $additional_headers: Bu kısımda, gönderen adresi, karbon kopya (CC) adresi ve gizli karbon kopya (BCC) adresi gibi adresler belirtilebilir. CC adresi, gönderilen mailin bir kopyasının da (karbon kopya) başka bir adrese gönderilmesini sağlar. CC alıcısı gelen mail’in başlık bilgilerinden mail’in asıl alıcısının kim olduğunu görebilir.  BCC, CC ye benzemekle birlikte, tek farkı, asıl alıcı ile CC alıcısının mail’in bir kopyasının da BCC adresine gönderildiğini bilememesidir. Mail sunucusu başlık bilgilerine bu adresi dahil etmez. Bu kısımın da veri tipi String’dir.
  • $additional_parameters: SendMail yazılımına parametre yollamak için kullanılıyormuş. Ayrıntısını şimdilik bilemeyeceğim.


En basit şekliyle mail komutunun kullanımı şu şekilde:

mail(‘[email protected]’, ‘Merhaba dostum’, ‘Beraber, 22 şubatta Recep İvediği izleyeceğiz degil mi?’);

http://tr2.php.net/manual/en/function.mail.php (PHP nin resmi sayfası)

HTML içerikli mail ve gönderilen mail’e dosya ekleme ile ilgili örnekler PHP.net’in yukarıdaki adresteki sayfasında var.

mail() komutuna ait örnek kodlar yüksek ihtimalle sunucunuzda çalışmayacak. Üzgünüm. Çalışmamasının sebebi paylaşımlı sunucunuzun güvenlik ayarlarının buna izin vermemesi. İzin verseydi mail spamcıları bayram ederdi, değilmi. Çünkü basitçe bir döngü ile çok sayıda mail göndermek mümkün olabilirdi. Ek olarak SendMail yazılımına da bu şekilde kolayca yük bindirmek, sunucunun IP adresini antispamlarin kara listesine aldirmak kolay olurdu. Bunun olması, aynı sunucuda binlerce domain’in barındırıldığı paylaşımlı (Shared) hostinglerde,  birçok siteyi olumsuz etkilerdi.

Not: Sunucunuzun antispam kara listesinde olup olmadığını dnsstuff.com adresindeki “Spam Database Lookup” formundan sorgulayabiliyorsunuz.

PHP ile gönderdiğiniz Mail’lerin karşıya ulaşmamasının bir başka nedeni de, mail’in geldiği IP adresi ile gönderen adresin alan adinin uyusmamasi.

Ornegin; mail’i gönderen php scripti 194.27.18.27 IP adresli bilgisayarda calisiyor olsun. Gönderen  adresi (from) ‘[email protected]’, karşı tarafın adresi de (to) ‘tankado@yahoo.com‘ olsun. Yahoo bir DNS sorgusu calistirarak tankado.com‘un IP adresinin 194.27.18.27 olmadigini yani gelen mail’in gerçekten de tankado.com sunucusundan gönderilmediğini kolayca anlayabilecektir. Sonuçta Yahoo bu mesajı ya bulk’a atar veya geri dönderir. (Eğer sender adres belirtmişse mesaj bu adrese geri gelir)

Not: alıcısına ulaşmayan e-posta’lar sahibine geri gönderilir. Tıpkı gerçek mektuplarda olduğu gibi elektronik mektuplarda da işleyiş bu şekildedir. Yeterki doğru bir gönder adresi olsun.

Sadede gelirsem, php mail’lerinin gecerli bir mail hesabi uzerinden gönderilmesi en sağlıklı yöntemdir. Sunucuda gecerli bir adres kullanmakta yetmez o adresin sahibi olduğunu sunucuya kanıtlamanız gerekir. Bunu da kullandığınız mail adresinin parolası ile sunucuda mail gönderim (smtp) oturumu açarak yapabilirsiniz. Aksi durumda sunucuda host edilen herhangi bir domain’e ait mail adresini de kullanabilecektiniz. Ama yüksek ihtimalle sunucunuzun konfigürasyonu buna izin vermiyor.

Aslında size garantili olarak mail gönderebilmek için aşağıdakiler gerekli ve yeterli.

  1. Herhangi bir SMTP mailer script’i.
  2. Bir eposta hesabi ve parolası.([email protected], parola: vn7360nv736)
  3. Epostamızın kayıtlı olduğu sunucunun IP adresi. (ping tankado.com)


Bazı SMTP Mailer scriptleri:

  1. http://xpertmailer.sourceforge.net/ (SSL desteği ile Gmail hesaplarınızı da kullanabilirsiniz)
  2. http://sourceforge.net/projects/phpmailer (SSL desteği ile Gmail hesaplarınızı da kullanabilirsiniz)
  3. http://mohanjith.net/SMTPMailer/
  4. http://email.about.com/od/emailprogrammingtips/qt/et073006.htm (PEAR Mail gerektirir)
  5. http://www.swiftmailer.org/


Aşağıdaki örnekte phpmailer‘i kullandım. Gerekli adres ve parola bilgilerini değiştirerek siz de kullanabilirsiniz. Bu script hosting’imizin mail sunucusuna bağlanıyor, mail ve parolamızla giriş yapıyor ve $to adresine mesajımızın gönderilmesini söylüyor.

Umarım yararlı olur. Sorularınız varsa TDK’nın kurallarına uygun olarak aşağıya yazabilirsiniz.




Yazar: Özgür Koca

Yazar - Tankado.com

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Bu site, istenmeyenleri azaltmak için Akismet kullanıyor. Yorum verilerinizin nasıl işlendiği hakkında daha fazla bilgi edinin.