Documentation

General Debugging

Emails Failing to Send

Enable debug logging by editing your wp-config.php file to replace this line:

define( 'WP_DEBUG', false );

With the following lines:

define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);

That will allow detailed errors to be logged to /wp-content/debug.log. Try resending an email that failed or triggering another email and then check the debug.log file to see if there is any more information about the error.

Some of the possible errors that may be logged are as follows:

Email address is not verified

This error happens when your site sends an email from an email address that hasn’t been verified with your AWS account. You can either verify the email address provided in the error details in the Verified Senders tab, or you can change the email address to one that is verified.

If you’re not sure where that email address is being used on your site, it may be worth checking any other plugins to see if they are configured to send emails from that address. Another common reason we see is a contact form plugin configured to send emails as the form submitter instead of the website owner.

Daily message quota exceeded

You’ve exceeded the amount of emails you can send in a day. Consider increasing your SES sending limits.

Maximum sending rate exceeded

You’re sending too many emails at once. Every AWS account has a limit on the number of emails you can send per second. The paid version of WP Offload SES includes an email queue that automatically detects your send rate and makes sure you stay under it. You can also put in a request with AWS to increase your SES sending limits.

Emails Stuck as “Queued”

The most common reason for an email to be stuck with a “Queued” status would be that the WordPress cron isn’t firing. The default WordPress cron relies on website traffic in order to function, so if a site isn’t getting a lot of traffic it may not fire regularly.

In this case we would recommend setting up a separate, server-level cron as shown here.

If you’re running on WordPress Multisite, the cron for each subsite must be triggered independently.