=== Flex SMTP ===
Contributors: flexfields, hovoqoch
Donate link: https://flexible.am/
Tags: smtp, email, wp-mail, mail, phpmailer
Requires at least: 6.2
Tested up to: 7.1
Requires PHP: 7.4
Stable tag: 1.0.1
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Send WordPress mail through SMTP or a provider HTTP API, with a test send and delivery log.

== Description ==

**Flex SMTP** is the mail layer for the FLEX plugin suite. Flex Forms (and anything else that calls `wp_mail()`) can leave SMTP credentials out of form settings. This plugin owns delivery: provider presets, SMTP or HTTP API, a test send, and a searchable log.

It is built for sites that already use FLEX plugins, and for hosts that block outbound SMTP ports 465/587. HTTP API sending uses WordPress `wp_remote_post` only — no vendor SDKs are bundled.

* Provider presets (Gmail, Microsoft 365, SendGrid, Mailgun, Amazon SES, and more)
* SMTP for every provider, or HTTP API for transactional services
* From email / name, default From replacement, and optional Force From
* One-click test email
* Searchable delivery log with retention
* Copies old Flex Forms SMTP options on first activate

Enable is off by default. Mail stays on the WordPress default mailer until you save a provider and turn Enable on.

CSS and JavaScript are loaded from this plugin only. There is no telemetry and no remote update checker.

= Privacy =

SMTP usernames, passwords, and API keys are stored in your WordPress database (leave a secret field blank when saving to keep the stored value). The optional email log stores recipient, subject, success/fail, and error text. Only administrators can view the log or settings.

When Enable is on, message content is sent to the SMTP host or HTTP API you configured. Flex SMTP does not send mail to any other remote service. See **External services**.

== External services ==

This plugin connects to a third-party mail service only after an administrator chooses that provider, saves credentials, and turns **Enable** on (or clicks Send test). Until then, WordPress uses the default mailer. The plugin does not phone home.

**What data is sent (every provider):** From, To, Cc, Bcc, Reply-To, subject, body, and attachments from `wp_mail()`. SMTP also sends the saved username and password. HTTP API also sends the saved API key, and the secret, domain, or region when that provider requires them.

**When data is sent:** On each `wp_mail()` call while Enable is on, and when an administrator sends a test email.

**Why:** To deliver WordPress mail (password resets, form notifications, WooCommerce, and so on) through the account you already have with that provider.

= Amazon SES =

Amazon Simple Email Service delivers mail when **Amazon SES** is selected. SMTP connects to `email-smtp.{region}.amazonaws.com` (for example `email-smtp.us-east-1.amazonaws.com`). HTTP API posts SendRawEmail to `email.{region}.amazonaws.com`. The region is the one you pick in settings.

Service: [Amazon SES](https://aws.amazon.com/ses/)
[Terms of Service](https://aws.amazon.com/service-terms/)
[Privacy Policy](https://aws.amazon.com/privacy/)

= Gmail / Google Workspace =

Sends mail through Google SMTP (`smtp.gmail.com`) when that provider is selected. Uses an app password (OAuth is not included).

Service: [Gmail](https://mail.google.com/)
[Terms of Service](https://policies.google.com/terms)
[Privacy Policy](https://policies.google.com/privacy)

= Microsoft 365 / Outlook =

Sends mail through Microsoft SMTP (`smtp.office365.com`) when that provider is selected. Uses SMTP AUTH and, when required, an app password.

Service: [Microsoft 365](https://www.microsoft.com/microsoft-365)
[Terms of Service](https://www.microsoft.com/servicesagreement)
[Privacy Policy](https://privacy.microsoft.com/privacystatement)

= Yahoo Mail =

Sends mail through Yahoo SMTP (`smtp.mail.yahoo.com`) when that provider is selected. Uses an app password.

Service: [Yahoo Mail](https://mail.yahoo.com/)
[Terms of Service](https://legal.yahoo.com/us/en/yahoo/terms/otos/index.html)
[Privacy Policy](https://legal.yahoo.com/us/en/yahoo/privacy/index.html)

= Zoho Mail =

Sends mail through Zoho SMTP (`smtp.zoho.com`) when that provider is selected.

Service: [Zoho Mail](https://www.zoho.com/mail/)
[Terms of Service](https://www.zoho.com/terms.html)
[Privacy Policy](https://www.zoho.com/privacy.html)

= iCloud Mail =

Sends mail through iCloud SMTP (`smtp.mail.me.com`) when that provider is selected. Uses an app-specific password.

Service: [iCloud](https://www.icloud.com/)
[Terms of Service](https://www.apple.com/legal/internet-services/icloud/)
[Privacy Policy](https://www.apple.com/legal/privacy/)

= SendGrid =

Sends mail through SendGrid SMTP (`smtp.sendgrid.net`) or the SendGrid HTTP API when that provider is selected.

Service: [SendGrid](https://sendgrid.com/)
[Terms of Service](https://www.twilio.com/en-us/legal/tos)
[Privacy Policy](https://www.twilio.com/en-us/legal/privacy)

= Mailgun =

Sends mail through Mailgun SMTP (`smtp.mailgun.org` or `smtp.eu.mailgun.org`) or the Mailgun HTTP API (`api.mailgun.net` or `api.eu.mailgun.net`) when that provider is selected. HTTP API also sends the Mailgun sending domain you enter.

Service: [Mailgun](https://www.mailgun.com/)
[Terms of Service](https://www.mailgun.com/legal/terms/)
[Privacy Policy](https://www.mailgun.com/legal/privacy-policy/)

= Postmark =

Sends mail through Postmark SMTP (`smtp.postmarkapp.com`) or the Postmark HTTP API when that provider is selected. The API key is the Postmark server token.

Service: [Postmark](https://postmarkapp.com/)
[Terms of Service](https://postmarkapp.com/terms-of-service)
[Privacy Policy](https://www.activecampaign.com/legal/privacy-policy)

= Brevo =

Sends mail through Brevo SMTP (`smtp-relay.brevo.com`) or the Brevo HTTP API when that provider is selected.

Service: [Brevo](https://www.brevo.com/)
[Terms of Service](https://www.brevo.com/legal/termsofuse/)
[Privacy Policy](https://www.brevo.com/legal/privacypolicy/)

= Mailjet =

Sends mail through Mailjet SMTP (`in-v3.mailjet.com`) or the Mailjet HTTP API when that provider is selected. HTTP API also sends the Mailjet API secret.

Service: [Mailjet](https://www.mailjet.com/)
[Terms of Service](https://www.mailjet.com/legal/terms/)
[Privacy Policy](https://www.mailjet.com/legal/privacy-policy/)

= SparkPost =

Sends mail through SparkPost SMTP (`smtp.sparkpostmail.com` or `smtp.eu.sparkpostmail.com`) or the SparkPost HTTP API when that provider is selected. SparkPost is a Bird service.

Service: [SparkPost](https://www.sparkpost.com/)
[Terms of Service](https://bird.com/legal/terms)
[Privacy Policy](https://bird.com/legal/privacy)

= SMTP2GO =

Sends mail through SMTP2GO SMTP (`mail.smtp2go.com`) or the SMTP2GO HTTP API when that provider is selected.

Service: [SMTP2GO](https://www.smtp2go.com/)
[Terms of Service](https://www.smtp2go.com/terms/)
[Privacy Policy](https://www.smtp2go.com/privacy/)

= Resend =

Sends mail through Resend SMTP (`smtp.resend.com`) or the Resend HTTP API when that provider is selected.

Service: [Resend](https://resend.com/)
[Terms of Service](https://resend.com/legal/terms-of-service)
[Privacy Policy](https://resend.com/legal/privacy-policy)

= Custom SMTP =

Sends mail to the SMTP host you type in settings. That host’s own terms and privacy policy apply. Flex SMTP does not choose or document a third party for Custom.

== Installation ==

1. Upload the `flex-smtp` folder to `/wp-content/plugins/`, or install the zip via **Plugins → Add New → Upload Plugin**.
2. Activate **Flex SMTP**.
3. Open **Flex SMTP → Settings**, choose a provider, enter credentials, set From email, enable routing, and save.
4. Send a test email, then confirm the result under **Email Log**.

== Frequently Asked Questions ==

= Does this replace the SMTP settings that used to live in Flex Forms? =

Yes. Flex Forms now calls `wp_mail()` only. Activate Flex SMTP once to copy the old Forms SMTP options, then manage delivery here.

= Does Gmail or Microsoft 365 use OAuth? =

No. Those providers use SMTP with an app password (and SMTP AUTH enabled on Microsoft 365). OAuth is not included.

= What is the difference between SMTP and HTTP API? =

SMTP talks to the provider’s mail server through PHPMailer. HTTP API posts the message with `wp_remote_post` and skips PHPMailer. Use HTTP API if outbound ports 465/587 are blocked. Gmail, Microsoft 365, Yahoo, Zoho, iCloud, and Custom are SMTP only.

= Will mail still go through my web host? =

Not while Enable is on. Messages go to your SMTP host or the provider API. Turn Enable off to return to the default WordPress mailer.

= What is stored in the email log? =

Recipient, subject, success or fail, error text, and time. It does not store API keys or passwords. Disable Email log if you do not want delivery history.

= What happens when I uninstall? =

Deleting the plugin removes settings, credentials, and the log table. Deactivating alone keeps your data.

== Screenshots ==

1. Settings — provider, SMTP or HTTP API, From address, and logging
2. Test email — status, provider, and a one-click send
3. Email Log — searchable delivery results
4. Usage — setup, providers, and troubleshooting

== Changelog ==

= 1.0.1 =
* Expand External services: each provider lists what is sent, when, why, and working terms/privacy URLs.
* Replace 404 Zoho and Mailjet legal links. SparkPost now points to current Bird legal pages.

= 1.0.0 =
* Initial release: SMTP and HTTP API providers, test email, delivery log, and Flex Forms migration.

== Upgrade Notice ==

= 1.0.1 =
Documentation only. Existing settings are unchanged.
