Title: API Mailer for AWS SES
Author: beltoftnet
Published: <strong>December 29, 2025</strong>
Last modified: October 7, 2026

---

Search plugins

![](https://s.w.org/plugins/geopattern-icon/api-mailer-for-aws-ses.svg)

# API Mailer for AWS SES

 By [beltoftnet](https://profiles.wordpress.org/beltoftnet/)

[Download](https://downloads.wordpress.org/plugin/api-mailer-for-aws-ses.1.5.zip)

 * [Details](https://pirate.wordpress.org/plugins/api-mailer-for-aws-ses/#description)
 * [Reviews](https://pirate.wordpress.org/plugins/api-mailer-for-aws-ses/#reviews)
 *  [Installation](https://pirate.wordpress.org/plugins/api-mailer-for-aws-ses/#installation)
 * [Development](https://pirate.wordpress.org/plugins/api-mailer-for-aws-ses/#developers)

 [Support](https://wordpress.org/support/plugin/api-mailer-for-aws-ses/)

## Description

API Mailer for AWS SES replaces `wp_mail()` with a direct Amazon SES API integration(
SendRawEmail). There is no SMTP layer: PHPMailer only builds the message, which 
is then sent straight to the SES API.

The plugin focuses on correctness, performance, and operational clarity:
 – Direct
AWS SigV4 signed requests to SES – Minimal overhead in the `wp_mail()` hook – Optional
background queue with Action Scheduler or wp_cron fallback – Optional logging via
WooCommerce logger or PHP error_log – Clean, PSR-4 structured codebase

### Key Features

 1.  Direct SES API (SendRawEmail) integration — no SMTP required.
 2.  Background sending queue with Action Scheduler or wp_cron fallback.
 3.  Tiny-args queueing with job IDs to keep cron payloads small and private.
 4.  Configurable rate limiting per second to stay under SES send rate.
 5.  wp_mail() compatible: all headers (incl. List-Unsubscribe), attachments, inline
     images, phpmailer_init.
 6.  Test tab to send a test email and a Status tab to fetch SES GetSendQuota.
 7.  Logging via WooCommerce logger or PHP error_log, disabled by default.
 8.  Credentials from wp-config (constants) or saved settings.
 9.  Lightweight, minimal I/O, no Composer dependency.
 10. Uninstall cleanup toggle to remove settings and queued jobs on deletion.

### Why It’s High Performance

 * Avoids SMTP for the send path; uses PHPMailer only for MIME construction, then
   sends via SES API directly.
 * Background queue returns control to the request immediately when enabled.
 * Job payloads are stored server-side and referenced by a small `job_id` to avoid
   large serialized cron arguments.
 * Logging is optional and disabled by default to keep I/O low.

### Configuration

### Credentials in wp-config (recommended)

Define the following constants above “That’s all, stop editing!” in `wp-config.php`,
then enable “Read AWS credentials from wp-config” in the plugin settings.

    ```
    define('SES_MAILER_ACCESS_KEY', 'YOUR_ACCESS_KEY_ID');
    define('SES_MAILER_SECRET_KEY', 'YOUR_SECRET_ACCESS_KEY');
    define('SES_MAILER_REGION', 'us-east-1');
    ```

When this mode is enabled, the Access Key, Secret, and Region fields are cleared,
disabled, and ignored.

### Background Sending

 * When enabled, emails are queued and sent out of band by Action Scheduler if available,
   or by wp_cron as a fallback.
 * The plugin stores the full email payload in an option keyed by `ses_mailer_job_{
   uuid}` (autoload = no) and schedules a tiny cron/action with only `job_id`.
 * Retries: up to 3 total attempts with exponential backoff (60s, then 120s).
 * For consistent cron execution on low-traffic sites, configure a real system cron
   to call `wp-cron.php` regularly.

### Rate Limiting

 * A per-email pause is applied based on the configured send rate to avoid exceeding
   SES limits.

### Logging

 * When enabled, log entries route to WooCommerce Status  Logs (source: api-mailer-
   for-aws-ses) if WooCommerce is active, or to the PHP error log otherwise.
 * Logging is disabled by default. Uncheck “Disable logging” in settings to enable.

### External Services

 * This plugin connects to Amazon Simple Email Service (AWS SES) at `https://email.{
   region}.amazonaws.com` to send email and to fetch sending quotas.
 * Data sent on each email: recipients, subject, message body, headers, attachments,
   and your AWS access key ID (signed via AWS SigV4); required to deliver the email.
 * Data sent when checking quotas: your AWS access key ID and a signed request; 
   no recipient data is sent.
 * Service terms: https://aws.amazon.com/service-terms/ — Privacy: https://aws.amazon.
   com/privacy/

### Translations

 * Text domain: `api-mailer-for-aws-ses`
 * Translation template: `languages/api-mailer-for-aws-ses.pot`
 * Example: Danish `languages/api-mailer-for-aws-ses-da_DK.po` (compile to `.mo`
   for runtime)

### About the Author

API Mailer for AWS SES is built and maintained by [beltoft.net](https://beltoft.net).

## Installation

 1. Upload the plugin to `wp-content/plugins/` or install via the Plugins screen.
 2. Activate the plugin.
 3. Go to Settings  API Mailer for AWS SES.
 4. Provide AWS credentials and Region in one of two ways:
 5.  * Saved settings (fields on the Settings screen), or
     * From wp-config (recommended for production).
 6. Optionally enable background sending and configure rate limit.
 7. Use the Test tab to send a test email.

## FAQ

Q: I get 403 SignatureDoesNotMatch.
 A: Check Access Key/Secret and ensure the Region
matches your SES setup. Verify your “From” address is verified in SES.

Q: Do test emails appear in Logs?
 A: Yes. Test emails are tagged and logged unless
logging is disabled in settings.

Q: Do I need Action Scheduler installed?
 A: No. If unavailable, the plugin falls
back to wp_cron automatically. A real cron is recommended for consistent processing.

Q: Can I keep credentials out of the database?
 A: Yes. Use the wp-config constants
and enable “Read AWS credentials from wp-config”.

## Reviews

![](https://secure.gravatar.com/avatar/fc72e0fd75df581caa04fa1a5db40802d4d4e7ede5bfe8002681bc9301092568?
s=60&d=retro&r=g)

### 󠀁[Lightweight](https://wordpress.org/support/topic/lightweight-22/)󠁿

 [mindthetrash](https://profiles.wordpress.org/mindthetrash/) February 16, 2026

Gets the job done without unnecessary bloat.

 [ Read all 1 review ](https://wordpress.org/support/plugin/api-mailer-for-aws-ses/reviews/)

## Contributors & Developers

“API Mailer for AWS SES” is open source software. The following people have contributed
to this plugin.

Contributors

 *   [ beltoftnet ](https://profiles.wordpress.org/beltoftnet/)

[Translate “API Mailer for AWS SES” into your language.](https://translate.wordpress.org/projects/wp-plugins/api-mailer-for-aws-ses)

### Interested in development?

[Browse the code](https://plugins.trac.wordpress.org/browser/api-mailer-for-aws-ses/),
check out the [SVN repository](https://plugins.svn.wordpress.org/api-mailer-for-aws-ses/),
or subscribe to the [development log](https://plugins.trac.wordpress.org/log/api-mailer-for-aws-ses/)
by [RSS](https://plugins.trac.wordpress.org/log/api-mailer-for-aws-ses/?limit=100&mode=stop_on_copy&format=rss).

## Changelog

#### 1.5

 * Respect plugins that block emails.
 * Keep List-Unsubscribe and other custom headers.
 * Support inline images, named attachments and phpmailer_init.
 * Other From addresses now go to Reply-To.
 * Background queue keeps attachments and content type.
 * Stronger secret key encryption. Re-enter the key if you downgrade.

#### 1.4.2

 * Tested with WordPress 7.1.
 * Fix: failed sends now return false and fire `wp_mail_failed`; successful sends
   fire `wp_mail_succeeded`.
 * Fix: “Name ” recipients are no longer mangled.

#### 1.4.1

 * Tested with WordPress 7.0.

#### 1.4

 * New maintainer: beltoft.net.
 * Security: encrypt secret key at rest (AES-256-CBC), validate attachment paths
   against uploads/wp-content only.
 * Logging: replaced custom file logger with WooCommerce logger (falls back to error_log);
   removed Logs tab. The old `wp-content/ses-mailer-logs/` directory is no longer
   used and can be safely deleted.
 * Queue: job persistence checks throughout, retry scheduling failure handling, 
   delete-safe stale job cleanup.
 * Hardening: autoloader path sanitization, cron dedup lock, proper XML error handling,
   rate-limit via transients.
 * Added PHPUnit test suite with WordPress function stubs.

#### 1.3

 * Use PHPMailer (bundled with WordPress) for MIME construction instead of manual
   MIME building; consistent with FluentSMTP and other major WP mailer plugins.
 * Auto-detect HTML content when plugins send HTML without explicit Content-Type
   header.
 * CC/BCC support via PHPMailer header parsing (previously silently dropped).
 * Remove dead `SendEmail` structured API code and manual MIME helpers.

#### 1.2

 * Fix broken plain text generation in background queue (was using `wp_strip_all_tags`
   instead of `html_to_text`).

#### 1.1

 * Updated text domain to match plugin slug; aligned Action Scheduler group and 
   translation assets.
 * Documented AWS SES as an external service (data sent, endpoints, terms/privacy).
 * Improved log path resolution using uploads directory helpers; removed direct 
   core includes; log clearing uses `wp_delete_file`.
 * Added Amazon SES setup guide and updated contributors list.

#### 1.0.1

Rename plugin to “API Mailer for AWS SES”. Update text domain to `api-mailer-for-
aws-ses`, language files, and internal identifiers.

#### 1.0.0

Initial public release.
 – Direct SendRawEmail integration – Background queue with
Action Scheduler / wp_cron – Job ID indirection for small cron args – Logging viewer
with production disable – Settings link in plugin list – wp-config credential mode

## Meta

 *  Version **1.5**
 *  Last updated **6 days ago**
 *  Active installations **10+**
 *  WordPress version ** 5.7 or higher **
 *  Tested up to **7.1.3**
 *  PHP version ** 7.4 or higher **
 *  Language
 * [English (US)](https://wordpress.org/plugins/api-mailer-for-aws-ses/)
 * Tags
 * [api](https://pirate.wordpress.org/plugins/tags/api/)[aws](https://pirate.wordpress.org/plugins/tags/aws/)
   [email](https://pirate.wordpress.org/plugins/tags/email/)[mailer](https://pirate.wordpress.org/plugins/tags/mailer/)
   [SES](https://pirate.wordpress.org/plugins/tags/ses/)
 *  [Advanced View](https://pirate.wordpress.org/plugins/api-mailer-for-aws-ses/advanced/)

## Ratings

 5 out of 5 stars.

 *  [  1 5-star review     ](https://wordpress.org/support/plugin/api-mailer-for-aws-ses/reviews/?filter=5)
 *  [  0 4-star reviews     ](https://wordpress.org/support/plugin/api-mailer-for-aws-ses/reviews/?filter=4)
 *  [  0 3-star reviews     ](https://wordpress.org/support/plugin/api-mailer-for-aws-ses/reviews/?filter=3)
 *  [  0 2-star reviews     ](https://wordpress.org/support/plugin/api-mailer-for-aws-ses/reviews/?filter=2)
 *  [  0 1-star reviews     ](https://wordpress.org/support/plugin/api-mailer-for-aws-ses/reviews/?filter=1)

[Your review](https://wordpress.org/support/plugin/api-mailer-for-aws-ses/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/api-mailer-for-aws-ses/reviews/)

## Contributors

 *   [ beltoftnet ](https://profiles.wordpress.org/beltoftnet/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/api-mailer-for-aws-ses/)