Bu makalede Laravel Mailgun kurulumu, Mailgun yapılandırması ve Mailgun mail gönderme işlemlerini adım adım kapsamlı bir şekilde göreceğiz. Makelenin sonunda mailgun nasıl kullanılır? mailgun kurulumu nasıl yapılır? öğrenmiş olacaksınız.
Ancak işlemlere geçmeden önce Mailgun nedir? Neden Mailgun gibi servisleri kullanmalıyız? gibi sorulara cevap vermek istiyorum.
Not: Eğer vaktiniz yoksa ve istediğiniz cevaba hemen ulaşmak istiyorsanız yukarıdaki içindekiler bölümünü kullanın.
Mailgun, daha çok geliştiricilerin veya programcıların kullanımı için sağlanan ve arkasında ‘Rackspace’ adlı şirketin olduğu güçlü bir e-posta servisidir.
Bu servis, geliştirdiğimiz web siteler veya uygulamalar aracılığıyla e-posta gönderme, alma ve e-posta takibi gibi işlemleri hızlı bir şekilde, sağladığı bulut tabanlı hizmeti aracılığıyla yapmamızı sağlar.
Ayrıca Mailgun, bünyesinde kendinize göre kişisel mail şablonları oluşturma ve kullanma imkanı vermekle beraber mail listenizi Mailgun hesabınıza kolayca yükleyip ‘mail marketing’ yapabilmenizi sağlar.bkz:mail marketing nedir?
Eminim şu güne kadar gönderdiğiniz e-postaların yarısından fazlası karşı tarafın gereksiz yada spam adlı posta kutularına düşmüştür. Günümüzde saniyede kaç tane mail gönderiliyor bilmiyorum ama bunların neredeyse %60’ından fazlası spam maillerden oluşuyor diye tahmin ediyorum.
Hal böyle olunca gönderdiğimiz masum mailler, spam maillerin fazlalığından ortaya çıkan filtreleme ve katı kurallara takılıp karşı tarafın birincil gelen kutusuna düşmüyor.
bkz:spam mail nedir?
İşte Mailgun gibi servisleri, bu durumun önüne geçmek için kullanabiliriz. Barındırdığı temiz sunucular sayesinde maillerin direk gelen kutusuna düşmesini sağlamakta ki bence en önemli tercih sebebi de bu. En azından benim kullanma sebebim şimdilik bu yönde.
Ayrıca Mailgun kendi bünyesinde gönderilen maillerin spam kontrolünü de yaparak sistemin sağlıklı bir şekilde devam etmesini sağlamakta.
Spam mail durumunun dışında, Laravel dokümantasyonunda yazılana göre,
Mailgun gibi API tabanlı sürücüler, geleneksel SMTP sunucularından daha basit ve hızlıdır. Bu nedenden dolayı da bu servislerin kullanımı bize cazip gelebilir.
Son olarak yine Laravel dokümantasyonunda yazılana göre PHP için mail gönderme işlemi yapabileceğimiz Mailgun gibi ‘Postmark’, ‘SparkPost’ ve ‘Ses Driver’ gibi benzer servisler de bulunmaktadır.
İlk olarak Mailgun yeni hesap oluşturma sayfasına gidip gerekli alanları aşağıdaki gibi doldurun
Tüm alanları girdikten sonra ‘Add payment info now’ adlı kutucuğun seçimini kaldırarak işlemi tamalayın.
Önemli Not: Eğer ki ‘Add payment info now’ seçimini kaldırıp kredi kartı bilgisi eklemeden kayıt olursanız, hesabınıza herhangi bir alan adı girişi yapamazsınız. Evet, Mailgun aylık 10.000 mail gönderimini ücretsiz olarak sunuyor ancak bu ücretsiz hakkın kötüye kullanımının ve spam mail gönderiminin önüne geçmek için kredi kartı bilgisini zorunlu kılıyor.
Daha öncesinde bu zorunluluk yoktu ama şimdi var. Rahat olun, mail pazarlama işlemi yapmıyorsanız aylık 10.000 mail sınırı kolay kolay aşamazsınız.
Kaydı tamamladıktan sonra e-posta adresinizde spam, gereksiz klasörüne gelen onay linkine tıklayıp açılan sayfada telefon numaranızı girerek işlemi tamamlayın.
İlk olarak sol taraftaki menüden ‘Sending’ başlığı altındaki ‘Domains’ başlığına tıklayıp açılan sayfada sağ üst köşedeki ‘Add New Domain’ butonuna tıklayın.
Kredi kartı bilgisi girmediyseniz ‘Add New Domain’ butonu gözükmeyecektir.
Mailgun mx kayıtları ve mail ulaşılabilirliği gibi şartları baz alarak daha iyi bir deneyim için ana domain (alan adı) yerine subdomain (alt alan adı) kullanmamızı öneriyor.
Her iki durumda da alan adımız ile biten e-posta adreslerimizden mail gönderim işlemi yapabiliriz. Biz Mailgun`ın tavsiye ettiği şekilde daha önceden oluşturduğumuz bir subdomaini ‘Domain name’ alanına girelim.
Ardından bölgeyi Türkiye`ye daha yakın olması nedeniyle ‘EU’ yaparak 'Add Domain' butonuna tıklayalım. ‘DKIM’ ayarlarını olduğu gibi bırakalım, şu an için önemli değil.
Devamında sol menüden tekrar ‘domain’ alanına tıklayıp eklediğimiz adresi seçerek alan adımızı aktifleştirmek için gerekli DNS kayıt bilgilerini ulaşalım.
Burada 2 tane TXT kaydı, 2 tane MX kaydı, 1 tane CNAME kaydı göreceksiniz. Bu bilgileri kullanarak kontrol panelinizden DNS kayıtlarını ekleyin. Tüm kayıtları ekledikten sonra ‘Verify DNS Settings’ butonun tıklayarak doğrulamayı gönderin.
Mailgun, doğrulama süresinin 24-48 saati bulabileceğini söylüyor ama en geç yarım saatte doğrulanıyor ve mail adresinize bilgilendirme e-postası geliyor.
DNS kaydı ekleme konusunda emin değilseniz;
Zone editöre girip ilgili domaininizin yönet bağlantısına takip edip; ad (Hostname), tip (Type), ve kayıt (Enter This Value) alanlarına ilgili bilgileri girerek kayıt ekleyin.
Account Manager altındaki DNS Management bağlantısını takip edip; Record Type (Type), Name (Hostname), ve Value (Enter This Value) alanlarına ilgili bilgileri girerek kayıt ekleyin.
İlk olarak Laravel`de API tabanlı sürücülerin kullanımı için gerekli olan Guzzle HTTP kütüphanesi Laravel uygulamamıza yüklememiz gerekiyor.
NOT: Eğer ki bu işlemleri paylaşımlı sunucuda bulunan web siteniz için yapmak istiyorsanız ve ssh erişiminiz yoksa yerel bilgisayarınızdaki güncel kopyası üzerinde çalışın ve yükleme ve güncellemenin ardından ‘vendor’ klasörünü zipledikten sonra uzak sunucuya atıp eskisiyle değiştirerek hızlı bir şekilde işlemi gerçekleştirin.
Guzzle HTTP kütüphanesini yüklemek için uygulamamızın ana dizininde aşağıdaki kodu çalıştırmamız gerekiyor. Tabi ki Composer paket yöneticisinin de halihazırda kurulu olması gerekiyor.
composer require guzzlehttp/guzzle
Kodu çalıştırıp Guzzle HTTP kütüphanesini yükledikten sonra uygulamamıza bu paketi tanıtmak için güncelleme işlemi yapmamız gerekiyor. Bunun için aşağıdaki kodu çalıştırın.
composer update
Laravel smtp ayarları ve mail ayarları için ilk olarak '.env' dosyamızı açıp mail ile ilgili tanımları aşağıdaki şekilde yapın. Kendinize göre değişicek alanlar 'MAIL_FROM_ADDRESS' , 'MAILGUN_DOMAIN', 'MAILGUN_SECRET' şeklindedir. Kalanını olduğu gibi bırakın.
MAIL_DRIVER=mailgun
MAIL_HOST=smtp.mailgun.org
MAIL_PORT=587
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_FROM_ADDRESS=ornek@domain.com
MAILGUN_DOMAIN=subdomain.domain.com
MAILGUN_SECRET=mailgun-hesabinizdan-alacaginiz-api-key
'api-key' kodunuzu öğrenmek için buraya tıklayın yada mailgun hesabınızdaki sol menüden 'Settings' altındaki 'Security&Users' bağlantısına tıklayıp 'API Security' bölümüne gidin. 'Private API key' başlığı altındaki kodu kopyalayıp, 'MAILGUN_SECRET' değerine yapıştırın.
Laravel mail gönderme işlemi için öncelile route tanımını ve fonksiyonları oluşturmamız gerekiyor.
use Illuminate\Support\Facades\Mail;
Route::get('/php-laravel-mail-gönderme',function (){
$data=[
'mail_address'=>'birhan@karahasan.com',
'name'=>'Birhan Karahasan'
];
Mail::send('laravel-mail-gönderme',$data,function($mail) use ($data) {
$mail->subject('Örnek Mail Gönderimi');
$mail->from('ornek@alanadi.com','Örnek Mail Gönderimi');
$mail->to($data['mail_address']);
});
});
Yukarıdaki kodda, ‘php-laravel-mail-gönderme’ adında route oluşturup fonksiyon içerisinde ki ‘data’ adlı diziyi, ‘views’ klasöründe oluşturduğumuz ‘laravel-mail-gönderme’ adlı blade dosyamıza aktarımını yapıyoruz.
Ardından ‘Mail’ sınıfına ait ‘send’ fonksiyonun üçüncü parametresine mail gönderme için gerekli fonksiyonu yazıyoruz. ‘data’ adlı değişkeni fonksiyon içerisinde kullanabilmek için ‘use’ parametresini kullanıyoruz.
<!doctype html>
<html lang="tr">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width initial-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
</head>
<body>
<h2>Bu Bir Örnek Mail Gönderim İşlemidir</h2>
<h3>Merhaba, {{$name}}</h3>
<h3>Mail adresin: {{$mail_address}}</h3>
</body>
</html>
Başlık, gönderici ve alıcı bilgilerini girdikten sonra ‘laravel-mail-gönderme’ adlı blade dosyasında, ‘data’ dizisindeki anahtarları kullanarak değerleri aşağıdaki gibi yazdırıyoruz. Artık ‘php-laravel-mail-gönderme’ rotasına istek göndererek mail göndermeyi tamamlayalım.
Bu arada siz bu işlemleri kendi controller dosyanızda yapabilirsiniz. Değişkenleri, örnek olması adına, şablona dizi şeklinde gönderdim. Ayrıca şablon dosyalarınızı views klasörü içinde ayrı bir klasör açarak daha düzenli bir şekilde kullanabilirsiniz.
İlk başta Mailgun hesabında ki alan adına subdomain girmiştik. Gönderen e-posta adresiniz ‘info@example.com’ şeklinde olduğunu varsayarsak ‘sender’ bilgisi ‘info.subdomain@example.com’ gibi olduğu için ‘sender’ ve ‘from’ bilgisi birbiriyle uyuşmamakta.
Bundan dolayı, gönderilen mail yine ‘info@example.com’ gibi bir adresten gönderilmesine rağmen sağlayıcı ile aynı olmadığından gönderen bilgisinde tutarsızlık oluşuyor. Mail ulaşılabilirliği açısından herhangi bir sıkıntı yok ama gönderen ismi bu formatta kötü gözükebiliyor.
mailAdresi=domain.com@subdomain.domain.com<mailAdresi=domain.com@subdomain.domain.com> şu kişi adına: MAİL ADRESİ
Bu durumun önüne geçmek için aşağıdaki gibi ‘from’ bilgisiyle aynı olacak şekilde ‘sender’ bilgisi eklemeniz yeterli olacaktır.
$mail->sender('ornek@alanadi.com');
Umarım makalenin bir faydasını görmüşsünüzdür.
Herhangi bir sorunuz yada takıldığınız bir yer varsa yorum gönderebilirsiniz.
Yorum göndermekten çekinmeyin. Cevaplamak için sabırsızlanıyorum 😊
bu mail from hatasını sadece sender fonksiyonuylamı çözebiliriz? başka yolu yokmu?
Merhaba acaba mail alma işini nasıl yapıyorsunuz ?
Genç Programcı
17-11-2019Sağolasın kardeş, bende neden mailgun hesabında domain ekleme butonu yok diyordum..
BİRHAN K.
Rica ederim, iyi programlamalar :)