Laravel Mailgun Kullanımı ve Mail Gönderme İşlemleri Nasıl Yapılır?

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 nedir?

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.

Php Mail Nasıl Gönderilir. Mail Yapılandırması.
Php - Laravel Mail Yapılandırması Nasıl Yapılır?

 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?

Neden Mailgun gibi servisleri kullanırız? kullanmalıyız?

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.

php-mail-gonderme-mailgun-kullanımı
PHP Mail Gönderme - Laravel Mailgun Kullanımı

Laravel Mailgun yapılandırması, Mailgun kurulumu için yol haritası.

  1. İlk olarak Mailgun hesabı oluşturma işleminden sonra hesabımızı aktif edeceğiz.
  2. Mailgun hesabına domain ekleme işleminden sonra DNS ile hesabı aktifleştireceğiz.
  3. Laravel tarafındaki Mailgun için gerekli paketlerin yüklemesini yapacağız.
  4. Laravel uygulamamıza gerekli smtp ve mail ayarlarını yerleştireceğiz.
  5. Mail şablonu kullanarak örnek bir laravel mail gönderme işlemini tamalayacağız.

Mailgun hesabı oluşturma ve aktif etme

İlk olarak Mailgun yeni hesap oluşturma sayfasına gidip gerekli alanları aşağıdaki gibi doldurun

  • ‘Full Name’ (Tam Adınız)
  • ‘Company’ (Şirketiniz. Alan adınız da olabilir)
  • ‘Work Email’(Kişisel E-Posta Adresiniz Girin)
  • ‘Password’(Şifre)

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.

Mailgun hesabına alan adı (domain) ekleme ve dns ayarları ile domain etkinleştirme

İ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.

laravel-mailgun-dns-bilgileri
Laravel Mailgun Kullanımı - DNS Yapılandırması

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;

cPanel İçin;

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.

DirectAdmin İçin;

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.

Laravelde Mailgun için gerekli paketin yüklenmesi

İ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`de Mailgun için SMTP ve mail (e-posta) ayarları

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 Mailgun örnek mail gönderimi

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.

BONUS: Mailgun gönderen adresi hatası (from ve sender)

İ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 😊

Web geliştirme, programlama ve teknolojik gelişmeler ile yakından ilgilenen olabildiğine meraklı bir insan. Bendeniz Birhan Karahasan.

3 YORUM

Birhan Karahasan

Genç Programcı

17-11-2019

Sağolasın kardeş, bende neden mailgun hesabında domain ekleme butonu yok diyordum..

Rica ederim, iyi programlamalar :)

Birhan Karahasan

ahmet büyük

17-12-2019

bu mail from hatasını sadece sender fonksiyonuylamı çözebiliriz? başka yolu yokmu?

Mailgun`ın önermediği şekilde mailgun hesabına subdomain yerine ana domain adresini girebilirsin. Ancak ''sender' fonksiyonunun kullanımında da bir sakınca yoktur.

Birhan Karahasan

umut

08-04-2020

Merhaba acaba mail alma işini nasıl yapıyorsunuz ?

Merhaba Umut, alma işleminde Routes kavramı giriyor devreye. Mail alma ve Routes kavramına Mailgun` ın dokümantasyonundan bakabilirsin.

Yorum Yap Veya Soru Sor

EN ÖNEMLİ YERİ BOŞ BIRAKMAYINIZ (MİN. 5 KARAKTER)
Gerekli
LÜTFEN GEÇERLİ BİR E-POSTA ADRESİ GİRİNİZ

E-Posta Bülteni