2 Aralık 2013 Pazartesi

Smtp ve Laravel 4 kullanarak Email Göndermek

Son zamanlarda ciddi bir php yazılımcı grubunun Laravel'e başladığını görüyorum.
Laravel 4 bize neredeyse her alanda sağladığı kolaylıklardan bir tanesi de email gönderme konusunda.

Laravel ile geliştirdiğim son birkaç projede şahsen ben de yazılım camiasında gayet popüler olan swiftmailer kütüphanesini projeme implement ettim. Gerçi composer ve laravel'e özgü kütüphanesi sayesinde bu işlem de gayet basit olsa da . Ben bu yazımda Laravel'in içerisindeki ön tanımlı email gönderme özelliğini sizlere tanıtacağım.





Öncelikle Config içerisindeki mail.php dosyasını açalım.  Burada yapmamız gereken ayarlar gayet basit.

host alanına kendi smtp sunucumuzu ,  port kısmında kullanacağımız portu ,
 from kısmına email göndermek istediğimiz adresi , name kısmına adımızı  ve alt kısımda bu emaile ait şifre ve kullanıcı adını yazalım.


Bilgileri doğru ve eksiksiz girdiğimizden emin olduktan sonra emaili nasıl atacağımıza bir bakalım.


Ben şahsen route.php dosyasını olabildiğince yalın tutabilmek için en basit işlemlerde bile route'larımı uygun bir controller dosyasına yönlendirmeyi ve işlemleri orada yapmayı tercih ediyorum.

bu sebeple routes.php dosyama

Route::get('email', 'Email@send'); 

şeklinde bir email route'u oluşturuyorum.


daha sonrasında Email adında bir controller dosyası yaratıyorum.

php artisan controller:make Email --only index komutuyla controller dosyamızı yaratalım bu dosya içerisinde oluşan index methodunun adını route dosyamızda yaptığımız yönlendirmeyle aynı adı verelim.
(ben @send dediğim için fonksiyonumun adını send yapıyorum)

Controller dosyamızın son hali


<?php

class Email extends \BaseController {
    public function send()
    {
        $user= array();
        Mail::send('emails.welcome' ,$user, function($message)
        {
            $message->to('rodrane@gmail.com')
            ->subject('Test Email');
        });
    }
}


şeklinde olacak.

$userdiye belirlediğimiz array emails.welcome view dosyasına gidecek olan bir içerik varsa fonksiyonun bu parametresini kullanacağız.

Laravel'in içerisinde default olarak emails klasörü geliyor bu klasör içerisinde welcome.blade.php dosyasını yaratalım.


<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Test Email</title>
</head>
<body>
    Welcome <3 
</body>
</html>

Şeklinde basit bir html dosyası oluşturdum. Yapmamız gereken tüm işlemler bu kadar.
sitemiz.com/email adresine girdiğimizde şuan için hardcoded yazdığımız rodrane@gmail.com adresine smtp bilgilerini girdiğimiz email adresinden bir mail gitmiş olmalı!

Connection to tcp://smtp:adres:port Timed Out şeklinde bir hata alıyorsanız smtp portunun modeme üzerinde açık olduğundan emin olun.Ayrıca bazı web hosting hizmeti veren firmalar güvenlik nedeniyle smtp email gönderimini kapatıyorlar bunu da belirtmekte fayda var.



Şimdi laravel email özelliğini nasıl daha efektif kullanabiliriz ona bakalım.

send fonksiyonumuz $id parametresini alsın bu parametre ile farzedelim bir User modelimiz olsun bu modelimiz sayesinde $user=User::find($id) satırını fonksiyonumuza ekleyerek kullanıcımızın bilgilerinin olduğu satırı bir obje olarak alabilir. ve $to kısmına $user->email; yazarak hardcoded email adresini daha dinamik bir hale getirebiliriz. Aynı şekilde $user'ı  view dosyamız içerisinde kullanıcının adını ve soyadını yazdıracak şekilde ayarlayalım

Yani controller dosyamız ;



<?php

class Email extends \BaseController {
    public function send($id)
    {
        $user= User::find($id);

        Mail::send('emails.welcome' ,$user, function($message)
        {
            $message->to($user->email)
            ->subject('TestEmail');
        });
    }
}


ve view dosyamız

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Test Email</title>
</head>
<body>
   <h3> Welcome {{$user->name}} </h3>
</body>
</html>
şeklinde olacak.

tabi 2. örnekte bahsettiğim gibi bir email gönderme işlemi yapacaksanız Route::get yerine Route::post kullanmalı ve $id parametresini bir şekilde Controller dosyasına aktarmanız gerekmektedir.



Başka bir yazıda görüşmek üzere şimdilik hoşçakalın

Anar Bayramov

Hiç yorum yok:

Yorum Gönder