Skip to content

Latest commit

 

History

History
113 lines (82 loc) · 3.97 KB

mail.md

File metadata and controls

113 lines (82 loc) · 3.97 KB

Mail

⬆️ Go to main menu ⬅️ Previous (Auth) ➡️ Next (Artisan)

Testing email into laravel.log

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.

You don’t have to store files to use them as email attachments in Laravel

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

Preview Mailables

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);
});

Preview Mail without Mailables

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

Default Email Subject in Laravel Notifications

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.

Send Notifications to Anyone

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));

Set conditional object properties

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