Send through AnitaHost Mail.
Use authenticated SMTP or the HTTP API. Every message from an active domain is signed with DKIM before it leaves the relay.
Quick start
- Create an account and verify your email address.
- Add your sending domain. We generate a DKIM key and show the DNS records.
- Publish the DKIM TXT record, then click Verify. The domain becomes active automatically.
- Create an SMTP credential or an API key and start sending.
Sending is blocked until your email is verified and the sender domain is active. This protects deliverability for everyone on the relay.
SMTP settings
| Host | super.anitahostmail.com |
|---|---|
| Port | 587 STARTTLS or 465 implicit TLS |
| Authentication | PLAIN or LOGIN (required) |
| Username | The SMTP username shown in your dashboard |
| Password | The password shown when the credential was created |
Port 25 is rate-limited and not recommended for client submission. Always use TLS.
WHM / cPanel / Exim
In WHM, open Exim Configuration Manager → Mail → Smarthost Support and use super.anitahostmail.com:587 with SMTP authentication and TLS enabled. Use the SMTP username and password from this portal.
If your version has no smarthost panel, add a manualroute router that sends non-local domains to super.anitahostmail.com::587, a smtp transport with hosts_require_auth and hosts_require_tls, and a PLAIN authenticator using your portal credentials.
Before sending from a domain hosted on that server, add the domain here and publish its DKIM record. Otherwise the relay rejects the sender domain. The cPanel plugin below automates this step.
DNS records
For each sending domain, the dashboard shows a DKIM record. Publish it at the exact name shown. We also recommend SPF and DMARC:
| Type | Name | Value |
|---|---|---|
| TXT | mail._domainkey.yourdomain.com | Shown in the domain page (generated per domain) |
| TXT | yourdomain.com | v=spf1 include:relay.anitahostmail.com ~all |
| TXT | _dmarc.yourdomain.com | v=DMARC1; p=none; |
If you already have an SPF record, merge include:relay.anitahostmail.com into it instead of creating a second record. DNS changes can take a few minutes to propagate.
HTTP API
Send JSON to POST https://anitahostmail.com/api/v1/send with a bearer API key. The maximum is 50 recipients per request and 1 MB of content.
API keys have scopes: Sending for /api/v1/send and Domain management for the domain endpoints. Create a key with the scopes you need in the dashboard.
curl -X POST https://anitahostmail.com/api/v1/send \
-H "Authorization: Bearer ah_live_your_key" \
-H "Content-Type: application/json" \
-d '{
"from": {"email": "app@yourdomain.com", "name": "Your App"},
"to": [{"email": "customer@example.com", "name": "Customer"}],
"reply_to": "support@yourdomain.com",
"subject": "Your receipt",
"text": "Thanks for your order.",
"html": "<p>Thanks for your order.</p>"
}'
Successful requests return 202:
{"id":"8f2...","status":"queued","accepted":1,"failed":[]}
Each recipient is delivered as an individual message, so recipients never see each other. The sender domain must be active on your account. Of the from, to, subject, text and html fields, provide valid addresses and a subject; at least one of text or html is required.
API keys are shown once at creation. Revoke a key at any time from the dashboard.
Domain API
These endpoints require an API key with the Domain management scope. Responses include the DKIM, SPF and DMARC records to publish.
| Method | Endpoint | Purpose |
|---|---|---|
| GET | /api/v1/domains | List domains on the account |
| POST | /api/v1/domains | Add one domain: {"domain":"example.com"} |
| POST | /api/v1/domains/sync | Add many domains: {"domains":["a.com","b.com"]} |
| GET | /api/v1/domains/{domain} | Get DNS records and status |
| POST | /api/v1/domains/{domain}/verify | Re-check the DKIM TXT record |
| DELETE | /api/v1/domains/{domain} | Remove the domain and its key |
curl -X POST https://anitahostmail.com/api/v1/domains \
-H "Authorization: Bearer ah_live_your_domain_key" \
-H "Content-Type: application/json" \
-d '{"domain":"example.com"}'
cPanel / WHM auto-signing plugin
The plugin registers every domain in /etc/userdomains with this portal, publishes the generated DKIM, SPF and DMARC records into local cPanel DNS zones, and re-checks verification. It runs every 15 minutes and can be triggered from WHM → Plugins → AnitaHost Mail.
Run this on the cPanel server as root. The API key is entered after installation from the WHM plugin screen:
curl -fsSL https://anitahostmail.com/downloads/anitahost-cpanel.tar.gz -o /tmp/anitahost-cpanel.tar.gz
tar -xzf /tmp/anitahost-cpanel.tar.gz -C /tmp
bash /tmp/anitahost-cpanel/install.sh
Then open WHM → Plugins → AnitaHost Mail, paste an API key with the Domain management scope, and save. Domain sync runs every 15 minutes after that.
If the server does not host authoritative DNS for those domains (for example, DNS is at Cloudflare), add --no-dns. The plugin will still register the domains and show the records to publish manually in the portal.
Uninstall with:
curl -fsSL https://anitahostmail.com/downloads/anitahost-cpanel-uninstall.sh -o /tmp/anitahost-cpanel-uninstall.sh
bash /tmp/anitahost-cpanel-uninstall.sh
The plugin does not configure the Exim smarthost; use the settings in the section above for that.
Error responses
| Status | Code | Meaning |
|---|---|---|
| 400 | invalid_from, invalid_recipients, invalid_subject, missing_content | Fix the request payload. |
| 401 | missing_api_key, invalid_api_key | Provide a valid bearer key. |
| 403 | sender_not_allowed, email_unverified, account_suspended, insufficient_scope | Verify your email, activate the domain, add the right API key scope, or contact support. |
| 409 | domain_conflict | The domain is already assigned to another account. |
| 429 | daily_limit_reached, rate_limited | Upgrade your plan or wait for the window to reset. |
| 502 | send_failed | The relay could not queue the message. |
Limits
Quotas are measured per recipient over a rolling 24-hour window. SMTP and API messages share the same quota. A per-minute rate limit also applies. Rejected messages do not count toward the quota.
Current plan limits are shown on the pricing page and in your dashboard.