Laravel iletişim formu ile eposta göndermenin nasıl yapılacağını anlattığım bu yazı ile projelerinizde ek bir paket kurmadan Laravel’in sağlamış olduğu mevcut imkânlarla rahatlıkla bir iletişim formu oluşturulabildiğini görebilirsiniz.
Not: Bu yazımda her ne kadar iletişim formunun örnek uygulama olarak ele almış olsam da esas meselenin Laravel ile nasıl mail (eposta) gönderilir sorusuna cevap aramak olduğunu da söylemem lazım.
Laravel iletişim formu
Laravel iletişim formu için kullanacağımız eposta işlemleri için ücretsiz ve zengin “SwiftMailer” kütüphanesini kullanmaktadır. Bu kütüphane sayesinde başımız ağrımadan rahatlıkla eposta gönderme işlemlerini gerçekleştirebiliriz. Bununla birlikte eposta şablonları normal view dosyaları şeklinde yüklenir. Böylece Blade template sistemini eposta şablonlarımız için kolayca kullanabilir, bu view dosyalarına istediğimiz veriyi yükleyebiliriz.
Uygulamamızda contact.blade.php dosyasında bulunan iletişim formu doldurularak gönderildiğinde, route dosyasında (web.php) iletişim formundaki veriler alınacak, contacttext.blade.php dosyası ile birleştirilecek ve birleştirilmiş veriler belirtilen eposta adresine HTML formatında gönderilecektir.
Laravel eposta gönderme
Öncelikle Laravel kurulumunda bulunan .env dosyasında eposta sürücümüz için gerekli ayarları yapmalıyız. Ben eposta gönderirken Gmail altyapısını kullandığım için başlangıçta Gmail’e girerek uygulama için gerekli parolayı oluşturuyoruz ve .env dosyasının içeriğini aşağıdaki şekilde güncelliyoruz.
MAIL_DRIVER = smtp MAIL_HOST = smtp.gmail.com MAIL_PORT = 587 MAIL_USERNAME = your-gmail-username MAIL_PASSWORD = your-application-specific-password MAIL_ENCRYPTION = tls
View dosyasının oluşturulması
Burada vereceğim örnekte epostaları HTML şeklinde göndereceğiz. Bunun için 2 view dosyasına ihtiyacımız var. Bunlardan ilki iletişim formunu içinde barındıran contact.blade.php, diğeri ise formdan gelen bilgilerle birlikte gönderilecek olan HTML kodlarını içeren contacttext.blade.php dosyasıdır.
Konuyu basit bir şekilde anlatmak istediğim için blade template sisteminin detaylarına inmeden, CSS kodları da içinde bulunan tek sayfalık örnek iletişim formu (contact.blade.php) hazırladım. Formun görünümü ve kodları aşağıdaki gibidir.
Laravel
Form verileri ile birlikte gönderilecek olan HTML dosyamız (contacttext.blade.php) ise şu şekildedir.
Ad Soyad: {{ $name }}
Eposta: {{ $email }}
Telefon: {{ $phone }}
Website: {{ $url }}
Mesaj: {{ $messagetext }}
Route dosyasının güncellenmesi
Normal şartlarda route dosyası (web.php) adı üstünde routing için kullanılır. Eposta gönderme gibi işlemler controller dosyalarında yapılır ancak yine konuyu sadeleştirmek adına tüm işlemi route dosyasında (web.php) gerçekleştireceğiz. Laravel dizinimizdeki routes/web.php dosyasını açarak aşağıdaki şekilde değiştiriyoruz.
$request->name, 'email'=>$request->email, 'phone'=>$request->phone, 'url'=>$request->url, 'messagetext'=>$request->messagetext ); Mail::send('contacttext', $data, function ($message) use ($request){ $message->subject ('Laravel İletişim Formu!'); $message->from ('[email protected]', 'Erhan Yakut'); $message->to('[email protected]', 'Erhan Yakut'); }); return view('contact')->with('send', TRUE); });
Dip Notlar
İletişim formumuz temel olarak bundan ibarettir. Ancak elbette ki bunu geliştirmek sizin elinizde. Yapabileceklerinize kısaca değinmek gerekirse şu şekilde sıralayabiliriz.
1. Form Validation Kullanımı
Sonuçta bir form doldurularak uygulamamız tarafından işleme alınıyor. Böyle bir durumda aşağıdaki gibi bir Form Validation kullanmak oldukça mantıklı olacaktır.
$this->validate($request,[ 'name' => 'required', 'email' => 'required|email', 'message' => 'required', ], $messages);
2. Diğer Eposta Seçenekleri
Yukarıdaki örnekte $message->from, $message->from gibi değişkenleri gördünüz. Bir epostanın bir çok özelliği bulunmaktadır. İşte bu özellikleri aşağıdaki değişkenler (methodlar) vasıtasıyla kullanabilirsiniz.
$message->sender('[email protected]', 'Mr. Example'); $message->returnPath('[email protected]'); $message->cc('[email protected]', 'Mr. Example'); $message->bcc('[email protected]', 'Mr. Example'); $message->replyTo('[email protected]', 'Mr. Example'); $message->priority(2);
3. Epostaya Dosya Eklemek
Epostamıza bir dosyayı dilerseniz ek (attachment) olarak, dilerseniz de gömülü (embeded) olarak ekleyebilirsiniz. Bunun için de aşağıdaki methodları kullanabilirsiniz.
$message->attach('path/to/attachment.txt'); $message->embed('path/to/attachment.jpg');
Son Sözler
Burada konuyu basit bir iletişim formu çerçevesinde kısaca anlatmaya çalıştım. Ancak amacınız bir listedeki tüm kişilere queue şeklinde ve düzenli olarak eposta göndermek gibi daha detaylı konular içeriyorsa Laravel dokümantasyonundaki Mail başlığını çalışmanızı tavsiye ederim. İyi çalışmalar…