⬆️ Go to main menu ⬅️ Previous (Auth) ➡️ Next (Artisan)
- Testing email into laravel.log
- You don’t have to store files to use them as email attachments in Laravel
- Preview Mailables
- Preview Mail without Mailables
- Default Email Subject in Laravel Notifications
- Send Notifications to Anyone
- Set conditional object properties
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.
Simply use attachData to add user uploaded files in Mailables.
Here's a snippet from a Mailable class using it.
public function build()
{
return $this->subject('Inquiry')
->to('[email protected]')
->markdown('email.inquiry')
->attachData(
$this->file,
$this->file->getClientOriginalName(),
);
}
Tip given by @ecrmnn
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', '[email protected]')
->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