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.
En basit şekliyle mail komutunun kullanımı şu şekilde:
mail(‘ensei@tankado.com’, ‘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) ‘ensei@tankado.com’, 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.
- Herhangi bir SMTP mailer script’i.
- Bir eposta hesabi ve parolası.(ensei@tankado.com, parola: vn7360nv736)
- Epostamızın kayıtlı olduğu sunucunun IP adresi. (ping tankado.com)
Bazı SMTP Mailer scriptleri:
- http://xpertmailer.sourceforge.net/ (SSL desteği ile Gmail hesaplarınızı da kullanabilirsiniz)
- http://sourceforge.net/projects/phpmailer (SSL desteği ile Gmail hesaplarınızı da kullanabilirsiniz)
- http://mohanjith.net/SMTPMailer/
- http://email.about.com/od/emailprogrammingtips/qt/et073006.htm (PEAR Mail gerektirir)
- http://www.swiftmailer.org/
AÅŸağıdaki örnekte ‘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.
require 'class.phpmailer.php';
require 'class.pop3.php';
$pop = new POP3();
$pop->Authorise('pop.tankado.com', 110, 30, 'ensei@tankadocom', 'vn736Onv736′, 1);
$mail = new PHPMailer();
$mail->IsSMTP();
$mail->SMTPDebug = 2;
$mail->IsHTML(false);
$mail->Host = 'tankado.com';
$mail->From = 'ensei@tankado.com';
$mail->FromName = 'Ensei Tankado';
$mail->CharSet = 'iso-8859-9';
$mail->Subject = 'Merhaba dostum';
$mail->Body = 'Beraber, 22 şubatta Recep İvediği izleyeceğiz degil mi?';
$mail->AddAddress('admin@nsa.gov', 'Mr. Big Brother');
if (!$mail->Send()) {
echo $mail->ErrorInfo;
}
Umarım yararlı olur. Sorularınız varsa TDK’nın kurallarına uygun olarak aÅŸağıya yazabilirsiniz.
Turkish
English
Chinese


Öncelikle teşekkür ediyorum. Scripti kullanmaya başladım. Ancak bütün yazılar ardarda geliyor. yani paragrafları tanımıyor. Bu problemi çözebildniz mi?
Merhaba, sanırım maili HTML biçimli göndermek ihtiyacınızı karşılayacaktır. Bunun için; $mail->IsHTML(true); ayarı ile HTML mail göndermek istediğinizi belirttikten sonra
göndereceÄŸiniz mesaj içindeki enter karakterlerini HTML formuna (br etiketi) çevirmeniz yeterli olacaktır. $mail->Subject = str_replace(“\n”, “”, “Burada mesaj metni olacak”);
Teşekkürler, uzun aramaların sonunda sayenizde php ile mail gönderebildim. Ama Türkçe karakter sorunu için headers olarak mesaja nasıl ekleme yapabiliriz?
Öncelikle ilginiz için teÅŸekkür ederim. phpmailer’ın dökümanları içerisinde CharSet isminde bir özelliÄŸin olduÄŸunu farkettim. Yukarıdaki örnek kodu buna uygun olarak güncelledim. Umarım doÄŸru çalışır.
Uyarınız için çok teşekkür ederim.
Merhaba, yorum bölümünüz için kullanıcıların Türkçe yazmasına özen göstermesini istemişsiniz ancak bu sizin için geçerli değil sanırım. Sayfalarınızda "mail" yerine e-posta "link" yerine bağlantı gibi Türkçe kelimeleri kullanabilirsiniz. Ayrıca "iki thread bir olunca heap seyran olur" bu cümle de yakışmamış.
Öncelikle kendi hatalarınızı düzeltmenizi tavsiye ederim.