How to Create and Send an Email in Laravel
Emailing doesn’t have to be a headache. With Laravel’s clean, simple email API powered by the popular Symfony Mailer component, you can quickly get started sending mail through a local or cloud-based service of your choice. The Laravel and Symfony Mailer APIs allow you to send email via SMTP, Mailgun, Postmark, Amazon SES (Simple Email Service), and Sendmail.
When you’re ready to send an email in your Laravel application, there are a few options you have. In this tutorial, we’ll look at the most straightforward way to use the Mail class in Laravel to send emails.
.env
MAIL_DRIVER=smtp MAIL_HOST=smtp.gmail.com MAIL_PORT=587 [email protected] MAIL_PASSWORD=yourpass MAIL_ENCRYPTION=tls
app/Mail/MainMail.php
<?php namespace App\Mail; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Mail\Mailable; use Illuminate\Queue\SerializesModels; class MainMail extends Mailable { use Queueable, SerializesModels; public $details; /** * Create a new message instance. * * @return void */ public function __construct($details) { $this->details = $details; } /** * Build the message. * * @return $this */ public function build() { return $this->subject('Due for Reviewing')->view('mails.duedate'); } }
resources/views/mails/duedate.blade.php
<!DOCTYPE html> <html> <head> <title>Your Company: {{ $details['title'] }}</title> </head> <body> <h1>{{ $details['title'] }}</h1> {!! $details['body'] !!} </body> </html>
EmailController.php
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\File; use Illuminate\Support\Facades\Auth; use App\Equipment; use App\Mail; class EmailController extends Controller { public function sendMail(){ $details = [ 'title' => 'Due for Review', 'body' => '<p>There are equipment that needs your atention: </p>' ]; $details['body'] .= '<ul>'; $dueInspections = Equipment::all(); foreach($dueInspections as $equipment){ $details['body'] .= '<li>'.$equipment->name.'<li>'; } $details['body'] .= '</ul>'; \Mail::to('[email protected]')->send(new \App\Mail\MainMail($details)); dd($details); } }
routes/web.php
// Route::get('send-mail', 'EmailController@sendMail')->name('sendMail');