Php’de mail göndermek için iki farklı yol mevcut. Php’nin dahili olarak gelen mail() fonksiyonunu kullanmak veya SMTP üzerinden göndermek. Bunlardan ikincisi olan SMTP yoluyla gönderilen e-postaların güvenilirliği ve doğruluğu daha yüksek oluyor. E-postalarınızın spam(gereksiz) kutusuna düşmesini istemiyorsanız SMTP protokolünü kullanmanızı tavsiye ederim. SMTP’nin daha güvenilir olmasının sebebiyse SMTP ile e-posta gönderebilmek için geçerli bir mail adresinin gerekmesidir. Php’nin standart mail fonksiyonu ile yapılan e-posta gönderimlerinde e-posta adresi zorunluluk olmadığı için doğrulanması mümkün olmayan, sunucunun genel imzasına sahip e-postalar gönderilebiliyor. Bu da genellikle reklam amaçlı spam e-postaların bu yolla gönderilmesi anlamına geliyor. Dolayısıyla gönderilen e-postalar da şüpheli konumuna düşüyor. Neyse demek istediğimi anladığınızı umarak artık Php’de SMTP ile nasıl mail gönderebileceğinizi anlatmaya başlıyorum.

Adım Adım PHP Kullanarak SMTP İle Mail Gönderme İşlemi

Yazının başlığından da anlayacağınız üzere bu işlem için PHPMailer isimli php sınıfını kullanacağız. Kodlara geçmeden evvel buradan sınıfımızın son sürümünü indiriyoruz. Hangi dosyayı indirmem lazım diye tereddüt eden arkadaşlar en çok indirme sayısına sahip zip uzantılı dosyayı indirebilirler.

İndirdiğiniz arşiv dosyasından class.phpmailer.php ve class.smtp.php isimli iki dosyayı alarak projenizin bulunduğu klasöre kopyalamanız gerekiyor.

İki dosyayı kopyaladıktan sonra mail gönderim işlemini yapacağımız dosyayı oluşturuyoruz ve aşağıdaki kod ile PHPMailer sınıfını dosyaya dahil ediyoruz ve ikinci satırdaki kod ile sınıfımızı başlatıyoruz.

include "class.phpmailer.php";
$mail = new PHPMailer();


Aşağıdaki satır yardımıyla da sınıfımıza e-postamızı SMTP yoluyla göndereceğimizi söylemiş olduk.

$mail->IsSMTP();

Şimdi sıra geldi SMTP ile ilgili kullanıcı adı, parola, port gibi ayarların yapıldığı satırlara.

$mail->SMTPAuth = true;
$mail->Host = 'smtp.siteadi.com';
$mail->Port = 587;
$mail->Username = 'sizinadresiniz@siteadi.com';
$mail->Password = 'sifreniz';


E-postanın kimin adına gönderildiğini aşağıdaki satır yardımıyla ayarlayabiliyoruz.

$mail->SetFrom($mail->Username, 'Ahmet İşcan');

Yine benzer şekilde e-postayı göndereceğimiz kişinin bilgilerini de ayarlıyoruz.

$mail->AddAddress('gonderilecekadres@siteadi.com', 'gönderilecek kişinin adı soyadı');

Göndereceğiniz e-postanın karakter setini de aşağıdaki satırdaki gibi belirtebilirsiniz. Bunu UTF-8 olarak bırakmanızı tavsiye ederim.

$mail->CharSet = 'UTF-8';

Kişilerle ilgili ayarları tamamladığımıza göre şimdi de göndereceğimiz e-posta ile ilgili ayarlara geçebiliriz.

$mail->Subject = 'E-Posta Konusu';
$mail->MsgHTML('E-posta İçeriği');


Son olarak da aşağıdaki satırlar yardımıyla gönderim işlemini tamamlıyoruz. If koşulu yardımıyla gönderim başarılı/başarısız olduğu durumlarda yapılacakları da burada belirtiyoruz.

if($mail->Send()) {
echo 'E-posta başarıyla gönderildi.';
} else {
echo 'E-posta gönderilirken bir hata oluştu. Hata bilgisi aşağıdadır.
';
echo $mail->ErrorInfo;
}


Toparlayacak olursak yazdığımız kodların tamamı aşağıdaki gibi olacaktır. Yazının sonuna sık karşılaşılan problemlerle ilgili birkaç not yazacağım lütfen onları da okuyun.

include "class.phpmailer.php";
$mail = new PHPMailer();
$mail->IsSMTP();
$mail->SMTPAuth = true;
$mail->Host = 'smtp.siteadi.com';
$mail->Port = 587;
$mail->Username = 'sizinadresiniz@siteadi.com';
$mail->Password = 'sifreniz';
$mail->SetFrom($mail->Username, 'Ahmet İşcan');
$mail->AddAddress('gonderilecekadres@siteadi.com', 'gönderilecek kişinin adı soyadı');
$mail->CharSet = 'UTF-8';
$mail->Subject = 'E-Posta Konusu';
$mail->MsgHTML('E-posta İçeriği');
if($mail->Send()) {
echo 'E-posta başarıyla gönderildi.';
} else {
echo 'E-posta gönderilirken bir hata oluştu. Hata bilgisi aşağıdadır.
';
echo $mail->ErrorInfo;
}


SMTP İle Gönderilen E-postaya Dosya Eklemek

Bazen gönderdiğiniz e-postalara dosya eklemeniz gerekebilir. Bunun için AddAttachment parametresi işinizi görecektir. Aşağıdaki kodda göreceğiniz üzere ek olarak eklenecek olan dosyanın yolunu yazmanız yeterlidir.

$mail->AddAttachment('klasor/dosya.jpg');

Birden Fazla Kişiye E-Posta Göndermek
Birden fazla kişiye e-posta göndermek için AddAddress parametresini kullanmanız yeterli olacaktır. Ama eğer CC ya da BCC olarak eklemek istiyorsanız onun için de kodunuza AddCC ya da AddBCC parametrelerini eklemeniz yeterli olacaktır. Aşağıdaki kodda üçüyle ilgili örneği de görebilirsiniz.

$mail->AddAddress('yenikisi@siteadi.com', 'Yeni Kişi');
$mail->AddCC('cckisi@siteadi.com', 'CC Kişi');
$mail->AddBCC('bcckisi@siteadi.com', 'BCC Kişi');


Gönderilen E-postanın Yanıt Adresini Değiştirmek
Son olarak da gönderdiğimiz e-postaya yapılacak yanıtlamaların başka bir e-postaya gitmesini istiyorsak onu PHPMailer sınıfına nasıl belirteceğimizi göreceğiz. AddReplyTo parametresi ile yanıt adresini belirtebilirsiniz.

$mail->AddReplyTo('yanitadresi@siteadi.com', 'Yanıt Kişi');

PHPMailer Sınıfı ve SMTP Protokolü İle İlgili Birkaç Not
Not 1: SMTP portu her zaman için 587 olmak zorunda değildir. Bazı sunucularda 25 portuna ya da başka bir porta ayarlanmış olabilir.
Not 2: SMTP ile mail gönderimini Gmail sunucuları üzerinden yapacaksanız port ayarının yapıldığı satırdan sonra $mail->SMTPSecure = ‘tls’; kodunu eklemelisiniz.
Not 3: Unutmayın ki gönderici adres kısmına ne yazarsanız yazın SMTP ile e-posta gönderirken hangi hesabın giriş bilgilerini yazarsanız e-postayı onun adına gönderecektir.
Not 4: Bir formdan gelen dosyayı e-posta ile göndermek istiyorsanız önce o dosyayı sunucunuza yüklemeli daha sonra maili gönderirken yüklediğiniz yolu PHPMailer sınıfına göstermelisiniz. Dosya yolunu gösterme işlemini yukarıda göstermiştim.

Kaynak: PHPMailer Sınıfı İle SMTP’den Mail Gönderme