Laravel Mailgun is a package that integrates Mailgun, a powerful email delivery service, with Laravel applications. This integration allows you to send emails easily and reliably through the Mailgun API, benefiting from features like analytics, tracking, and high deliverability.
Key Features of Laravel Mailgun:
- Easy Integration: Seamlessly integrates with Laravel’s mailing system.
- Mailgun API Support: Leverages Mailgun’s API for sending emails.
- Mail Tracking: Supports tracking email opens, clicks, and bounces.
- Webhook Handling: Automatically handle incoming messages via webhooks.
- Configurable: Easy to configure with different Mailgun domains and settings.
Installation
To get started with Laravel Mailgun, follow these steps:
- Install Laravel: Ensure you have a Laravel application set up. You can create a new one using the Laravel installer or Composer.
- Require the Mailgun SDK: Install the Mailgun SDK via Composer by running the following command:
1composer require mailgun/mailgun-php - Configure .env File: Add your Mailgun credentials to your
.env
file:
123MAIL_MAILER=mailgunMAILGUN_DOMAIN=your-mailgun-domainMAILGUN_SECRET=your-mailgun-api-keyyour-mailgun-domain
with your Mailgun domain (e.g.,sandbox1234567890.mailgun.org
) andyour-mailgun-api-key
with your Mailgun API key. - Update
config/mail.php
: Make sure theconfig/mail.php
file has the Mailgun configuration:
12345'mailgun' => ['transport' => 'mailgun','domain' => env('MAILGUN_DOMAIN'),'secret' => env('MAILGUN_SECRET'),],
Sending Emails
You can use Laravel’s built-in mail functionality to send emails via Mailgun. Here’s how:
- Create a Mailable Class: Use the Artisan command to create a new Mailable class:
1php artisan make:mail WelcomeMailapp/Mail
directory. - Define the Mailable: Open the
WelcomeMail
class and define how the email should be structured:
1234567891011121314151617181920212223242526namespace App\Mail;use Illuminate\Bus\Queueable;use Illuminate\Mail\Mailable;use Illuminate\Queue\SerializesModels;class WelcomeMail extends Mailable{use Queueable, SerializesModels;public $user;public function __construct($user){$this->user = $user;}public function build(){return $this->view('emails.welcome')->subject('Welcome to Our Application')->with(['name' => $this->user->name,]);}} - Create the Email View: Create a Blade template for the email in
resources/views/emails/welcome.blade.php
:
12<h1>Welcome, {{ $name }}!</h1><p>Thank you for joining our application.</p> - Sending the Email: You can send the email from a controller or any other part of your application:
12345678use App\Mail\WelcomeMail;use Illuminate\Support\Facades\Mail;public function sendWelcomeEmail(Request $request){$user = User::find($request->user_id);Mail::to($user->email)->send(new WelcomeMail($user));}
Handling Webhooks
Mailgun allows you to handle incoming messages and events via webhooks. You can set up routes in your application to handle these events.
- Create a Webhook Controller: Generate a controller to handle webhooks:
1php artisan make:controller MailgunWebhookController
12345678910111213namespace App\Http\Controllers;use Illuminate\Http\Request;class MailgunWebhookController extends Controller{public function handleWebhook(Request $request){// Process incoming data from Mailgun// For example, you can log or handle delivery notifications\Log::info('Webhook received: ', $request->all());}} - Define Routes: Add routes to handle webhooks in
routes/web.php
:
1Route::post('/mailgun/webhook', [MailgunWebhookController::class, 'handleWebhook']); - Configuring Webhooks in Mailgun: Configure your Mailgun account to point to your webhook endpoint for the events you want to handle.
Conclusion
Integrating Mailgun with Laravel allows you to manage your email sending process more effectively, leveraging Mailgun’s powerful features for enhanced delivery and tracking.
Additional Considerations
- Documentation: For more detailed information, advanced features, and updates, refer to the official Mailgun documentation and the Laravel Mail documentation.
- Testing: Consider using tools like Mailtrap or Mailhog for testing your email sending during development to avoid sending real emails.