design

Laravel'de Email Gönderme: SMTP ve Mailgun Entegrasyonu

March 24, 2025

Merhaba arkadaşlar, bugün sizlerle Laravel'de e-posta gönderme işlemlerini ve SMTP ile Mailgun entegrasyonlarını detaylı şekilde inceleyeceğiz. Laravel, e-posta gönderme işlemleri için son derece kullanışlı bir sistem sunar. Gelin bu konuyu birlikte keşfedelim.


Laravel'de e-posta göndermek için öncelikle .env dosyamızı düzenlememiz gerekiyor. İşte temel SMTP ayarları:

MAIL_MAILER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=ornek@gmail.com
MAIL_PASSWORD=şifreniz
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=ornek@gmail.com
MAIL_FROM_NAME="Uygulama Adı"

Bu ayarları yaptıktan sonra, Laravel'in sunduğu basit arayüzü kullanarak e-posta gönderebiliriz.


Temel E-posta Gönderme İşlemi

use Illuminate\Support\Facades\Mail;
use App\Mail\BilgilendirmeMaili;

Mail::to('alici@example.com')
   ->cc(['kopya1@example.com', 'kopya2@example.com'])
   ->bcc('gizli@example.com')
   ->send(new BilgilendirmeMaili($veri));


Burada BilgilendirmeMaili adında bir mailable sınıfı kullanıyoruz. Bu sınıfı oluşturmak için:

php artisan make:mail BilgilendirmeMaili


Mailable Sınıfını Özelleştirme

Oluşturduğumuz mailable sınıfını şu şekilde düzenleyebiliriz:


namespace App\Mail;

use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;

class BilgilendirmeMaili extends Mailable
{
    use Queueable, SerializesModels;

    public $veri;

    public function __construct($veri)
    {
        $this->veri = $veri;
    }

    public function build()
    {
        return $this->subject('Önemli Bilgilendirme')
                   ->view('emails.bilgilendirme')
                   ->attach(storage_path('app/public/dosya.pdf'), [
                       'as' => 'belge.pdf',
                       'mime' => 'application/pdf',
                   ]);
    }
}


Mailgun Entegrasyonu

Mailgun kullanmak için öncelikle paketi yükleyelim:


composer require guzzlehttp/guzzle

Ardından .env dosyamızı güncelleyelim:


MAIL_MAILER=mailgun
MAILGUN_DOMAIN=sandbox12345.mailgun.org
MAILGUN_SECRET=key-1234567890
MAILGUN_ENDPOINT=api.mailgun.net

Mailgun dashboard'ından alacağınız bilgilerle bu ayarları doldurmalısınız.


E-posta Queue'ya Alma

Yoğun trafikli uygulamalarda e-postaları queue'ya almak performans açısından kritik önem taşır:


Mail::to('alici@example.com')
   ->queue(new BilgilendirmeMaili($veri));


Queue worker'ı başlatmak için:

php artisan queue:work


E-posta Önizleme

Geliştirme aşamasında e-postalarınızı önizlemek için:

php artisan make:mail BilgilendirmeMaili --markdown=emails.bilgilendirme


Bu komut hem mailable sınıfını hem de markdown template'ini oluşturacaktır. Önizlemek için:

Route::get('/mail-preview', function () {
    return new App\Mail\BilgilendirmeMaili($ornekVeri);
});


Test Ortamında E-posta İşlemleri

Testlerinizde e-postaların gerçekten gönderilmesini engelleyebilirsiniz:


// TestCase içinde
Mail::fake();

// Test metodunda
Mail::assertSent(BilgilendirmeMaili::class, function ($mail) {
    return $mail->hasTo('alici@example.com');
});


Laravel'de E-posta Sisteminin Avantajları

  1. Esnek Yapı: SMTP, Mailgun, Amazon SES gibi birçok sürücü desteği
  2. Zengin İçerik: HTML, Markdown ve plain text e-posta desteği
  3. Ek Yönetimi: Kolay dosya ekleme özelliği
  4. Queue Desteği: Yoğun trafikte performans optimizasyonu
  5. Test Kolaylığı: Fake mail sistemi ile test edilebilirlik


Laravel'in e-posta gönderme sistemi, hem basit kullanımı hem de gelişmiş özellikleri sayesinde ihtiyaçlarınıza mükemmel şekilde cevap verecektir. SMTP ile temel ihtiyaçlarınızı karşılayabilir, Mailgun gibi servislerle profesyonel çözümler üretebilirsiniz. Bir sonraki yazımızda Laravel'de API Rate Limiting konusunu ele alacağız. Görüşmek üzere!

5 + 6 =