Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions changelog.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
4 changes: 2 additions & 2 deletions facts.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -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) |
Expand Down
1 change: 1 addition & 0 deletions glossary.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -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) |

Expand Down
2 changes: 1 addition & 1 deletion guides/django.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
2 changes: 1 addition & 1 deletion quickstart.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
16 changes: 16 additions & 0 deletions smtp/cli.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -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!"
```

</CodeGroup>

On port 465, use `--tls-on-connect` instead of `--tls`. Port 465 accepts `--auth login` and `--auth plain`.

## Advanced Examples

<CodeGroup>
Expand Down
9 changes: 5 additions & 4 deletions smtp/credentials.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -120,8 +120,8 @@ Once created, you can view and manage your SMTP credentials in the dashboard:
</Accordion>

<Accordion title="Network Security" icon="network-wired">
- **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
</Accordion>
Expand All @@ -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]
```
Expand Down Expand Up @@ -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
</Accordion>
Expand Down
2 changes: 1 addition & 1 deletion smtp/errors.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -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?

Expand Down
33 changes: 28 additions & 5 deletions smtp/index.mdx
Original file line number Diff line number Diff line change
@@ -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).

Expand All @@ -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.

<SmtpSettings />

## 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?

Expand Down Expand Up @@ -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

<CardGroup cols={3}>
Expand Down Expand Up @@ -146,7 +169,7 @@ Authentication: PLAIN
## Security Considerations

<Warning>
**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.
</Warning>

<CardGroup cols={2}>
Expand Down
2 changes: 1 addition & 1 deletion smtp/php.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -383,7 +383,7 @@ $message->getHeaders()
<Accordion title="Connection Problems" icon="wifi">
**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
</Accordion>
Expand Down
8 changes: 4 additions & 4 deletions snippets/smtp-settings.mdx
Original file line number Diff line number Diff line change
@@ -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).
2 changes: 1 addition & 1 deletion troubleshooting.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -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?

Expand Down
Loading