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
- 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.
- wp_mail() compatible: all headers (incl. List-Unsubscribe), attachments, inline images, phpmailer_init.
- 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_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)
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
net.