PHP ile E-mail Göndermek

phpmailer7418

Merhaba arkadaşlar. Bugün birlikte PHP ile nasıl mail gönderebiliriz bunu inceleyeceğiz 🙂 

Öncelikli olarak kullanabileceğimiz mail() fonksiyonu var. Fakat bir çok sunucu mail() fonksiyonuna kapatılmış durumda. Sebebi ise bu fonksiyon ile gönderilmiş maillerin spam kutusuna düşmesidir. Tabi ki bunun olmasını istemiyoruz. PHP’nin bu konuda bize sunmuş olduğu bir başka güzellik var.

PHPMailer Class’ı ve SMTP Protokolü (Simple Mail Transfer Protocol) . Mail gönderim işlemi yapılacak bilgisayar SMTP suncusuna bağlanır. Kullanıcı adı, şifre gibi kontrollerin ardından sunucu onay verirse mail gönderme işlemi tamamlanmış olur.

Şimdi adım adım PHPMailer ve SMTP’yi  kullanarak bir mail gönderelim. Öncelikle buradan PHPMailer Class’ını indiriyoruz. İndirdiğimiz dosyadaki php uzantılı class.phpmailer.php , class.smtp.php ve class.pop3.php dosyalarını çalıştığımız proje dosyası içine gömüyoruz. Üzerinde çalıştığımız php sayfası bu dosyaların ile aynı dizinde olması gerekiyor.

Ben kullanıcıdan verileri ayrı bir sayfada almayı tercih ettim ve başlangıç olarak mailgiris.php dosyamı oluşturdum. Bilgileri kullanıcıdan almak yerine elle de girebilirsiniz. HTML ile klasik, basit bir form oluşturalım.

Giriş sayfamın kodları :

<hmtl>

   <head>
       <title>COMPOSE E-MAIL</title>
   <style>

        body
        {
              background-color: skyblue;
        }

   </style>


   </head>
    <body>

From :

//Gonderenin mailini aliyoruz

To :

//Gonderilecek adresi aliyoruz

Subject :

Gonderinin konusunu aliyoruz

Mail :

//mail metnini alıyoruz

</body> </hmtl>

(From, To, Subject ve Mail kısımlarının kodları wordpress tarafından otomatik olarak derlendiği için şimdilik gösteremiyorum.)

Girilen verileri “post” metodu ile mailalis.php sayfasına gönderiyoruz. Sayfanın local’de çalıştırılmış halinin ekran görüntüsü şöyle :

ss

Şimdi asıl işin olduğu yani mail gönderme işlemini yaptığımız, PHPMailer Classı ve SMTP’yi kullandığımız sayfamızı oluşturalım.

Mail gönderme sayfamın kodları :

<?php

include 'class.phpmailer.php'; //PHPMailer sinifimizi import ettik
$mail = new PHPMailer(); 

$from = $_POST["from"];  //Bu dort satirda formdan gelen verileri degiskenlere aktardik   
$to = $_POST["to"];
$subject = $_POST["subject"];
$mail_text = $_POST["mail"];

$mail->IsSMTP(); //Maili gonderecegimiz yolu belirledik
$mail->SMTPDebug = 1; Debug islemi. 1 degeri hata ve mesaj icinken 2 degeri ile sadece mesaj olusturuluyor 
$mail->SMTPAuth = TRUE; //SMTP kimlik dogrulamayi etkinlestirdik
$mail->SMTPSecure = 'ssl'; //Guvenli baglanti icin ssl'i tercih ettim, 'tls' de kullanilabiliyor
$mail->Host = 'smtp.gmail.com'; //Gmail sunucusu uzerinden islem yapacagimi belirttim
$mail->Port = 465; //587 normal baglanti icin gerekli port numarasi, guvenli baglanti icin 465'i kullaniyoruz.
$mail->CharSet = 'UTF-8'; //Dil ayarlari icin UTF-8 i kullaniyoruz.
$mail->Username = $from; //mailin gonderilecegi adres
$mail->Password = '********'; //mailin gonderildigi adresin sifresi
$mail->SetFrom($mail->Username, $from);
$mail->Subject = $subject; //konu
$mail->AddAddress($to); //mailin gideceği adres
$mail -> MsgHTML($mail_text); //mailin icerigi


//Asagıdaki kod blogunda mailin gonderilip gonderilmedigini kontrol ediyoruz. 

if(!$mail->Send())

{
    echo "Mailer Error: ".$mail->ErrorInfo;
}
else
{
    echo "Sent";
}

?>

İşte bu kadar. Mailiniz gönderildi. Yandex mail için hostu ‘smtp.yandex.com’ , port numarasını 587 ve SMTPSecure ‘u tls olarak değiştirip denemeler yapabilirsiniz.

Aslında çok zor bir işlem değil gördüğümüz gibi 🙂 PHPMailer sınıfını import ediyor ve her şeyi SMTP üzerinden hallediyoruz.

Kendi bilgisayarımdan kendi adresime denemeler yaptım bir kaç sorunla karşılaştım. Sorunlardan ve nasıl çözdüğümden bahsetmek istiyorum.

  • Öncelikle karşılaştığım ilk sorun   "SMTP -> ERROR: Failed to connect to server: Unable to find the socket transport “ssl” " hatası oldu. Sorunun çözümü için stackoverflow’da gözüme takılan bir yorumdan faydalandım.

php.ini dosyasını açtım.

;extension=php_openssl.dll     –> satırını buldum ve başındaki noktalı virgül karakterini sildim. Sonra apache’yi restart yaptım ve sorunum çözüldü. 

  • İkinci sorun ise “SMTP -> ERROR: Password not accepted from server: 534-5.7.9 Application-specific password required. ” 

Sorunun çözümü için araştırma yaparken aklıma gmail hesabımın 2 adımlı doğrulama ile açıldığı geldi. Şifremi giriyorum, telefonuma bir kod gönderiliyor ve gelen kodu ekrandaki kutucuğa girince hesabıma erişebiliyorum. Belki doğru iz üzerindeyimdir diye düşündüm ve 2 Adımlı Doğrulamayı etkisiz hale getirdim ve sorun çözüme kavuşmuş oldu. Ekrana “Sent” mesajı basıldı ve mail inboxıma düşmüş oldu. 🙂

Okuduğunuz için teşekkür ederim. Görüş ve önerilerinizi yorum olarak gönderebilirsiniz. 🙂