What makes ZeptoMail so special?
Zoho ZeptoMail and Postmark are services built to focus on email delivery. Unlike Postmark's broadened scope comprising broadcast and bulk emails, ZeptoMail remains dedicated to providing a specialized solution for transactional emails.
Why invest in unnecessary broadcast messages and bulk email infrastructure when you can pay only for transactional emails with ZeptoMail?
Switch to ZeptoMail for streamlined transactional email sending and management. Our pay-as-you-go plan ensures that you pay only for the emails you use. Additionally, we guarantee prompt delivery by employing trusted IPs exclusively for transactional email sending.
Get started with Zoho ZeptoMail.
Here’s a quick roadmap to make a seamless transition from Postmark to Zoho ZeptoMail with this simple four-step guide.
Sign up for Zoho ZeptoMail.
Sign up for Zoho ZeptoMail by entering the relevant credentials.
Once you sign up, you’ll receive a verification email to validate your email address.
Once you verify your account, you’ll reach the page where you can enable two-factor authentication for your account. You can choose from the list of TFA options to enable it.
Domain addition and verification.
As soon as you sign up, you can start adding your domain.
Add DKIM, and CNAME records in your DNS configuration to verify your domain.
Learn more from the step-by-step guide on how to add and verify your domain.
Modify one line of your existing code.
You can easily make the transition from Postmark to ZeptoMail by just changing this one line of your API code.
Send an API request to https://api.zeptomail.com/v1.1/pm/email
To authorize your request, you need to add the Send mail token in the header section.
Send transactional emails from ZeptoMail.
Welcome to ZeptoMail. You can now start sending your transactional emails. Happy email sending :)
curl "https://api.zeptomail.com/v1.1/pm/email" \
-X POST \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization:Zoho-enczapikey ***" \
-d '{
"From": "fromAddressName",
"To": "toAddressName1, toAddressName2",
"Cc": "ccAddressName1, ccAddressName2",
"Bcc": "bccAddressName",
"Subject": "Test Email",
"HtmlBody": "Hello, this is a test mail
",
"ReplyTo": "replyToAddress",
"Attachments": [
{
"Name": "readme.txt",
"Content": "",
"ContentType": "text/plain"
},
{
"Name": "image.png",
"ContentID": "cid:image_cid",
"Content": ""
"ContentType": "image/png"
}
],
}'
import fetch from 'node-fetch';
fetch("https://api.zeptomail.com/v1.1/pm/email", {
body: JSON.stringify({
"From": "fromAddressName",
"To": "toAddressName1, toAddressName2",
"Cc": "ccAddressName1, ccAddressName2",
"Bcc": "bccAddressName",
"Subject": "Test Email",
"HtmlBody": "Hello, this is a test mail
",
"ReplyTo": "replyToAddress",
"Attachments": [
{
"Name": "readme.txt",
"Content": "",
"ContentType": "text/plain"
},
{
"Name": "image.png",
"ContentID": "cid:image_cid",
"Content": ""
"ContentType": "image/png"
}
],
}),
method: "POST",
headers: {
"Authorization": "Zoho-enczapikey ***",
"Accept": "application/json",
"Content-Type": "application/json"
}
})
using System;
using System.Net;
using System.Text;
using System.IO;
using System.Net.Http;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
namespace Rextester
{
public class Program
{
public static void Main(string[] args)
{
System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12;
var baseAddress = "https://api.zeptomail.com/v1.1/pm/email";
var http = (HttpWebRequest)WebRequest.Create(new Uri(baseAddress));
http.Accept = "application/json";
http.ContentType = "application/json";
http.Method = "POST";
http.PreAuthenticate = true;
http.Headers.Add("Authorization", "");
JObject parsedContent = JObject.Parse("{
'From': 'fromAddressName',
'To': 'toAddressName1, toAddressName2',
'Cc': 'ccAddressName1, ccAddressName2',
'Bcc': 'bccAddressName',
'Subject': 'Test Email',
'HtmlBody': 'Hello, this is a test mail
',
'ReplyTo': 'replyToAddress',
'Attachments': [
{
'Name': 'readme.txt',
'Content': '',
'ContentType': 'text/plain'
},
{
'Name': 'image.png',
'ContentID': 'cid:image_cid',
'Content': ''
'ContentType': 'image/png'
}
]}");
Console.WriteLine (parsedContent.ToString());
ASCIIEncoding encoding = new ASCIIEncoding();
Byte[] bytes = encoding.GetBytes(parsedContent.ToString());
Stream newStream = http.GetRequestStream();
newStream.Write(bytes, 0, bytes.Length);
newStream.Close();
var response = http.GetResponse();
var stream = response.GetResponseStream();
var sr = new StreamReader(stream);
var content = sr.ReadToEnd();
Console.WriteLine (content);
}
}
}
import requests
url = "https://api.zeptomail.com/v1.1/pm/email"
payload = "{\"From\": \"fromAddressName\", \"To\": \"toAddressName1, toAddressName2\", \"Cc\": \"ccAddressName1, ccAddressName2\", \"Bcc\": \"bccAddressName\", \"Subject\": \"Test Email\", \"HtmlBody\": \"Hello, this is a test mail
\", \"ReplyTo\": \"replyToAddress\", \"Attachments\": [ { \"Name\": \"readme.txt\", \"Content\": \"\", \"ContentType\": \"text/plain\" }, { \"Name\": \"image.png\", \"ContentID\": \"cid:image_cid\", \"Content\": \"\", \"ContentType\": \"image/png\" } ]}"
headers = {
'accept': "application/json",
'content-type': "application/json",
'authorization': "[send_mail_token]",
}
response = requests.request("POST", url, data=payload, headers=headers)
print(response.text)
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "https://api.zeptomail.com/v1.1/pm/email",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => '{
"From": "fromAddressName",
"To": "toAddressName1, toAddressName2",
"Cc": "ccAddressName1, ccAddressName2",
"Bcc": "bccAddressName",
"Subject": "Test Email",
"HtmlBody": "Hello, this is a test mail
",
"ReplyTo": "replyToAddress",
"Attachments": [
{
"Name": "readme.txt",
"Content": "",
"ContentType": "text/plain"
},
{
"Name": "image.png",
"ContentID": "cid:image_cid",
"Content": "",
"ContentType": "image/png"
}
]
}',
CURLOPT_HTTPHEADER => array(
"accept: application/json",
"authorization: ",
"cache-control: no-cache",
"content-type: application/json",
),
));
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
?>
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import org.json.JSONObject;
public class JavaSendapi {
public static void main(String[] args) throws Exception {
String postUrl = "https://api.zeptomail.com/v1.1/pm/email";
BufferedReader br = null;
HttpURLConnection conn = null;
String output = null;
StringBuffer sb = new StringBuffer();
try {
URL url = new URL(postUrl);
conn = (HttpURLConnection) url.openConnection();
conn.setDoOutput(true);
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "application/json");
conn.setRequestProperty("Accept", "application/json");
conn.setRequestProperty("Authorization", "");
JSONObject object = new JSONObject("{ \"From\": \"fromAddressName\", \"To\": \"toAddressName1, toAddressName2\", \"Cc\": \"ccAddressName1, ccAddressName2\", \"Bcc\": \"bccAddressName\", \"Subject\": \"Test Email\", \"HtmlBody\": \"Hello, this is a test mail
\", \"ReplyTo\": \"replyToAddress\", \"Attachments\": [ { \"Name\": \"readme.txt\", \"Content\": \" \", \"ContentType\": \"text/plain\" }, { \"Name\": \"image.png\", \"ContentID\": \"cid:image_cid\", \"Content\": \" \", \"ContentType\": \"image/png\" } ]}");
OutputStream os = conn.getOutputStream();
os.write(object.toString().getBytes());
os.flush();
br = new BufferedReader(new InputStreamReader((conn.getInputStream())));
while ((output = br.readLine()) != null) {
sb.append(output);
}
System.out.println(sb.toString());
} catch (Exception e) {
br = new BufferedReader(new InputStreamReader((conn.getErrorStream())));
while ((output = br.readLine()) != null) {
sb.append(output);
}
System.out.println(sb.toString());
} finally {
try {
if (br != null) {
br.close();
}
} catch (Exception e) {
e.printStackTrace();
}
try {
if (conn != null) {
conn.disconnect();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
How is ZeptoMail different from Postmark?
Here are the concepts and terminologies you need to easily navigate while using Zoho ZeptoMail.
- Email segments
- DNS requirements
- Attachment management
- User management
- User activity logs
- Measure
- Suppress emails
- Email logs
- Email trackers
- Content retention
- Subscription
- Support
- IP restrictions
- Webhooks
- ServersSeparate your outbound and inbound message streams.
- Sender signature → DNS settingsUnder DNS records, enter your DKIM, and CNAME to verify your domain.
- UsersManage ownership for multiple users using the account.
- StatisticsGet detailed statistics and metrics of sent, spam, bounced, tracked, and opens for each server.
- SuppressionsBounces, complaints, unsubscribes, and whitelists are added to suppressions manually or automatically.
- Custom activity retentionCustomize how long Postmark will store activity data and message content for your emails.45 days of activity data and message content data are retained by default.
- Server settings → enable trackingEnable open and link tracking for each server in the server settings.
- 45 days of content retention.
- For 50,000 emails$55 per month:Access to all features.Add-on options (+ $1.30 per 1,000 emails).(100 emails free per month.)
- 24/7 email, phone, and chat support is available for all users.
- Sending → webhooksAdd webhooks to domains to receive notifications on events linked to the messages you send.
- zeptomail
- Mail AgentsGroup your emails by type, purpose, app, and more using Mail Agents
- Domains → DNS settingsConfigure DKIM, and CNAME records in your DNS settings to authenticate your domain.
- File cacheSave space by uploading attachments to the file cache. Use the file cache key when sending emails via API.The file cache supports 1GB of storage for an account.
- Manage usersManage the ownership and access of multiple users using the account.
- Activity logsActivity logs allow you to view the activities performed by different users in your ZeptoMail account.(1 year of activity log retention.)
- ReportsGet reports of sent, delivered, soft bounces, hard bounces, process failed, opens, clicks, and custom reports for all users.
- Suppression listHard bounces of certain categories are added to the suppression list automatically. You can also manually suppress email addresses and domains.
- Processed emailsThe system displays your sent emails under processed emails. The emails are listed in the order they were processed.60 days of processed email data and content are retained by enabling the setting.
- Mail Agent → email trackingIn ZeptoMail, you’ll have to enable tracking for open and click tracking for each Mail Agent.
- Any number of credits60 days of content retention.
- For 50,000 emails$12.50 (5 credits) Access all features for all users.Buy credits and pay as you go only for the used emails.1 credit free (10,000 emails) for 6 months.
- 24/7 extensive technical support with phone, email, and chat support is available for all users.
- IP restrictionsInclude a list of IPs that will be used to send emails from your ZeptoMail account to prevent malicious activity.
- Mail Agent → webhooksConfigure webhooks to get notifications about activities in your emails.
Get a detailed comparison between Postmark and ZeptoMail.
Postmark vs. ZeptomailPostmark Transition API Code Explained
A detailed documentation into Postmark transition API to start sending your transactional emails from ZeptoMail.
Postmark Transition APIZeptoMail feature highlights
- Mail Agents
- Processed Emails
- Email templates
- Domains
- Webhooks
- Email tracking
- File Cache
- Suppression List
- Subscription
- Reports
- Manage Users
- Activity Logs
- Content Settings
- IP Restrictions
- Export Logs
Mail Agents
A Mail Agent within ZeptoMail groups your transactional emails by type, purpose, applications, and more. This feature helps to manage multiple applications or a variety of transactional emails from your business efficiently. Each Mail Agent has a unique API token and SMTP credentials. Learn more
Processed Emails
The Processed Emails feature helps you see the status of your sent emails. The emails are listed in the order they were processed. ZeptoMail stores the processed emails data for up to 60 days. You can also export this list to track the performance of your transactional emails. Learn more
Email templates
ZeptoMail provides transactional email templates so you can avoid writing the same email every time you send it. Instead, you can use a standardized template for OTPs, password resets, order confirmation and many more to send emails to your users. Learn more
Domains
The domains page allows you to manage and add domains to ZeptoMail, with a limit of 100 domains per account. Here, you can find DKIM and CNAME values to add to your DNS for domain verification. Additionally, you can view associated domains for each Mail Agent and check their verification status. Learn more
Webhooks
Webhooks are custom HTTP callbacks triggered by specific events. In ZeptoMail, they send recipient activity data (opens, clicks, bounces) to your application instantly when these interactions occur. When a webhook is triggered, it promptly sends data to the specified URL, providing instant notification. Learn more
Email tracking
Email tracking helps you track opens and clicks because it’s important to know the engagement level of your transactional emails. In ZeptoMail, you need to enable email tracking for tracking opens and clicks. You should enable tracking for each Mail Agent separately. Learn more
File Cache
File Cache is a special feature introduced by ZeptoMail for easier attachment management. You can include images in your transactional emails by using the File Cache key in your email API instead of manually doing it every time. ZeptoMail's File Cache supports upto 1GB of storage for an account. Learn more
Suppression List
The Suppression List keeps track of email addresses and domains excluded from receiving emails due to bounces, unsubscribes, or invalid addresses. ZeptoMail can automatically add bounced addresses to this list with its auto-suppression feature. Learn more
Subscription
The subscription section in ZeptoMail shows your purchased credits, transaction details, remaining credits, and emails. You can also buy credits and enable auto top-up to acquire credits automatically. To set up auto top-up, ensure your account is reviewed and you have purchased credits at least once. Learn more
Reports
With ZeptoMail, you can generate custom reports to track the overall performance of your transactional emails. You can easily monitor and compare two Mail Agents and receive detailed reports on opens, bounces, clicks, user engagement, and more. Ensure that the Email Tracking option is enabled to collect click and open data. Learn more
Manage Users
Manage user feature lets you manage upto 30 users using a ZeptoMail account. For each user, their role and their associated Mail Agents are displayed. There are three major roles in your ZeptoMail account: Postmaster: The admin of the account (has all privileges), Engineer: Multiple access, Viewer: Access to view only. Learn more
Activity Logs
Activity logs in ZeptoMail track and record user activities like renaming files, updating Mail Agents, and creating templates. You can export logs for compliance, with the .zip file available for three days. Up to 5,000 records can be exported at once. Learn more
Content Settings
In ZeptoMail, you can save the content of your transactional emails in the Content Settings section in the Settings menu. This saved content can be viewed in the Processed Emails tab under each mail agent for a period of 60 days. Remember to tick off the box "Save the email content" to save your content. Learn more
IP Restrictions
In ZeptoMail, you can use the IP restriction feature to include a list of IPs that will be allowed to send emails from your ZeptoMail account. dding your IPs to this list, enhances security by preventing unauthorized parties from sending emails and protecting against token compromise. Learn more
Export Logs
ZeptoMail allows you to export emails logs, activity logs, and suppression lists. The secured file can be exported with a password. This safeguards your data and confidential information from unauthorized access. Learn more
Why choose ZeptoMail?
Exclusively transactional
ZeptoMail is a dedicated platform that ensures great inbox placement and delivery in seconds.
User-friendly interface
Easy-to-use interface seamlessly connects ZeptoMail to your business.
Email segmentation
Segment your emails into Mail Agents, categorizing them by domain, application, or purpose.
No gatekeeping
Use all of the features without restrictions. No updates or additional costs are required to use ZeptoMail's features.
Comprehensive reports
Get detailed reports and logs to keep you informed of all of your activities because every action is recorded as data.
Flexible pricing
ZeptoMail's pay-as-you-go pricing ensures you only pay for the emails you use, without being tied to monthly plans or unused emails.
Attachment storage
Upload and store attachments in ZeptoMail's file cache for easy access when sending emails.
24/7 support
24/7 access to technical assistance over chat, phone, and email for anything related to ZeptoMail.
Security and privacy
ZeptoMail is built with a security-first approach as transactional emails contain confidential information.
Frequently asked questions
How long does it take to transition to ZeptoMail?
It takes only five minutes to switch to ZeptoMail. You only have to change one line of your API code and you can start sending transactional emails from ZeptoMail.
Will your email deliverability be affected after transition?
No, not at all. ZeptoMail ensures high deliverability because it uses dedicated IPs to send only transactional emails. You can improve your sender reputation after transitioning to ZeptoMail.
How much does it cost to transition to ZeptoMail?
There are no additional charges for transitioning. Pay only for the emails that you send using ZeptoMail.
Is ZeptoMail more affordable than Postmark?
Yes, ZeptoMail is much more affordable than Postmark. ZeptoMail costs around $2.50 (1 credit) for 10,000 emails whereas Postmark costs $15 every month for 10,000 emails. ZeptoMail charges only for the used emails and no extra charges for unused emails.
Is it possible to start sending emails right after you create an account?
Yes. Right after you create your account and verify your domain, you’ll be able to send up to 10,000 emails, limited to 100 emails per day. Additional credits can be purchased after your account has been reviewed.
Why do you need a Mail Agent?
A Mail Agent is used to organize all of your transactional emails, such as OTPs, password resets, and payment confirmations sent from ZeptoMail. This allows ZeptoMail to efficiently manage various transactional emails.
How do you purchase more ZeptoMail credits?
You have the option to buy credits either from the dashboard panel or the subscription panel. Each ZeptoMail credit allows you to send 10,000 emails and remains valid for 6 months.
What happens if you run out of email credits?
Your email sending will be paused. So, to keep your email sending uninterrupted, turn on the auto top-up feature, which automatically refills email credits when you hit your defined threshold.
What happens to the unused emails?
Unused emails from each credit will be carried over to the following month and will remain valid for up to six months.