Expected response code 250 but got code "554", with message "554 Message rejected | Laravel Using TO Email
Stefan Bogdanescu
Founder & Senior Architect · 2026-06-29
Decoding the 554 Error: Troubleshooting Email Delivery Failures in Laravel with Amazon SES
As senior developers, we often deal with frustrating error codes that seem arbitrary but hide very specific configuration issues. One such scenario is encountering an HTTP error like 554 Message rejected: Email address is not verified when attempting to send transactional emails through a service like Amazon SES integrated with a framework like Laravel.
This post dives deep into the specific problem you are facing—receiving a 554 response instead of the expected 250 acknowledgment—and provides a comprehensive, developer-focused solution based on your provided configuration details. We will explore why this happens in the context of Amazon SES and how to align your Laravel application settings with your email service provider's verification requirements.
Understanding the 554 Error in Email Delivery
The error code 554 is a permanent failure response, meaning the receiving server (in this case, the SMTP server or the recipient's mail system) has rejected the message outright. The accompanying message, "Email address is not verified," is the key diagnostic clue.
When sending emails via an external service like Amazon SES, the issue almost always relates to Sender Authentication and Domain Verification. For SES to allow you to send mail on behalf of a specific domain (e.g., example2.com), that domain must be explicitly verified within your AWS account settings. If the address used in the outgoing email header does not match any verified identity, the receiving server rejects the message immediately.
The Root Cause: Sender Identity Mismatch
Your problem stems from a mismatch between the email address configured as the sender in your Laravel application and the domain that has been successfully verified by Amazon SES.
Let's look at your configuration:
- Verified Domain (SES Setup):
example1.com - Sending Address (
MAIL_FROM_ADDRESS):from@example2.com
The system is attempting to send an email from from@example2.com, but the SES configuration seems tied only to example1.com. Since example2.com has not been verified within your AWS/SES account, the delivery pipeline fails with a rejection error (554).
This is a classic example of needing to manage domain identity carefully when using third-party email infrastructure. For robust application development, understanding these external dependencies is crucial, which aligns perfectly with the architectural principles promoted by platforms like Laravel Company.
Practical Steps to Resolve the Issue
To resolve this 554 error and achieve the expected 250 response, you need to ensure that the sending address is authorized by your email service provider (SES).
Step 1: Verify the Sender Domain in Amazon SES
The absolute first step is to verify the domain you intend to send from within your AWS SES console. If you want to send mail from example2.com, you must ensure that this domain has been successfully verified and authorized for sending via SES. This typically involves setting up DNS records (like SPF, DKIM, and DMARC) correctly for the domain in question.
Step 2: Align Laravel Configuration with SES Policy
Review your .env file settings:
MAIL_FROM_ADDRESS="from@example2.com"
MAIL_HOST="test-smtp.region.amazonaws.com"
# ... other settings
If you are using SES, ensure that the domain specified in MAIL_FROM_ADDRESS is one of the domains actively verified within your AWS account used for sending mail through that specific endpoint. If example2.com is not verified, you must either:
- Verify
example2.comin SES: Complete the necessary DNS validation steps in the AWS console. - Change to a Verified Domain: Configure your application to send from an address on a domain that is verified (e.g.,
from@example1.com).
Step 3: Review Laravel Mail Implementation
While the error is external (SES), it’s worth reviewing how Laravel handles this via the Mail facade. Ensure you are correctly utilizing the configured SMTP settings and not introducing any custom headers that might confuse the SES handshake. The logic within packages like those used for password resets, such as the one in your SendsPasswordResetEmails trait, relies entirely on the underlying transport layer (SMTP) successfully executing the send command.
Conclusion
The 554 Message rejected: Email address is not verified error is a clear signal that the sending identity does not possess the necessary trust credentials from the email service provider. In scenarios involving Amazon SES and custom domains, success hinges on meticulous domain verification within the AWS environment matching the addresses specified in your application configuration. By ensuring that example2.com is properly set up and verified, you will resolve this transport failure and allow your Laravel application to deliver password reset emails successfully with the expected 250 response. Always treat email delivery as a multi-layered system: application code, server configuration, and external service verification must all align perfectly.