If you want to test email contents in your app but unable or unwilling to set up something like Mailgun, use .env parameter MAIL_DRIVER=log and all the email will be saved into storage/logs/laravel.log file, instead of actually being sent.
If you use Mailables to send email, you can preview the result without sending, directly in your browser. Just return a Mailable as route result:
Route::get('/mailable', function () { $invoice = App\Invoice::find(1); return new App\Mail\InvoicePaid($invoice);});You can also preview your email without Mailables. For instance, when you are creating notification, you can specify the markdown that may be use for your mail notification.
use Illuminate\Notifications\Messages\MailMessage;Route::get('/mailable', function () { $invoice = App\Invoice::find(1); return (new MailMessage)->markdown('emails.invoice-paid', compact('invoice'));});You may also use other methods provided by MailMessage object such as view and others.
Tip given by @raditzfarhan
If you send Laravel Notification and don't specify subject in toMail(), default subject is your notification class name, CamelCased into Spaces.
So, if you have:
class UserRegistrationEmail extends Notification { //}Then you will receive an email with subject User Registration Email.
You can send Laravel Notifications not only to a certain user with $user->notify(), but also to anyone you want, via Notification::route(), with so-called "on-demand" notifications:
Notification::route('mail', 'taylor@example.com') ->route('nexmo', '5555555555') ->route('slack', 'https://hooks.slack.com/services/...') ->notify(new InvoicePaid($invoice));You can use the when() or unless() methods in your MailMessage notifications to set conditional object properties like a call to action.
class InvoicePaid extends Notification{ public function toMail(User $user) { return (new MailMessage) ->success() ->line('We've received your payment) ->when($user->isOnMonthlyPaymentPlan(), function (MailMessage $message) { $message->action('Save 20% by paying yearly', route('account.billing')); }) ->line('Thank you for using Unlock.sh'); }}Use the when or unless methods in you own classes by using the Illuminate\Support\Traits\Conditionable trait
Tip given by @Philo01