Where do I find the documentation?
On customsmtp.com/docs/ , which covers every screen and setting of the plugin. Each provider preset also has its own step-by-step guide , with the exact values the preset fills in. The developer guide goes further: forcing any setting from a PHP constant or an environment variable, running on immutable or containerized WordPress, and sending through the Amazon SES API with an IAM role.
For anything not covered there, the support forum on this page is the right place to ask.
What SMTP settings should I use?
Custom SMTP includes presets for popular providers (Gmail, Outlook, AWS SES, SendGrid, etc.). Just select your provider and settings are auto-filled.
List of SMTP Servers
Here’s a reference list of common SMTP servers:
Professional Email Services * SendGrid: smtp.sendgrid.net – TLS – Port 587 * Mailgun: smtp.mailgun.org – TLS – Port 587 * Amazon SES: email-smtp.[region].amazonaws.com – TLS – Port 587 * Brevo (Sendinblue): smtp-relay.brevo.com – TLS – Port 587 * Postmark: smtp.postmarkapp.com – TLS – Port 587 * Mailjet: in-v3.mailjet.com – TLS – Port 587 * Scaleway: smtp.tem.scaleway.com – TLS – Port 587
Consumer Email Providers * Gmail: smtp.gmail.com – TLS – Port 587 * Outlook/Office365: smtp.office365.com – TLS – Port 587 * Yahoo Mail: smtp.mail.yahoo.com – TLS – Port 587 * iCloud: smtp.mail.me.com – TLS – Port 587 * Zoho: smtp.zoho.com – TLS – Port 587 * AOL: smtp.aol.com – TLS – Port 587 * GMX: smtp.gmx.com – SSL – Port 465
ISP Email (Regional) * Comcast: smtp.comcast.net – Port 587 * Verizon: outgoing.verizon.net – SSL – Port 465 * AT&T: smtp.mail.att.net – SSL – Port 465 * Orange: smtp.orange.net – Port 25 * T-Online: securesmtp.t-online.de – TLS – Port 587 * 1&1 IONOS: smtp.1and1.com – TLS – Port 587
Note: Settings may vary. Contact your provider for exact configuration.
Does it work with WooCommerce?
Yes! Custom SMTP logs all emails sent from WordPress, including WooCommerce order confirmations, shipping notifications, and customer emails.
Is it compatible with contact form plugins?
Yes, it works with Contact Form 7, WPForms, Gravity Forms, and any plugin that uses WordPress wp_mail() function.
Is it compatible with stateless/containerized WordPress?
Yes. Custom SMTP is fully stateless-compatible and works on ephemeral infrastructure (Docker, Kubernetes, AWS ECS/Fargate, Google Cloud Run, etc.) without shared storage like EFS or NFS.
The plugin stores all data in the WordPress database:
- Settings in wp_options
- Email logs in a custom database table
- CSV exports streamed directly to the browser (no temp files)
- Log purge scheduled via WP-Cron (database-backed)
It also works with modern WordPress stacks like Bedrock and Trellis, and can run on a read-only filesystem.
Notes for stateless deployments:
- Ensure WordPress salts ( LOGGED_IN_KEY , LOGGED_IN_SALT ) are consistent across all instances — the SMTP password encryption depends on them.
- If DISABLE_WP_CRON is set to true , configure an external cron to trigger wp-cron.php so automatic log purge runs properly.
- On AWS, prefer the Amazon SES (API) mailer with an IAM role (see the SES question below) — it removes the need to store any SMTP credentials at all.
Can I send through Amazon SES without storing any credentials?
Yes. Custom SMTP includes an Amazon SES (API) mailer that authenticates through your AWS IAM role (the ECS task role or EC2 instance role) using the AWS default credential chain. You never enter or store an access key, secret key, or SMTP credential — ideal for stateless, containerized WordPress on AWS ECS/Fargate.
In Settings > Custom SMTP, choose “Amazon SES (API · IAM role)” as the mailer, set the region and a verified sender address (or inject them as environment variables), and you’re done. You can also provide a SES Configuration Set for bounce/complaint tracking, and “Send Test Email” returns the SES MessageId so you can confirm the send on the AWS side.
The following environment variables / PHP constants take priority over the saved settings, so the same container image works across environments:
- SES_REGION (falls back to AWS_REGION ) — e.g. eu-west-3
- SES_FROM_EMAIL — the verified sender address
- SES_CONFIG_SET — optional SES configuration set
The message is sent as raw MIME, so HTML, attachments, CC/BCC, Reply-To and custom headers are all preserved. The mailer works whether or not the AWS SDK for PHP is installed (it falls back to a built-in signed API client), and SES sends are logged in the Email Logs like any other email.
This is different from the existing Amazon SES SMTP preset, which uses SMTP credentials — the new mailer uses the SES API and your IAM role instead.
Can I configure everything from environment variables (config-as-code)?
Yes. Every setting can be forced from a PHP constant or environment variable, which takes priority over the value saved in the database — ideal for immutable Docker images and DISALLOW_FILE_MODS deployments.
Use CUSTOM_SMTP_<SETTING> in uppercase, for example:
- CUSTOM_SMTP_MAILER_TYPE — smtp or ses_api
- CUSTOM_SMTP_HOST , CUSTOM_SMTP_PORT , CUSTOM_SMTP_SECURE , CUSTOM_SMTP_USERNAME , CUSTOM_SMTP_PASSWORD
- CUSTOM_SMTP_MAILFROM , CUSTOM_SMTP_FROMNAME , CUSTOM_SMTP_LOG_RETENTION
- CUSTOM_SMTP_ALERTS_ENABLED , CUSTOM_SMTP_ALERT_EMAIL , CUSTOM_SMTP_ALERT_WEBHOOK , CUSTOM_SMTP_ALERT_MAX_PER_HOUR , CUSTOM_SMTP_ALERT_MAX_PER_DAY , CUSTOM_SMTP_ALERT_COOLDOWN
The Amazon SES shortcuts also apply: SES_REGION (or AWS_REGION ), SES_FROM_EMAIL , SES_CONFIG_SET .
An empty value counts as “not set”, so it never overrides anything. To force a boolean setting off, give it an explicit value: CUSTOM_SMTP_ALERTS_ENABLED=false (or 0 ), not an empty string.
To switch an entire Multisite network to Amazon SES with no database changes, set in your container: CUSTOM_SMTP_MAILER_TYPE=ses_api , SES_REGION=eu-west-3 , SES_FROM_EMAIL=no-reply@example.com .
Values are resolved from PHP constants, then getenv() , $_ENV , and $_SERVER . The $_SERVER source means FrankenPHP (including worker mode) and Bedrock-style stacks work with plain environment variables — no constants required.
On Multisite, the plugin also reads a network-wide option (via get_site_option ) beneath any per-site option, so a single configuration can apply to all sites. Fields supplied by the environment are shown read-only in the settings page with a badge naming the source variable. (A password supplied via CUSTOM_SMTP_PASSWORD is used as-is; only stored passwords are encrypted at rest.)
Can AI assistants or automation tools manage my SMTP?
Yes, on WordPress 6.9+. Custom SMTP registers two abilities with the WordPress Abilities API:
- custom-smtp/connection-health returns the current SMTP state (configured, host, port, encryption, auth, logging retention) — useful for diagnostics and monitoring.
- custom-smtp/send-test-email triggers a test email through the configured SMTP server.
Both abilities are accessible to MCP-compatible AI clients, automation workflows (n8n, Make), and other plugins. They enforce the same capability check as the wp-admin interface ( manage_options ), so unprivileged users or scripts cannot invoke them.