API Mailer for AWS SES replaces wp_mail() with a direct Amazon SES API integration (SendRawEmail). There is no SMTP layer or PHPMailer handoff in the critical path, reducing overhead and improving reliability.
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
- Direct SES API (SendRawEmail) integration — no SMTP required.
- Background sending queue with Action Scheduler or wp_cron fallback.
- Tiny-args queueing with job IDs to keep cron payloads small and private.
- Configurable rate limiting per second to stay under SES send rate.
- From/Reply-To handling with optional forced From and custom X-* headers.
- Test tab to send a test email and a Status tab to fetch SES GetSendQuota.
- Logging via WooCommerce logger or PHP error_log, disabled by default.
- Credentials from wp-config (constants) or saved settings.
- Lightweight, minimal I/O, no Composer dependency.
- 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_idto 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 onlyjob_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.phpregularly.
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.comto 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.mofor runtime)
About the Author
API Mailer for AWS SES is built and maintained by beltoft.net.