Directory / plugin

API Mailer for AWS SES

v1.5 · by beltoftnet

Amazon SES API mailer for WordPress that bypasses SMTP and sends via the SES SendRawEmail API with a lightweight, high‑performance design.

View on WordPress.org

About this plugin

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.

Plugin tags