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:auth
Sebelum email bisa dikirim anda harus menginstall guzzle
composer require guzzlehttp/guzzle
Buat mailable dengan nama UserTerdaftar
dengan
php artisan make:mail UserTerdaftar
Buka 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 :)