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.
phpmailer türkçe karakter sorunu (19), php mail türkçe karakter sorunu (15), php pop3 Mail gönderme (6), phpmailer türkçe karakter (5), Swift Mailer (4), swiftmailer kullanimi (3), php smtp mail script (3), php mail gönderme scripti (3), php mail gönderme örneği indir (2), php mailde türkçe karakter sorunu (2), php mail gönderme türkçe karakter (2), php ile mail gönderme smtp ayarlı script (2), php smtp türkçe karakter sorunu (2), phpmailer subject to türkçe karakter (2), php farklı adrese mail gönderme (2)
Turkish
English
Chinese


Bu kodlar ile mail göndermeye çalıştığımda HTTP500 İç Sunucu Hatası alıyorum neden olabilir acaba
Ö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.