Laravel Mail Yapılandırması Ve Smtp Mail Gönderme

11.09.2018

193 Okunma

0 Favori

1 Yorum

Merhabalar, bu içeriğimizde web sitelerimiz için olmazsa olmazlardan biri olan mail yapılandırmalarına değineceğiz. Web projelerinde belki en çok üşendiğim ve çekindiğim konulardan biri olan mail yapılandırmaları zaman zaman insanı çileden çıkarsa da gün geçtikçe gelişen teknolojiler ve türetilen mail sistemleri sayesinde eskisi kadar insanı yıpratmayan fakat büyük işletmeler için para tuzağına dönüşmüştür. Bu görüşümün sebebi küçük çağlı projelerde 50-100 mail limitleri sizleri ırdalamazken biraz işleri büyütmeye çalıştığınızda aylık 20-30 $ larla başlayan rüya yolculuk gün geçtikçe korkunç rakamlara dönüşüyor. Konumuzdan çok uzaklaşmadan konumuza geçiş yapalım.

Öncelikle Laravel içerisinde mail yapılandırmaları yapacağınız dosyalar ve kütüphaneler yer almaktadır. Bunlar size yeterli gelmiyorsa Laravel'in kendi resmi sitesinden de yayınladığı Mailgun, SparkPost, Amazon SES vb. pek çok kütüphaneyi de kullanabilirsiniz. Bunlar dışında kendiniz manuel olarak Gmail, Hotmail vb. firmaların sunduğu ücretsiz SMTP servislerini de tercih edebilirsiniz. Tabiki bu sistemler bir kaç güvenlik adımına tabi tuttuğu için Expected response code 250 but got code "535" gibi hatalarla bol bol karşılaşacaksınız. Bu tip hataların çözümünü arama motorlarına bakarak rahatlıkla çözebilirsiniz. Bu içeriğimizde konumuz nasıl yapılandırma yapılacağı ve SMTP üzerinden nasıl mail gönderileceğidir.

Laravel içerisinde yapılandırma yapmamız gereken iki dosya bulunmaktadır.

.env

config\mail.php

Bilindiği üzere .env klasörü laravel içerisinde pek çok ayarlarımızın ve şifrelerimizi sakladığım dosyalardan bir tanesidir. Mail adresimizin Driver , Host , Port, Username, Password vb. gibi pek çok bilgiyi burada kullanacağız.

Bunun yanı sıra mail.php sayfamızda işin detaylarına inerek mail adresimizi, mailde görünecek adımızı, sertifika tipimizi vb. gibi bilgileri barındıracağız. Lafı çokta uzatmadan bir yapılandırma yapalım ve SMTP üzerinden mail göndermeyi deneyelim.

Örnek Mail Yapılandırması

Mail yapılandırması tamamen tercihe ve kullandığınız sunucuya bağlıdır. Ben hosting kullandığım için kendi hosting firmam üzerinden aldığım SSL mail istemci yapılandırma bilgilerini kullanacağım. Bu bilgileri de aşağıdaki yol üzerinden edindim.

cPanel >  E-posta Hesapları > ( Kullanacağım Mail) > Connect Devices > Posta İstemcisi Kurma > Mail Client Manual Settings

Bu bilgileri aldıktan sonra .env klasörüne gelerek gerekli bilgileri dolmaya başlıyoruz.

Bu bilgiler kişiye özeldir. Kendi mail istemci bilgilerini girmelisiniz.

MAIL_DRIVER=smtp
MAIL_HOST=hosting_firmamın_verdiği_host
MAIL_PORT=465  // 465 SSL kullandığım için normal SMTP portu 587
MAIL_USERNAME=kullanacağımız_mail_adresi
MAIL_PASSWORD=kullanacağımız_mail_şifresi

Bu işlemleri tamamladıktan sonra mail.php dosyamıza geçiyoruz. Düzenleme yapacağımız kısımlar şu şekilde

'driver' => env('MAIL_DRIVER', 'smtp'),

.
.
.

'host' => env('MAIL_HOST', 'hosting_firmamın_verdiği_host'),

.
.
.

'port' => env('MAIL_PORT', 465),  // 465 SSL kullandığım için normal SMTP portu 587

.
.
.

'from' => ['address' => "info@emirhanpervanlar.com", 'name' => "Emirhan Pervanlar"],

.
.
.

'encryption' => 'ssl',  // Dikkat etmeniz gereken noktalardan birisidir. SSL yoksa tls yapmalısınız

.Yapılandırma ayarlarımız bu kadar gerekli yapılandırmaları Gmail, hotmail vb. gibi firmalardan aldığınız bilgilerle de aynı şekilde doldurarak kullanabilirsiniz.

SMTP Mail Gönderme

Bütün yapılandırmalarımız bittiğine göre artık mail gönderme işlemine geçebiliriz. Mail gönderme işlemlerinde pek çok method ve pek çok kütüphane kullanılmaktadır. Bunları yukarıda belirtmiştim. Benim kullanacağım yöntem Laravel'in kendi sistemi olacak. İlk iş olarak mail göndereceğim bir Route oluşturuyorum.

Route::get('/send_mail', 'PageController@send_mail');

Daha sonra PageController 'ıma geçiyorum. Burada eklemimiz gerek önemli bir kısım bulunuyor.

use Illuminate\Support\Facades\Mail;

Kullandığınız Laravel sürümünde bu yol farklı olabilir kod çalışmazsa ufak bir arama sonucunda sizin sürümünüze uyan yolu bulabilirsiniz. Bunuda hallettiğimize göre action'ımıza geçebilriiz. Mail göndermek için çağırdığımız Mail sınıfı içerisinde yer alan pek çok yararlı fonksiyon bulunmaktadır. Bunlardan biri ana methodumuz send() . 

 public function send_mail(){
        Mail::send();
    }

Bu method mail gönderme işlemimizi ifade etmektedir. Daha bu methodumuzu biraz şekillendirerek mail gönderme işlemimizi tamamlayacağız. 

 public function send_mail(){
        Mail::send("email.test",["name"=>"Deneme"],function ($message){
           $message->to("pervanlaremirhan@gmail.com","Emirhan")->subject("welcome");
        });
    }

Yukarıda ki kodlar örnek bir mail gönderme işlemini tamamlamaktadır. Bu kodu inceleyerek yazımızı sonlandıralım. 

send() fonksiyonumuzun ilk parametresi olan "email.test" göndereceğimiz mailin içeriğini oluşturmaktadır. Yani bu demek oluyorki viewlerimizi kullanarak dilediğimiz şekilde şekilli , profesyonel mailler gönderebileceğiz. Bu view'ın yoluda şudur.

resources\views\email\test.blade.php

Geçelim ikinci parametremize bu kısım viewlerin içerisine veri gönderme işleminin aynısıdır. Göndermek istediğiniz mailinize eklemek istediğiniz parametleri bu kısımda oluşturarak onlara bir veri attığınızda gönderdiğiniz maile bu parametre yerleştirilecektir. Yani şu kodun çıktısı mail ekranında şu şekilde görünecektir.

Controller - Action :

$a_data = Article::orderBy('id', 'DESC')->first();

Mail::send("email.test",["article"=>$a_data],function ($message){
          $message->to("pervanlaremirhan@gmail.com","Emirhan")->subject("welcome");
});


View :

Merhaba arkadaşlar yeni paylaştığım - <a href="{{$article->article_url}}">{{$article->article_title}}</a> - adlı içeriği okumanızı tavsiye ederim.


Mail :

Merhaba arkadaşlar yeni paylaştığım - Laravel Mail Yapılandırması ve SMTP Mail Gönderme - adlı içeriği okumanızı tavsiye ederim.

Geriye kalan kısım ise mail gönderme fonkstionun ana yapı taşını oluşturan kime , adı, konu vb. gibi bilgiler yer alıyor.

$message->to("pervanlaremirhan@gmail.com","Emirhan")->subject("welcome");

İşte bu kadar şimdi yapmanız gerek tek şey oluşturduğunuz site_adi/send_mail adresine gitmek. Bu kodları düzenleyerek kendinize özel abone olma sayfaları , iletişim sayfaları vb. gibi pek çok sayfa ouşturabilirsiniz. Sağlıcakla kalın !

Yorum Yap

Mail adresiniz sizinle iletişime geçebilmek amacıyla istenmektedir. Herkese açık bir platformda yayınlanmayacaktır.

userimg
Hasan
10.10.2018 - 09:54

Dostum eline sağlık