diff --git a/changelog.mdx b/changelog.mdx index c071f23..b1eb51d 100644 --- a/changelog.mdx +++ b/changelog.mdx @@ -30,6 +30,7 @@ The AhaSend changelog lists product releases, API changes and fixes by month, wi - The agent cannot read received email unless you turn this on for the connection. A campaign is sent only after you confirm it in your AI tool. - A connection ends when its user loses access to the account, and when the tool does not use it for 30 days. - The **Connect an AI tool** button on the API Keys page shows the setup steps for each tool, with one-click install for Cursor and VS Code. +- **[SMTP on port 465](/smtp#does-ahasend-support-port-465).** `send.ahasend.com` accepts SMTP on port 465 with implicit TLS, for clients and devices that cannot use STARTTLS. Port 465 accepts AUTH PLAIN and AUTH LOGIN. Ports 25, 587 and 2525 with STARTTLS are unchanged. - **Save a list search as a new list.** On a list page, search or use advanced search, then click **Save as new list** to put the matching contacts on a new list. Send a campaign to that list to reach only those contacts. Each contact keeps its status, so an unsubscribed contact stays unsubscribed on the new list. The contacts are copied in the background, and the new list's page shows when the copy is done. The new list is separate from the original: later changes to the original list do not reach it. #### Changes diff --git a/facts.mdx b/facts.mdx index 099dd17..d477901 100644 --- a/facts.mdx +++ b/facts.mdx @@ -49,8 +49,8 @@ New accounts keep message metadata and message data for 7 days. Zero data retent | Create Message recipients | Up to 100 per request | [Send email](/send-api/send-email) | | Scheduled sending | First attempt within 7 days; expiry within 8 days | [Create Message](/api-reference/messages/create-message) | | SMTP host | `send.ahasend.com` | [SMTP settings](/smtp) | -| SMTP ports and encryption | 25, 587 and 2525; STARTTLS on all ports; AUTH PLAIN only after STARTTLS | [SMTP settings](/smtp) | -| Implicit TLS on port 465 | Not supported | [SMTP settings](/smtp) | +| SMTP ports and encryption | 25, 587 and 2525 with STARTTLS; 465 with implicit TLS | [SMTP settings](/smtp) | +| SMTP authentication | AUTH PLAIN after STARTTLS on 25, 587 and 2525; AUTH PLAIN or AUTH LOGIN on 465 | [SMTP settings](/smtp) | | SMTP message size | 20 MiB (20,971,520 bytes), complete message including base64-encoded attachments; also applies to inbound mail | [SMTP limits](/smtp) | | API request body | 30 MB; the resulting message must still fit 20 MiB | [Send email](/send-api/send-email) | | Per-attachment limit | None; only the total message size counts | [SMTP limits](/smtp) | diff --git a/glossary.mdx b/glossary.mdx index c5ce047..a441f4a 100644 --- a/glossary.mdx +++ b/glossary.mdx @@ -20,6 +20,7 @@ AhaSend's glossary explains the email terms used in these docs and links each te | Return-path | The address used for delivery-status messages, normally based on the envelope sender | [Domain records](/domains) | | MX record | A DNS record that names a domain's receiving mail servers | [Inbound routing](/integrations/routing) | | STARTTLS | An SMTP command that upgrades a connection to TLS encryption before authentication | [SMTP settings](/smtp) | +| Implicit TLS | TLS that starts as soon as the connection opens, before any SMTP command; AhaSend uses it on port 465 | [Port 465](/smtp#does-ahasend-support-port-465) | | Dedicated IP | A sending IP assigned to one sender account rather than shared with other senders | [Dedicated IPs](/scale/dedicated-ips) | | Warm-up | Gradually increasing legitimate sending while checking receiving systems' responses | [Deliverability](/deliverability) | diff --git a/guides/django.mdx b/guides/django.mdx index dbfd6d2..c6c287d 100644 --- a/guides/django.mdx +++ b/guides/django.mdx @@ -60,7 +60,7 @@ EMAIL_TIMEOUT = 10 DEFAULT_FROM_EMAIL = os.environ["AHASEND_FROM"] ``` -Keep credentials in your deployment's secret store. `EMAIL_USE_TLS` enables STARTTLS; [port 465 and implicit TLS are unsupported](/smtp). +Keep credentials in your deployment's secret store. `EMAIL_USE_TLS` enables STARTTLS. To use [port 465 with implicit TLS](/smtp#does-ahasend-support-port-465) instead, set `EMAIL_PORT = 465`, `EMAIL_USE_SSL = True` and `EMAIL_USE_TLS = False`; Django allows only one of the two to be `True`. ## Send from Your Application diff --git a/quickstart.mdx b/quickstart.mdx index 8d7edb0..1da2af7 100644 --- a/quickstart.mdx +++ b/quickstart.mdx @@ -318,7 +318,7 @@ Use our SMTP servers with any email library. Great for existing applications or ```text Host: send.ahasend.com -Ports: 25, 587, 2525 (all support STARTTLS) +Ports: 25, 587, 2525 (STARTTLS) or 465 (implicit TLS) Authentication: Required Username: Your SMTP username (from dashboard) Password: Your SMTP password (from dashboard) diff --git a/smtp/cli.mdx b/smtp/cli.mdx index ea6e7f7..1809d99 100644 --- a/smtp/cli.mdx +++ b/smtp/cli.mdx @@ -115,8 +115,24 @@ swaks \ --attach @/path/to/invoice.pdf ``` +```bash Port 465 (Implicit TLS) +swaks \ + --from hello@yourdomain.com \ + --to user@example.com \ + --server send.ahasend.com \ + --port 465 \ + --auth login \ + --tls-on-connect \ + --auth-user 'YOUR_SMTP_USERNAME' \ + --auth-password 'YOUR_SMTP_PASSWORD' \ + --header 'Subject: Welcome to our platform!' \ + --body "Thanks for signing up. We're excited to have you!" +``` + +On port 465, use `--tls-on-connect` instead of `--tls`. Port 465 accepts `--auth login` and `--auth plain`. + ## Advanced Examples diff --git a/smtp/credentials.mdx b/smtp/credentials.mdx index 00d0da5..a5d969a 100644 --- a/smtp/credentials.mdx +++ b/smtp/credentials.mdx @@ -120,8 +120,8 @@ Once created, you can view and manage your SMTP credentials in the dashboard: - - **Always use STARTTLS** encryption when connecting - - **Prefer port 587** for most applications + - **Always use TLS:** STARTTLS on ports 587, 25 and 2525, or implicit TLS on port 465 + - **Prefer port 587** for most applications, or port 465 if your client or device supports only implicit TLS - **Use port 2525** if 587 is blocked by your network - **Avoid port 25** unless specifically required @@ -136,7 +136,8 @@ Configure your email library or application with these settings: ```text Host: send.ahasend.com Port: 587 (recommended) or 25, 2525 -Security: STARTTLS (required) +Security: STARTTLS (required on these ports) +Port 465: SSL/TLS (implicit TLS) instead of STARTTLS Username: [Your SMTP username from dashboard] Password: [Your SMTP password from dashboard] ``` @@ -222,7 +223,7 @@ For programmatic management of SMTP credentials, use our REST API: - Self-signed certificate issues **Solutions:** - - Enable STARTTLS (not SSL/TLS) + - Match the security setting to the port: STARTTLS on 587, 25 and 2525, SSL/TLS on 465 - Update your email library - Verify TLS version support diff --git a/smtp/errors.mdx b/smtp/errors.mdx index 8c5e026..8392236 100644 --- a/smtp/errors.mdx +++ b/smtp/errors.mdx @@ -43,7 +43,7 @@ Do not infer that every `556` from every recipient server has this AhaSend-speci ## Why Does Port 465 Fail? -AhaSend does not support implicit TLS on port 465. Use STARTTLS on a supported port and authenticate after TLS, as described in [SMTP settings](/smtp). Do not disable certificate validation to get past a connection error. If your host blocks outbound SMTP, check its network policy or use the [HTTPS API](/send-api/send-email). +Port 465 uses implicit TLS: set your client to SSL/TLS, not STARTTLS. A client set to STARTTLS on port 465 waits for a greeting, and the server closes the connection after 30 seconds. See the settings for common libraries in [SMTP settings](/smtp#does-ahasend-support-port-465). Do not disable certificate validation to get past a connection error. If your host blocks outbound SMTP, check its network policy or use the [HTTPS API](/send-api/send-email). ## Should I Retry a Failed Send? diff --git a/smtp/index.mdx b/smtp/index.mdx index 5b16ff2..863dc10 100644 --- a/smtp/index.mdx +++ b/smtp/index.mdx @@ -1,14 +1,14 @@ --- title: "SMTP Relay Settings: Host, Ports, TLS, Limits" sidebarTitle: "Server Information" -description: "AhaSend SMTP relay settings: send.ahasend.com, ports 25/587/2525 with STARTTLS, PLAIN auth, message limits and SMTP error codes." +description: "AhaSend SMTP relay settings: send.ahasend.com, ports 25/587/2525 with STARTTLS or 465 with implicit TLS, PLAIN and LOGIN auth, limits and SMTP error codes." icon: "server" --- import SmtpSettings from "/snippets/smtp-settings.mdx"; -AhaSend SMTP relay settings are listed here: server hosts, STARTTLS ports, authentication, message limits and response codes. +AhaSend SMTP relay settings are listed here: server host, ports and encryption, authentication, message limits and response codes. Available on Free, Pro and Max. See [plans and features](/facts#plans-and-features). @@ -18,13 +18,25 @@ Available on Free, Pro and Max. See [plans and features](/facts#plans-and-featur ## Which SMTP Settings Should I Use? -Use `send.ahasend.com` with your SMTP credentials on port 587, 25 or 2525. +Use `send.ahasend.com` with your SMTP credentials on port 587, 25 or 2525 with STARTTLS, or on port 465 with implicit TLS. ## Does AhaSend Support Port 465? -No. AhaSend supports STARTTLS on ports 25, 587 and 2525. It does not support implicit TLS on port 465. Create an [SMTP credential](/smtp/credentials), then connect, start TLS and authenticate with AUTH PLAIN. +Yes. Port 465 uses implicit TLS: your client starts TLS as soon as it connects, before the server greets it, and sends no `STARTTLS` command. It accepts AUTH PLAIN and AUTH LOGIN. Limits, response codes and [special headers](/smtp/special-headers) are the same on every port. + +Set your client's security option to match the port: + +| Library or tool | Port 465 | Ports 587, 25 and 2525 | +|---|---|---| +| Nodemailer | `secure: true` | `secure: false` | +| Python `smtplib` | `smtplib.SMTP_SSL` | `smtplib.SMTP`, then `starttls()` | +| PHPMailer | `PHPMailer::ENCRYPTION_SMTPS` | `PHPMailer::ENCRYPTION_STARTTLS` | +| MailKit | `SecureSocketOptions.SslOnConnect` | `SecureSocketOptions.StartTls` | +| Swaks | `--tls-on-connect` | `--tls` | + +A client set to STARTTLS on port 465 waits for a greeting that never comes, and the server closes the connection after 30 seconds. A client set to SSL/TLS on port 587 fails at once with a TLS error such as `wrong version number`. See [port 465 problems](/troubleshooting#why-does-smtp-port-465-not-work). ## What Are the SMTP Limits? @@ -90,6 +102,17 @@ Password: your-smtp-password Authentication: PLAIN ``` +### Port 465 Configuration + +```text +Host: send.ahasend.com +Port: 465 +Security: SSL/TLS (implicit TLS) +Username: your-smtp-username +Password: your-smtp-password +Authentication: PLAIN or LOGIN +``` + ### Programming Language Examples @@ -146,7 +169,7 @@ Authentication: PLAIN ## Security Considerations -**Always use STARTTLS:** Unencrypted SMTP connections are not secure and may expose your credentials and email content. +**Always use TLS:** use STARTTLS on ports 25, 587 and 2525, or implicit TLS on port 465. Unencrypted SMTP connections are not secure and may expose your credentials and email content. diff --git a/smtp/php.mdx b/smtp/php.mdx index c8ad943..50f22f7 100644 --- a/smtp/php.mdx +++ b/smtp/php.mdx @@ -383,7 +383,7 @@ $message->getHeaders() **Network and connection issues:** - Try different ports: 587 (recommended), 25, or 2525 - - Ensure STARTTLS is enabled, not SSL + - Use `PHPMailer::ENCRYPTION_STARTTLS` on ports 587, 25 and 2525, and `PHPMailer::ENCRYPTION_SMTPS` on port 465 - Check firewall settings aren't blocking SMTP - Verify server allows outbound SMTP connections diff --git a/snippets/smtp-settings.mdx b/snippets/smtp-settings.mdx index b51a5f1..a7fdb7f 100644 --- a/snippets/smtp-settings.mdx +++ b/snippets/smtp-settings.mdx @@ -1,10 +1,10 @@ | Setting | Value | |---|---| | Host | `send.ahasend.com` | -| Ports | 25, 587 and 2525 | -| Encryption | STARTTLS required on every supported port | -| Authentication | AUTH PLAIN only after STARTTLS | +| Ports with STARTTLS | 25, 587 and 2525 | +| Port with implicit TLS | 465 (TLS from the first byte, also called SSL/TLS or SMTPS) | +| Encryption | Required on every port: STARTTLS on 25, 587 and 2525, implicit TLS on 465 | +| Authentication | AUTH PLAIN after STARTTLS on 25, 587 and 2525; AUTH PLAIN or AUTH LOGIN on 465 | | Username and password | Your SMTP credential, not an API key | -| Port 465 | Implicit TLS is not supported | All message data is stored in the EU. See [SMTP limits](/smtp#what-are-the-smtp-limits). diff --git a/troubleshooting.mdx b/troubleshooting.mdx index 827f66c..03d3b5f 100644 --- a/troubleshooting.mdx +++ b/troubleshooting.mdx @@ -42,7 +42,7 @@ The owner or an Administrator of the parent account can resume a paused [sub-acc ## Why Does SMTP Port 465 Not Work? -AhaSend does not support implicit TLS on port 465. Use the STARTTLS settings on [SMTP](/smtp), then authenticate with an SMTP username and password. An API key is not an SMTP password. If the connection times out before a server greeting, check outbound network access on your host. +Port 465 on `send.ahasend.com` uses implicit TLS. Set your client's security option to SSL/TLS (also called SMTPS or implicit TLS), not STARTTLS: a client that waits for a greeting before it starts TLS gets no greeting, and the server closes the connection after 30 seconds. See the settings for common libraries on [SMTP](/smtp#does-ahasend-support-port-465). Authenticate with an SMTP username and password; an API key is not an SMTP password. If the connection itself times out, check outbound network access on your host: some hosting providers block port 465. Ports 587 and 2525 with STARTTLS work the same way. ## Why Was My Email Delivered but Not Received?