Php ile mail atmayı, ezberci bir zihniyetle değil, her kodunu ayrı ayrı inceleyerek ve uygulayarak bu yazımda göstermeye çalışacağım

Bir Websitesi yazıyorsanız mail atmak üye olurken register kodu göndermek, yada bilgilendirme yaparken kullanmak zorunda olduğunuz bir uygulama. İnternette birçok yerde php ile nasıl mail atabileceğinizi bulabilirsiniz benim amacım o hazır kodlardaki gibi copy-paste değil her kodu ayrıntısı ile anlatıp tam kavranmasına yardımcı olmak.

Unutmayın Bu yazının tam anlaşılması için temel php bilgisine sahip olmanız gerekmektedir.

İlk Önce Çok teknik kısmına inmeden bir mail sisteminin çalışma mantığını anlatalım. Bir Mail içinde mesajı, alıcı adresi- gönderen adres- konusu gibi bilgilerin bulunduğu bir dosya halinde mail servera ilgili port üzerinden iletilir. Yani biz mail göndereceğimiz zaman interface bizim yazdığım subject,messages,from,to gibi bilgileri belli bir hiyearşi ve standarlar içinde bir klasör (metin mesajı) haline dönüştürüp karşı tarafa gönderir. Karşı taraftaki server’da bu mesajı alır, sistemine entegre eder, sonra kullanıcısının hesabına ekler.

Php’de Mail Göndermek alltaki kodla yapılabilmektedir:

mail(to,subject,message,headers,parameters)
şeklinde ifade edebileceğimiz kodun ayrıntılı açılımı
bool mail ( string $to , string $subject , string $message [, string $additional_headers [, string $additional_parameters ]]
dır yani bool geri döndürür, to,subject,message değişkenini string alır ve parameters-headersleri dizi olarak alabilir.
TO
Herkesin bildiği gibi alıcı mail adresidir. abc@abc.com gibi dilerseniz
user@example.com, anotheruser@example.com
User <user@example.com>
User <user@example.com>, Another User <anotheruser@example.com>
gibi olabilir (RFC2822 nolu internet protokol duyurusuna bakabilirsiniz)
SUBJECT
Mailinize konu kısmında yazılması için string türünden bir değişken gönderiyorsunuz. Unutmayın, alt satıra geçme gibi kodlar olmamalı.  RFC 2047 ‘ye uygun olmasına önem gösterin.
Message
Mailin mesaj bölümü, bu makalede en fazla değineceğimiz yer. Çünkü artık tablo şeklinde image’lerden oluşan görsel maillerden, değişik linkler veya kişiye özel bilgiler içeren maillere kadar birçok özellik var. Satır başı 70 karakteri geçmemeye çalışın.
Özellik 1) $text =” satır1 satır1 satır1 \n satır2 satır2 satır2″;  “\n” alt satıra geçirmeye yarar
Header
Header mailin başında belirtilen bazı bilgileri girmek için kullanılır, mesela kimden geldiği gibi. dikkat ederseniz üsteki kodlarda kimden geldiği şuana kadar belirtilmedi.
$headers = “From:” . $from;
ile kendi adınızada mail gönderebilirsiniz. Çok çok mühim bir ayrıntı değil. Aslında header olmadan mail gitmez, burada muhim değil dememin özelliği header yazmazsanız server’in ismi header olarak gidiyor zaten. Header Zorunlu.
Additional_Header
Ekstra Bilgiler.
$headers .= “Cc: ikincimail@domain.com \r\n”;
$headers .= “Bcc: ucuncumail$domain\r\n”;
$headers .= “Reply-To: myplace2@here.com\r\n”;
$headers .= “Return-Path: myplace@here.com\r\n”;
gibi header’lere ekleyeceğiniz bilgiler ile CC ve BCC’yi belirliyebilirsiniz.
Sonuç
Bildiğiniz gibi php metodlarında bool yani boolen , true veya false ile  bize sonucu bildirir, true=doğru mail gönderildi, false= sorun var mail gönderilmedi denilmektedir.
Örnek1 (Temel)
En Basit Mail Gönderme Örneğidir. Tüm diğer örnekler bu örnekten türemiştir.

<?php
$Mesaj= “Satır1 \n Satır2 \n Satır3”;
mail(‘amungen@wordpress.com’, ‘Benim Konum’, $Mesaj);
?>

Not: EasyPhp gibi default from mail adresi olmayan bir localserver’da çalıştırırsanız hata verebilir, hatayı önlemek için headers from tagı ekleyin

Örnek2 (HTML)

$message = ‘
<html>
<head>
<title>Agustos İçin Doğum Günü Hatırlatması</title>
</head>
<body>
<p>Agustosa gelirken, Agustos ayındaki Doğum günleri</p>
<table>
<tr>
<th>Kişi</th><th>Gün</th><th>Ay</th><th>Yıl</th>
</tr>
<tr>
<td>Joe</td><td>3rd</td><td>August</td><td>1970</td>
</tr>
<tr>
<td>Sally</td><td>17th</td><td>August</td><td>1973</td>
</tr>
</table>
</body>
</html>
‘;

//HTML Mail göndermek için gerekli bazı header’ler
$headers  = ‘MIME-Version: 1.0’ . “\r\n”;
$headers .= ‘Content-type: text/html; charset=iso-8859-1’ . “\r\n”;

// Ek Headerler Uygulaması
$headers .= ‘To: Alıcı<alici@example.com>, Alici2<alici2@example.com>’ . “\r\n”;
$headers .= ‘From: Doğum Günü Hatıratması <birthday@example.com>’ . “\r\n”;
$headers .= ‘Cc: birthdayarchive@example.com’ . “\r\n”;
$headers .= ‘Bcc: birthdaycheck@example.com’ . “\r\n”;

Örnek3(Attach)

Header; $headers .= “\r\nContent-Type: multipart/alternative;

Php Dosyasının İçine:
$attachment = file_get_contents(‘attachment.zip’);
$encoded = base64_encode($attachment);
$attached = chunk_split($encoded);

Mesaj Satırına:

Content-Type: application/zip; name=”attachment.zip”
Content-Transfer-Encoding: base64
Content-Disposition: attachment
{$attached}

Örnek 4(Resim ekleme)

$headerPic = ‘<IMG height=148 src=”http://www.interfacedesigns.c­ om.au/mop/images/camera.gif”>’;­

TR Karakter Sorunu
Eğer mailiniz gönderiliyor ama mailinizde gelince tr karakterler sorun oluyorsa alttaki kod çözüm olacaktır.

$headers .= “Content-type: text/html; charset=iso-8859-9\r\n”;

Ekstra Bilgiler
1) ezmlm_hash()  Fonksiyoun EZMLM mail listesi sistemi tarafından gerekli olan hash değerini hesaplar.
2)Windows için default smtp “localhost” default port:25 dir “PHP_INI_ALL” dosyasından değiştirilebilir.
3)http://phpmailer.worxware.com/ gibi hazır php scriptleride kullanabilirsiniz mail atmak için.
4) Büyük bir liste gibi alıcılara mail göndermek için http://pear.php.net/package/Mail
Kaynakça:
Reklamlar