Mengirim email dengan Laravel sangat-sangat mudah, hanya butuh beberapa baris kode, seperti sulap email bisa langsung dikirim. Email yang dikirim bisa menggunakan template, markdown ataupun plain text, sangat flexible. Untuk memudahkan mengenai pengiriman email di Laravel, kita akan membuat laravel mengirim email tiap kali ada user yang mendaftar.
Install Laravel
Install Laravel dengan composer
composer create-project --prefer-dist laravel/laravel laramail
Setting .env
Disini kita akan menggunakan mailtrap, bagian yang perlu diubah adalah MAIL_USERNAME dan MAIL_PASSWORD
MAIL_DRIVER=smtp MAIL_HOST=mailtrap.io MAIL_PORT=2525 MAIL_USERNAME=null MAIL_PASSWORD=null MAIL_ENCRYPTION=null
sesuaikan dengan credential mailtrap anda. Bila belum punya akun mailtrap daftar di mailtrap.io
Authentication
Laravel sudah bisa menghandle pendaftaran, login, dan reset password untuk user, yang perlu dilakukan adalah mengaktifkannya dari terminal
php artisan make:authSebelum email bisa dikirim anda harus menginstall guzzle
composer require guzzlehttp/guzzle
Buat mailable dengan nama UserTerdaftar dengan
php artisan make:mail UserTerdaftarBuka file app/Mail/UserTerdaftar.php ubah menjadi
<?php namespace App\Mail; use Illuminate\Bus\Queueable; use Illuminate\Mail\Mailable; use Illuminate\Queue\SerializesModels; class UserTerdaftar extends Mailable { use Queueable, SerializesModels; public $user; /** * Create a new message instance. * * @return void */ public function __construct($user) { $this->user = $user; } /** * Build the message. * * @return $this */ public function build() { // view untuk email return $this->view('userbaru'); } }
Dibagian construct inilah yang membuat kita bisa mengirim data dari Controller ke (email) view Laravel.
Buat view (template) untuk email yang akan kita kirim resources/views/userbaru.blade.php
<h3>Hai, {{ $user->name }}</h3> Email dikirim dari Laravel.
RegisterController Controller
Laravel menggunakan RegisterController untuk menghandle pendaftaran, jadi kita akan memodifikasi RegisterController untuk mengirim email begitu user mendaftar di website kita. Buka app/Http/Controllers/Auth/RegisterController.php dibagian atas tambah
use App\Mail\UserTerdaftar;
lalu ubah protected function create menjadi
protected function create(array $data) { $user= User::create([ 'name' => $data['name'], 'email' => $data['email'], 'password' => bcrypt($data['password']), ]); \Mail::to($data['email'])->send(new UserTerdaftar($user)); return $user; }
Code lengkapnya bisa dilihat disini
Default Pengirim
Email yang dikirim masih menggunakan hello@example.com untuk merubahnya buka config/mail.php edit bagian
'from' => [ 'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'), 'name' => env('MAIL_FROM_NAME', 'Example'), ],
Semua email yang dikirim dari web anda akan menggunakan alamat ini, bila anda ingin merubah from emailnya di UserTerdaftar.php ubah build() menjadi
return $this->from('pengirim@jaranguda.com') ->view('userbaru');
emailnya tidak terkirim ke alamat email tujuan, hanya terkerim ke inbox mailtrap.io…mohon bantuan dan penjelasanya
Terimakasih
kalo mau yang beneran, ganti pake SMTP beneran juga :)