Skip to main content
Resend Docs

Search documentation

Type to search this documentation.

On this pageOverview

Send emails with Laravel

Before you start, you'll need:

Prefer watching a video? Check out this video walkthrough below.

YouTube video player
  1. Install

    First, install Resend for Laravel using the Composer package manager:

    Composer
    composer require resend/resend-laravel
  2. Configuration

    API key

    Next, configure your Resend API key in your application's .env file:

    .env
    RESEND_API_KEY=re_xxxxxxxxx

    Mail driver

    To use Resend as your mail driver, first create a new mailer definition, in the mailers array within your application's config/mail.php configuration file:

    mail.php
    'resend' => [
        'transport' => 'resend',
    ],

    Next, update your application's .env file to use the Resend mail driver:

    .env
    MAIL_MAILER=resend
    MAIL_FROM_ADDRESS=onboarding@resend.dev
    MAIL_FROM_NAME=Acme
  3. Send an email

    Resend for Laravel provides two convenient ways to send emails, using Laravel's email service or the Resend API facade.

    Using the Mail Facade

    OrderShipmentController.php
    <?php
    
    namespace App\Http\Controllers;
    
    use App\Http\Controllers\Controller;
    use App\Mail\OrderShipped;
    use App\Models\Order;
    use Illuminate\Http\RedirectResponse;
    use Illuminate\Http\Request;
    use Illuminate\Support\Facades\Mail;
    
    class OrderShipmentController extends Controller
    {
        /**
         * Ship the given order.
         */
        public function store(Request $request): RedirectResponse
        {
            $order = Order::findOrFail($request->order_id);
    
            // Ship the order...
    
            Mail::to($request->user())->send(new OrderShipped($order));
    
            return redirect('/orders');
        }
    }

    Using the Resend Facade

    OrderShipmentController.php
    <?php
    
    namespace App\Http\Controllers;
    
    use App\Http\Controllers\Controller;
    use App\Mail\OrderShipped;
    use App\Models\Order;
    use Illuminate\Http\RedirectResponse;
    use Illuminate\Http\Request;
    use Resend\Laravel\Facades\Resend;
    
    class OrderShipmentController extends Controller
    {
        /**
         * Ship the given order.
         */
        public function store(Request $request): RedirectResponse
        {
            $order = Order::findOrFail($request->order_id);
    
            // Ship the order...
    
            Resend::emails()->send([
                'from' => 'Acme <onboarding@resend.dev>',
                'to' => [$request->user()->email],
                'subject' => 'hello world',
                'html' => (new OrderShipped($order))->render(),
            ])
    
            return redirect('/orders');
        }
    }
  4. Receiving webhook requests

    By default, Resend for Laravel includes a webhook controller to respond to the /resend/webhook URL path. The controller will dispatch a Laravel event that corresponds to a Resend event. For example, an email.delivered event type will send an EmailDelivered Laravel event.

    Register the webhook endpoint

    Register your publicly accessible HTTPS URL in the Resend dashboard.

    Add Webhook

    CSRF protection

    Webhook requests from Resend need to bypass Laravel's CSRF protection. Be sure to list the URI as an exception in your application's App\Http\Middleware\VerifyCsrfToken middleware or list the route outside of the web middleware group:

    PHP
    protected $except = [
        'resend/*',
    ];

    Verifying webhook signatures

    To enable webhook verification, ensure that the RESEND_WEBHOOK_SECRET environment variable is set in your application's .env file. The Signing secret can be retrieved from your Resend dashboard.

Suggest an edit

Propose a replacement for this page. The site team reviews it before applying any changes.

Export
Documentation menu