Skip to main content

Laravel Mail Not Sending? Step-by-Step Debugging Guide (2026)

Laravel mail not sending? Learn how to debug SMTP, queues, Gmail, Mailtrap, Mailgun, and production email issues with this practical step-by-step troubleshooting guide.

Birendra Jung Rai Jun 13, 2026 4 min read

Facing the same issue?

This guide walks you through the exact fix — step by step.

Laravel Mail Not Sending? Step-by-Step Debugging Guide (2026)

Let's go :-

One of the most common issues Laravel developers encounter is email functionality suddenly stopping without any obvious error.

The application may appear to send emails successfully, yet no email reaches the recipient. In other situations, emails work perfectly in a local environment but fail after deployment to a production server.

This guide covers the most common causes of Laravel mail delivery failures and provides a systematic debugging process you can follow in both development and production environments.


Symptoms of the Problem

You may notice one or more of the following:

  • Password reset emails are not received.

  • Contact form submissions do not send emails.

  • Verification emails never arrive.

  • No error message is displayed.

  • Emails work locally but not on production.

  • Queue jobs complete successfully but emails are never delivered.


Step 1: Verify Your Mail Driver Configuration

Check your .env file.

MAIL_MAILER=smtp
MAIL_HOST=sandbox.smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=your_username
MAIL_PASSWORD=your_password
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=noreply@example.com
MAIL_FROM_NAME="${APP_NAME}"

Common mistakes include:

  • Wrong SMTP host

  • Incorrect username or password

  • Missing encryption setting

  • Invalid sender address

After making changes, clear configuration cache:

php artisan config:clear
php artisan cache:clear

If configuration caching is enabled:

php artisan config:cache

Step 2: Confirm Laravel Is Reading the Correct Values

Run:

php artisan tinker

Then:

config('mail.mailers.smtp.host');
config('mail.mailers.smtp.username');

Verify that Laravel is loading the expected values.

If the values differ from your .env file, configuration caching is likely the problem.


Step 3: Test Email Sending Directly

Use Tinker:

php artisan tinker
Mail::raw('Testing email', function ($message) {
    $message->to('you@example.com')
            ->subject('Laravel Mail Test');
});

If an exception appears, Laravel will often reveal the exact SMTP issue.


Step 4: Check Laravel Logs

Review:

storage/logs/laravel.log

Look for errors such as:

Connection could not be established
Authentication failed
SMTP timeout
Connection refused

These messages usually identify the root cause immediately.


Step 5: Verify Queue Processing

Many applications send emails through queues.

Check your mail code:

Mail::to($user)->queue(new WelcomeMail());

If queues are enabled but workers are not running, emails will never be processed.

Verify:

php artisan queue:work

For production environments:

sudo supervisorctl status

Common issue:

The application queues email jobs successfully, but no queue worker is running.


Step 6: Verify Firewall and Hosting Restrictions

Some hosting providers block outbound SMTP connections.

Test connectivity:

telnet smtp.mailgun.org 587

Or:

nc -vz smtp.mailgun.org 587

If the connection fails:

  • SMTP ports may be blocked.

  • Your hosting provider may restrict email traffic.

  • Firewall rules may need adjustment.


Step 7: Check Gmail SMTP Configuration

If using Gmail:

MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_ENCRYPTION=tls

Modern Gmail accounts require:

  • Two-factor authentication

  • App Passwords

Regular Gmail account passwords no longer work for SMTP authentication.


Step 8: Verify DNS Records in Production

For production domains, missing DNS records can cause email delivery failures.

Check:

  • SPF

  • DKIM

  • DMARC

Without proper DNS authentication:

  • Emails may land in spam.

  • Delivery rates decrease significantly.

  • Some providers may reject messages entirely.


Step 9: Inspect Failed Queue Jobs

If emails are queued:

php artisan queue:failed

View failed jobs:

php artisan queue:failed

Retry:

php artisan queue:retry all

Many production mail issues are actually queue failures.


Step 10: Enable Detailed Mail Logging

Temporarily switch to the log mailer.

MAIL_MAILER=log

Then send a test email.

Check:

storage/logs/laravel.log

If email content appears in the logs, Laravel is generating the email correctly and the problem exists between Laravel and the mail provider.


Common Production Issues

Configuration Cache Not Cleared

After deployment:

php artisan optimize:clear

Queue Worker Not Running

php artisan queue:work

Invalid SMTP Credentials

Double-check credentials from:

  • Mailgun

  • Postmark

  • Brevo

  • Mailtrap

  • Amazon SES

Blocked SMTP Ports

Many VPS providers restrict:

  • Port 25

  • Port 465

  • Port 587

Verify with your provider.


My Production Debugging Checklist

Whenever email stops working, I follow this order:

  1. Verify .env

  2. Clear configuration cache

  3. Send test email using Tinker

  4. Review laravel.log

  5. Check queue workers

  6. Check failed jobs

  7. Verify SMTP connectivity

  8. Verify DNS records

This process typically identifies the root cause within a few minutes.


Conclusion

Laravel mail delivery issues are usually caused by configuration problems, queue processing failures, SMTP authentication errors, or hosting restrictions.

Rather than changing multiple settings at once, follow a structured debugging process. Start with configuration, verify Laravel can send mail directly, then move outward toward queue workers, SMTP providers, and server-level restrictions.

In production environments, the majority of mail issues I encounter are caused by stale configuration caches or queue workers that silently stopped running.

Want this fixed in your project?

I solve real Laravel production issues — quickly and properly.

Get Help →

💼 Real Work

I’ve solved similar issues in real production Laravel systems.

View Case Studies →
Profile

Birendra Jung Rai

Laravel Developer • System Architect • Debugging Specialist

Still stuck?

Let’s fix it properly — no trial and error.

Get Professional Help →