Laravel’de Mail Gönderme ve Bildirimler
Laravel, modern web uygulamaları geliştirirken e-posta gönderimi ve bildirim sistemleri gibi ihtiyaçları kolayca karşılamak için güçlü araçlar sunar. Bu yazıda, Laravel’de e-posta gönderme işlemlerini ve bildirim sistemini adım adım ele alacağız. Laravel’in sunduğu Mail ve Notification sınıfları sayesinde, SMTP, Mailgun, SES, Postmark gibi farklı e-posta servisleriyle entegrasyon oldukça basittir. Gelin, bu süreçleri birlikte inceleyelim.
1️⃣ Mail Servisinin Yapılandırılması
Laravel’de e-posta göndermek için öncelikle .env
dosyasında e-posta ayarlarınızı yapılandırmanız gerekiyor. Bu ayarlar, uygulamanızın hangi e-posta servisini kullanacağını ve nasıl bağlantı kuracağını belirler.
SMTP ile Mail Göndermek
SMTP, en yaygın kullanılan e-posta gönderme protokollerinden biridir. Laravel’de SMTP kullanmak için .env
dosyanıza aşağıdaki gibi ayarları ekleyebilirsiniz:
MAIL_MAILER=smtp
MAIL_HOST=smtp.example.com
MAIL_PORT=587
MAIL_USERNAME=[email protected]
MAIL_PASSWORD=your-password
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=[email protected]
MAIL_FROM_NAME="Laravel Uygulaması"
Bu ayarlar, uygulamanızın belirtilen SMTP sunucusu üzerinden e-posta göndermesini sağlar.
Gmail SMTP Kullanımı
Gmail’in SMTP servisini kullanmak isterseniz, .env
dosyanızı aşağıdaki gibi güncelleyebilirsiniz:
MAIL_MAILER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=[email protected]
MAIL_PASSWORD=your-app-password
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=[email protected]
MAIL_FROM_NAME="Laravel Uygulaması"
Gmail kullanırken dikkat etmeniz gereken nokta, uygulama şifresi (app password) kullanmanız gerektiğidir. Bu, güvenlik nedeniyle zorunlu bir adımdır.
Local Geliştirme İçin Mailtrap Kullanımı
Geliştirme sürecinde e-postaları test etmek için Mailtrap gibi servisler oldukça kullanışlıdır. Mailtrap, e-postaları gerçekten göndermek yerine sanal bir ortamda test etmenizi sağlar. Mailtrap kullanmak için .env
dosyanızı aşağıdaki gibi ayarlayabilirsiniz:
MAIL_MAILER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=your-mailtrap-username
MAIL_PASSWORD=your-mailtrap-password
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS=[email protected]
MAIL_FROM_NAME="Laravel Uygulaması"
2️⃣ Mail Sınıfı ile E-Posta Gönderme
Laravel’de e-posta göndermek için Mailable
sınıfı kullanılır. Bu sınıf, e-postalarınızı oluşturmanızı ve göndermenizi sağlar.
Yeni Bir Mailable Sınıfı Oluşturma
Yeni bir e-posta şablonu oluşturmak için aşağıdaki Artisan komutunu kullanabilirsiniz:
php artisan make:mail WelcomeMail
Bu komut, app/Mail/WelcomeMail.php
dosyasını oluşturur. Bu dosya, e-postanın içeriğini ve yapısını belirler.
Mail İçeriğini Oluşturma
Oluşturduğunuz WelcomeMail
sınıfında, e-postanın içeriğini ve gönderici bilgilerini ayarlayabilirsiniz. Örneğin:
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
class WelcomeMail extends Mailable
{
use Queueable, SerializesModels;
public $user;
public function __construct($user)
{
$this->user = $user;
}
public function build()
{
return $this->from('[email protected]')
->subject('Hoş Geldiniz!')
->view('emails.welcome');
}
}
Bu örnekte, kullanıcıya hoş geldin mesajı içeren bir e-posta gönderilmektedir.
E-Posta İçeriği için Blade Şablonu Oluşturma
E-postanın içeriğini oluşturmak için Blade şablonlarını kullanabilirsiniz. Örneğin, resources/views/emails/welcome.blade.php
dosyasını oluşturup aşağıdaki içeriği ekleyebilirsiniz:
<!DOCTYPE html>
<html>
<head>
<title>Hoş Geldiniz</title>
</head>
<body>
<h1>Merhaba {{ $user->name }},</h1>
<p>Laravel uygulamamıza hoş geldiniz!</p>
</body>
</html>
Run HTML
Mail Gönderme İşlemi
E-postayı göndermek için aşağıdaki kodu kullanabilirsiniz:
use App\Mail\WelcomeMail;
use Illuminate\Support\Facades\Mail;
public function sendMail()
{
$user = auth()->user();
Mail::to($user->email)->send(new WelcomeMail($user));
return "E-posta gönderildi!";
}
3️⃣ Markdown Destekli Mail Kullanımı
Laravel, e-posta şablonları için Markdown desteği de sunar. Markdown, e-postalarınızı daha hızlı ve etkili bir şekilde oluşturmanızı sağlar.
Markdown Destekli Mail Oluşturma
Markdown destekli bir e-posta oluşturmak için aşağıdaki komutu kullanabilirsiniz:
php artisan make:mail OrderShipped --markdown=emails.order
Bu komut, resources/views/emails/order.blade.php
dosyasını oluşturur.
Markdown E-Posta Dosyası
Markdown e-posta şablonu aşağıdaki gibi olabilir:
@component('mail::message')
# Siparişiniz Kargoya Verildi
Merhaba, siparişiniz kargoya verildi. Takip numaranız: **123456789**.
@component('mail::button', ['url' => 'https://kargo-takip.com'])
Siparişimi Takip Et
@endcomponent
Teşekkürler,<br>
{{ config('app.name') }}
@endcomponent
Mail Gönderme
Markdown e-postasını göndermek için aşağıdaki kodu kullanabilirsiniz:
Mail::to('[email protected]')->send(new OrderShipped());
4️⃣ Bildirim Sistemi (Notifications)
Laravel’de bildirimler (notifications), e-posta, SMS, Slack, veritabanı gibi farklı kanallar üzerinden kullanıcılara mesaj göndermenizi sağlar.
Yeni Bir Notification Oluşturma
Yeni bir bildirim oluşturmak için aşağıdaki komutu kullanabilirsiniz:
php artisan make:notification OrderShippedNotification
Bu komut, app/Notifications/OrderShippedNotification.php
dosyasını oluşturur.
Notification İçeriği
Bildirim içeriğini aşağıdaki gibi oluşturabilirsiniz:
namespace App\Notifications;
use Illuminate\Bus\Queueable;
use Illuminate\Notifications\Notification;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Messages\MailMessage;
class OrderShippedNotification extends Notification
{
use Queueable;
public function via($notifiable)
{
return ['mail'];
}
public function toMail($notifiable)
{
return (new MailMessage)
->subject('Siparişiniz Kargoya Verildi')
->greeting('Merhaba!')
->line('Siparişiniz başarıyla kargoya verildi.')
->action('Siparişi Takip Et', url('/siparis-takip'))
->line('Teşekkür ederiz!');
}
}
Kullanıcıya Bildirim Gönderme
Bildirimi kullanıcıya göndermek için aşağıdaki kodu kullanabilirsiniz:
use App\Notifications\OrderShippedNotification;
$user->notify(new OrderShippedNotification());
Birden Fazla Kanal Üzerinden Bildirim Gönderme
Eğer bildirimleri birden fazla kanal üzerinden göndermek isterseniz, via
metodunu aşağıdaki gibi güncelleyebilirsiniz:
public function via($notifiable)
{
return ['mail', 'database'];
}
Veritabanında Bildirimleri Kaydetme
Bildirimleri veritabanında saklamak için öncelikle notifications
tablosunu oluşturmanız gerekiyor:
php artisan notifications:table
php artisan migrate
Daha sonra, bildirimleri veritabanına kaydetmek için toDatabase
metodunu kullanabilirsiniz:
public function toDatabase($notifiable)
{
return [
'message' => 'Siparişiniz kargoya verildi!',
'order_id' => 12345
];
}
Bildirimleri Kullanıcı Panelinde Listeleme
Kullanıcının bildirimlerini listelemek için aşağıdaki kodu kullanabilirsiniz:
$user = auth()->user();
$bildirimler = $user->notifications;
Okunmamış Bildirimleri Getirme
Okunmamış bildirimleri almak için aşağıdaki kodu kullanabilirsiniz:
$okunmamisBildirimler = $user->unreadNotifications;
Bildirimi Okundu Olarak İşaretleme
Bir bildirimi okundu olarak işaretlemek için aşağıdaki kodu kullanabilirsiniz:
$bildirim->markAsRead();
Sonuç
Laravel, e-posta gönderme ve bildirim sistemleri konusunda oldukça esnek ve güçlü bir yapı sunar. Bu yazıda, SMTP ile e-posta gönderme, Mailable sınıfı kullanarak e-posta tasarlama, Markdown destekli e-posta şablonları oluşturma ve bildirim sistemi kullanımı gibi temel konuları ele aldık. Laravel’in sunduğu bu araçlar sayesinde, kullanıcılarınıza etkili ve hızlı bir şekilde ulaşabilirsiniz.
Laravel Eğitimi Konular
- Laravel Nedir ve Neden Kullanılmalı?
- Laravel Kurulumu (Composer ile Adım Adım Rehber)
- Laravel Proje Yapısı ve MVC Mimarisi
- Laravel Routing ve Controller Kullanımı
- Laravel Middleware Kullanımı
- API isteklerinde middleware kullanımı
- Laravel Migration ve Seeder Kullanımı
- Laravel Factory ve Faker ile Test Verisi Üretme
- Laravel’de API Kullanımı ve Token Bazlı Authentication
- Laravel Rol ve Yetkilendirme İşlemleri
- Laravel’de Cache ve Performans Optimizasyonu
- Laravel’de Queue (Kuyruk) Kullanımı ve Arka Plan İşlemleri
- Laravel Event & Listener Kullanımı
- Laravel’de Scheduler (Zamanlanmış Görevler) Kullanımı: Otomatik İşlemler ve Zaman Yönetimi
- Laravel’de Test Driven Development (TDD) ve Test Yazımı