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 :)
![Sign up for Zoho ZeptoMail](http://www.zohowebstatic.com/sites/zweb/images/zeptomail/migration/step-1.jpg)
![Domain addition and verification](http://www.zohowebstatic.com/sites/zweb/images/zeptomail/migration/step-2.jpg)
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();
}
}
}
}
![Send transactional emails from ZeptoMail](http://www.zohowebstatic.com/sites/zweb/images/zeptomail/migration/step-4.jpg)
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
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
Transition to ZeptoMail for affordable and reliable email delivery
All names and marks mentioned here remain the property of their original owners. Details are as published by the named competitors on their website(s) on April 2024 and are subject to change without notice. The details provided on this page are for general purposes only and cannot be considered as authorized information from the respective competitors. Zoho disclaims any liability for possible errors, omissions, or consequential losses based on the details here.