Laravel ve Sendgrid ile E-posta Gönderimi

Ana Sayfa Blog Laravel ve Sendgrid ile E-posta Gönderimi

Laravel ve Sendgrid ile E-posta Gönderimi

22 Şubat 2016 tarihine kadar projelerimin e-posta gönderimi olanlarının çoğunda e-posta servisi olarak Mandrill kullanmayı tercih ettim. Mandrill bu tarihte deklare ettiği sözleşme değişikliği ile altmış gün içinde ücretli bir Mailchimp hesabın olmayan kullanıcıların hesabını durduracağını bildirdi.

Alternatif olarak bazı projelerimde ise Github Öğrenci Paketi‘nin hediyesi olan Sendrid’i kullandım. Sendgrid bize şu özellikte bir hizmet sunuyor: Öğrenci planı, eğer öğrenci iseniz aylık 15.000 ücretsiz e-posta veriyor (normalde günde 200 ücretsiz e-posta).

Sendgrid ile bir SMTP aracılığı ve 587 portu üzerinden Laravel ile e-posta gönderimi yapacağız, bu ise son derece kolay ve keyifli olacak.

Laravel 5 projenizin app/config/mail.php dosyasını incelediğinizde e-posta gönderimine ilişiklin yapılandırma dosyası için aşağıdakine benzer bir görüntü ile karşılaşacaksınız (makalede az yer kaplaması için yorum satırlarını çıkardım):

<?php

return [

    'driver'     => env('MAIL_DRIVER', 'smtp'),
    'host'       => env('MAIL_HOST', 'smtp.mailgun.org'),
    'port'       => env('MAIL_PORT', 587),
    'from'       => ['address' => env('MAIL_FROM'), 'name' => env('MAIL_NAME')],
    'encryption' => env('MAIL_ENCRYPTION', 'tls'),
    'username'   => env('MAIL_USERNAME'),
    'password'   => env('MAIL_PASSWORD'),
    'sendmail'   => '/usr/sbin/sendmail -bs',
    'pretend'    => false,

];

Sendgrid e-posta gönderimi yaparken kullanıcı adımızı ve şifremizi girmeyi gerektirir, ben ise geleneksel olarak şifrelerin dosyalara doğrudan yazılmasını yanlış bulurum, yani en azından açık olarak. Bu münasebetle çok basit bile olsa bir şifreleme ile şifremizi görünür olmaktan alıkoyacağız.

Base64 encode ve decode edilebilir son derece basit bir kripto yöntemidir. Biz burada şifremizi şifreleyecek ve php tarafından açılacak halini Sendgrid’e sunacağız. Öncelikle Base64 Decode and Encode - Online sitesinden ilk kutucuğa Sendgrid şifremizi yazalım ve > ENCODE < butonuna basalım. Ç0kKarma$Lkßir$ifre değişkeni için karşılık olarak w4cwa0thcm1hJExrw59pciRpZnJl değişkenini üretecek. Ardından e-posta yapılandırma dosyanızı aşağıdaki gibi güncelleyin.

<?php

return [
    'driver' => 'smtp',
    'host' => 'smtp.sendgrid.net',
    'port' => 587,
    'from' => array('address' => 'gondericiEposta@Adresi.Com', 'name' => 'Gönderici İsmi'),
    'encryption' => 'tls',
    'username' => 'SendGrid Kullanıcı Adınız',
    'password' => base64_decode('w4cwa0thcm1hJExrw59pciRpZnJl'),
    'sendmail' => '/usr/sbin/sendmail -bs',
    'pretend' => false,
];

Laravel standart olarak bu yapılandırma anahtarlarını .env dosyasında alacağını varsayacak şekilde env(‘MAIL_DRIVER’, ‘smtp’) biçiminde ayarlanmıştır. Bu, şu demektir; MAIL_DRIVER değişkeni .env dosyasında tanımlı ise onu tercih et, yoksa smtp olarak tanımla. Biz ise burada bu tip tanımlamayı ezmiş olduk, siz dilerseniz kendinize uygun biçimde yapılandırabilirsiniz.

Sendgrid için gerekli olan tüm parametreleri yapılandırdık, uygulamamız şu anda e-posta gönderimine uygun. Basit bir rota yazarak e-posta gönderelim:

Route::get('/eposta', function() 
{
    $data = ['ad' => 'Tuana Şeyma', 'soyad' => 'Eldem'];

    Mail::send('emails.gunaydin', $data, function($message) use($data)
    {
        $message->to('tuanaseyma@sinaneldem.com.tr', $data['ad'])
        ->subject('Günaydın Kızım!')
        ->replyTo('sinan@sinaneldem.com.tr', 'Sinan Eldem');
    });
});

Burada Mail sınıfının send metoduna geçtiğimiz ilk parametre kullanılacak görünüm dosyasıdır (view), onu birazdan yapılandıracağız. İkinci parametre $data dizisidir ve bu e-posta görünüm dosyasına veri geçirmek için kullanılır. Üçüncü parametre anonim e-posta nesnesidir, gönderim işlemi burada gerçekleşir. Dördüncü parametre olan use ise tercihe bağlıdır, aşağıda Alıcının İsmi parametresini geçmek için kullandım.

$message->to('tuanaseyma@sinaneldem.com.tr', $data['ad'])

E-posta alıcısını tanımladığımız satır budur, ilk parametre Alıcı E-posta Adresi ikinici parametre ise tercihe bağlı Alıcı İsmi‘dir.

->subject('Günaydın Kızım!');

Satırı ile e-postamıza bir konu tanımlarız.

Son olarak e-posta göndericisi ile yanıtlayacak adresin farklı olması durumunda tercih edilecek replyTo seçeneğini de burada tanımlarız. Tercihe bağlıdır.

->replyTo('sinan@sinaneldem.com.tr', 'Sinan Eldem');

Burada replyTo metoduna geçtiğimiz Gönderici İsmi tercihe bağlıdır.

Buraya kadar her şey tamam, şimdi e-posta gönderimi için görünüm dosyamızı oluşturalım.

resources/views/emails/ dizininde gunaydin.blade.php dosyasını oluşturup içeriğini aşağıdaki gibi ayarlayın:

<!doctype html>
<html>
    <head>
        <meta charset="utf-8">
        <title>E-posta Denemesi</title>
    </head>

    <body>
        Günaydın Sevgili {{ $ad }} {{ $soyad }},
        <br>
             Gününün aydın olmasını dilerim.
        <br>
        Sevgiler,
        <br>
        -Baban
    </body>
</html>

Göreceğiniz üzere $data dizisi ile gönderdiğimiz değişkenler buraya doğrudan aktarıldı.

Artık projemiz e-posta gönderimine hazır, tarayıcınızı http://projenizinadr.esi/eposta adresine yönlendirin ve bekleyin. Bu işlem internet bağlantı hızınıza bağlı olarak birkaç saniye sürebilir.

Haydi e-posta istemcisini açıp mesajınızı denetleyin:

Sinan Eldem

Fullstack Web Developer

Laravel Framework ile PHP ve MySQL üzerine özel ders, danışmanlık ve web programcılığı hizmetleri veriyorum.

Danışmak istedikleriniz ile ilgili benimle irtibat kurabilirsiniz.

Benzer Yazılar

Laravel Valet

5 Mayıs 2016 tarihi itibariyle, web yazılımı geliştirme ortamı olarak MAC OSX kullananlar için Laravel geliştiricisi Taylor Otwell tarafından yeni bir sunucu arabirimi duyuruldu: Valet

Add Your Custom File Type To Phpstorm New File Menu

Follow numbers on the images to generate your own file type extension in Phpstorm.

Laravel Unit Testlerini Google Chrome eklentisi ile hazırlama

Marcel Pociot adındaki geliştirici geçenlerde kabul testlerini (acceptance tests) doğrudan Google Chrome’a eklenen bir Extension (uzantı) ile görsel olarak oluşturulabilmesini sağladı.

Yorumlar