Mailgun and Viesti compared
Mailgun details come from its pricing page and documentation, linked in each row. Checked 26 September 2026. Prices in US dollars.
| Viesti | Mailgun | |
|---|---|---|
| Entry paid plan | $5/month for 50,000 emails per billing cycle | Basic: $15/month for 10,000 emails. Foundation: $35/month for 50,000. |
| Free plan | 75 emails per UTC day and 2,000 per UTC month, with no time limit | 100 emails/day, 1 custom sending domain, 1 inbound route |
| Extra emails | $0.10 per 1,000 ($0.0001 per email); paid sending has no volume cap | $1.80 per 1,000 on Basic, $1.30 on Foundation 50k |
| Sending domains | Up to 20 per workspace on every plan | 1 on Free and Basic, 1,000 on Foundation and Scale |
| SMTP | smtp.viesti.email, port 587 (STARTTLS) or 465 (implicit TLS); AUTH PLAIN with username apikey and your API key as the password |
smtp.mailgun.org, ports 25, 587 or 2525 (STARTTLS) or 465 (TLS); SMTP credentials per domain |
| HTTP API | POST /v1/send with JSON from, to, subject, text and html, or a whole MIME message in raw; no SDKs, no batch endpoint |
Form fields posted to /v3/<domain>/messages, or a pre-built MIME message |
| IP pools | Separate shared pools for free and for paid workspaces; marketing mail is not accepted on any plan | Shared IPs by default; dedicated IP pools on Scale |
| Dedicated IPs | Dedicated plan: an IP pool of your own with hands-on warmup, custom pricing, up to 120,000 emails an hour and 2,000,000 a day; ask [email protected] | 1 included with Foundation 100k and Scale; more at $59 per IP per month |
| Domain authentication | Ownership TXT, DKIM key delegated by CNAME (replaced without DNS changes), include:spf.viesti.email in SPF and a DMARC policy; optional Return-Path CNAME for SPF alignment |
SPF TXT (include:mailgun.org), DKIM TXT, a tracking CNAME and two MX records (mxa.mailgun.org, mxb.mailgun.org) |
| Open and click tracking | None | Opens and clicks, set per domain or per message |
| Webhooks | None; each recipient's outcome is in the dashboard's Activity log | On every plan |
| Templates | None; send rendered HTML and text | Template builder and API from Foundation |
| Inbound email | None | Routes: 1 on Free, 5 on Basic, full inbound routing from Foundation |
| Message history | Activity log; message bodies kept 30 days, delivery events 180 days | Logs kept 1 day on Free and Basic, 5 days on Foundation, 30 days on Scale |
Choose Mailgun if
- You receive email and route it to your app or other addresses.
- You need open and click tracking, webhooks, stored templates or scheduled delivery.
- You want to choose US or EU hosting from one account.
- You need email address validation, send-time optimization, or several users with roles, all listed on Mailgun's pricing page.
- You need more than 75 free emails a day: Mailgun's free plan allows 100.
Choose Viesti if
- You send up to 50,000 emails a month: $5 on Viesti, against $35 on Mailgun Foundation, or $15 on Basic for 10,000.
- You send from several domains on a small plan: up to 20 on every Viesti plan, against 1 on Mailgun's Free and Basic plans.
- You want delivery history longer than a day without upgrading: Viesti keeps delivery events for 180 days and message bodies for 30 on every plan.
- You want your provider to refuse marketing mail, so its shared pools carry transactional mail only.
- You need no inbound routes, tracking or templates.
Migrate from Mailgun to Viesti
1. Create a workspace and an API key
Sign in with GitHub or Google; the first sign-in creates your workspace. Create an API key on the Credentials page and keep it in your secret store, for example as VIESTI_API_KEY. The quickstart walks through the whole setup.
2. Verify your sending domain
Add the domain on the Sending domains page and publish the records it lists (details in DNS records):
- TXT
_viesti.yourdomain.com, which proves ownership. - CNAME
v1._domainkey.yourdomain.com, which delegates DKIM signing todkim.viesti.email. include:spf.viesti.emailin the domain's SPF record. The page shows a merged value that keeps the includes you already publish; a domain must have only one SPF record.- A DMARC record at
_dmarc.yourdomain.com, only if no DMARC policy covers the domain yet. - Optional: CNAME
viesti.yourdomain.comtobounce.viesti.email, so bounces return to your own domain and SPF aligns with DMARC.
Mailgun's include:mailgun.org sits in the same SPF record Viesti needs: publish the merged value the Sending domains page shows, which contains both includes. Viesti's other records use their own names, so Mailgun's DKIM, tracking and MX records stay in place while you switch.
3. Switch your SMTP settings
Host: smtp.viesti.email
Port: 587 (STARTTLS) or 465 (implicit TLS)
Username: apikey
Password: your Viesti API key
Viesti accepts AUTH PLAIN only, and only after TLS; mail libraries pick it automatically. To try the settings before you deploy, send a test message with curl:
printf 'From: [email protected]\r\nTo: [email protected]\r\nSubject: Viesti test\r\n\r\nSent through Viesti.\r\n' |
curl -sS --ssl-reqd smtp://smtp.viesti.email:587 \
--user "apikey:$VIESTI_API_KEY" \
--mail-from [email protected] --mail-rcpt [email protected] \
--upload-file -
The command prints nothing when Viesti accepts the message, which then shows in the Activity log; a rejected login or recipient prints curl's error. SMTP covers ports, limits and error replies.
Mailgun's SMTP credentials belong to one domain; one Viesti API key sends for every verified domain in the workspace. Remove X-Mailgun-* headers (tags, tracking, variables, templates, scheduling): Viesti does not read them and delivers them to recipients unchanged.
4. Or switch your API calls
Mailgun's /messages endpoint takes form fields from, to, subject, text and html; Viesti takes the same names as JSON, with to as an array. A pre-built MIME message you post to Mailgun goes into Viesti's raw field.
Viesti's endpoint is POST https://viesti.email/v1/send with Authorization: Bearer $VIESTI_API_KEY and a JSON body of from, to (an array of up to 50 addresses), subject, text and html. It rejects any other field with 400 invalid JSON. For Cc, Bcc, Reply-To, custom headers or attachments, build the MIME message yourself, send it in raw, and list every recipient, Cc and Bcc included, in to. See the HTTP API reference.
5. Replace what Viesti does not do
- Templates: render the message in your app and send the finished HTML and text.
- Webhooks: there are none. The Activity log shows each recipient's outcome, and hard bounces and complaints add the recipient to your suppression list automatically; see bounces and suppressions.
- Open and click tracking: Viesti does not rewrite links or add pixels, so there is nothing to configure or remove.
- Scheduled delivery: hold the message in your own job queue and submit it when it is due.
- Inbound routes: keep them, and Mailgun's MX records, on Mailgun; Viesti does not receive mail for your domains.
6. Carry over suppressions
Export the addresses your current provider suppresses (hard bounces, complaints, unsubscribes) and add each one on Viesti's Suppressions page with a reason. The page adds one address at a time. Viesti then refuses mail to those addresses when you submit it.
7. Remove Mailgun's records
Once nothing sends through Mailgun, wait a few days for late bounces, then remove include:mailgun.org from the SPF record and delete Mailgun's DKIM TXT record and tracking CNAME. Delete Mailgun's MX records only if nothing still arrives through Mailgun for that domain. Replies to your mail need an MX (or A) record that leads to a mailbox you read; Viesti's Sending domains page lists it as an optional row.