What makes ZeptoMail so special?
MailChannels is an email sending API service for Cloudflare Workers customers. They’ve recently announced an end of life notice, requesting customers to switch to another transactional email service to continue their email sending process.
Are you a MailChannels user hanging in there without knowing which email service to rely on and invest in?
If you’re a MailChannels user looking to switch to an affordable transactional email service, this is the right time to transition to Zoho ZeptoMail. Along with highly reliable transactional email sending and management, every user can send up to 10,000 free emails on sign up. Our pay-as-you-go plan ensures you pay only for the emails you use. With ZeptoMail's top-notch features, you get to experience excellent deliverability and high security at an affordable price.
Get started with Zoho ZeptoMail.
Here’s a quick roadmap to starting your transition journey from MailChannels to Zoho ZeptoMail using this simple four-step guide.
Sign up for Zoho ZeptoMail.
Sign up for Zoho ZeptoMail by entering the relevant credentials.
Right after 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.
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 API code.
You can easily make the transition from MailChannels to ZeptoMail by just changing this one line of your API code.
Send an API request to https://api.zeptomail.com/v1.1/mc/email
To authorize your request, you need to add the send mail token (Mail Agents→ setup info→ API→ copy send mail token) in the header section.
Send transactional emails from ZeptoMail.
You can now start sending your transactional emails from Zoho ZeptoMail. Happy email sending!
curl "https://api.zeptomail.com/v1.1/mc/email" \
-X POST \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization:[sendmail_token]" \
-d '{
\"headers\" : { \"key\" : \"headers\" },
\"from\": { \"email\": \"fromAddress@example.com\", \"name\": \"fromName\" },
\"personalizations\" : [ { \"cc\" : [ { \"name\" : \"ccName\", \"email\" : \"ccAddress@example.com\" } ],
\"bcc\" : [ { \"name\" : \"bccName\", \"email\" : \"bccAddress@example.com\" } ],
\"to\" : [ { \"name\" : \"toName\", \"email\" : \"toAddress@example.com\" } ] } ],
\"subject\" : \"Test subject\",
\"content\" : [ { \"type\" : \"html/text\", \"value\" : \"This is a test email\" } ],
\"reply_to\" : { \"email\": \"replyToAddress@example.com\", \"name\": \"replyToName\" } }'
import fetch from 'node-fetch';
fetch("https://api.zeptomail.com/v1.1/mc/email", {
body: JSON.stringify({
"personalizations": [
{
"to": [
{
"email": "email",
"name": "name"
}
],
"bcc": [
{
"email": "email",
"name": "name"
}
]
},
{
"to": [
{
"email": "email",
"name": "name"
}
],
"cc": [
{
"email": "email",
"name": "name"
}
]
}
],
"from": {
"email": "email",
"name": "name"
},
"reply_to": {
"email": "email",
"name": "name"
},
"subject": "Your Example Order Confirmation",
"content": [
{
"type": "text/html",
"value": "Hello, this is a test mail
"
}
],
"headers":{
"customHeaders":"headers",
}
}),
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/mc/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", "[send_mail_token]");
JObject parsedContent = JObject.Parse("{
'headers' : {
'key' : 'headers'
},
'from': {
'email': 'fromAddress@example.com',
'name': 'fromAddress'
},
'personalizations' : [ {
'cc' : [ {
'name' : 'ccName',
'email' : 'ccAddress@example.com'
} ],
'bcc' : [ {
'name' : 'bccName',
'email' : 'bccAddress@example.com'
} ],
'subject' : 'Test subject',
'to' : [ {
'name' : 'toName',
'email' : 'toAddress@example.com'
} ]
} ],
'content' : [ {
'type' : 'html/text',
'value' : 'This is a test email'
} ],
'reply_to' : {
'email': 'replyToName',
'name': 'replyToAddress@example.com'
}
}");
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/mc/email"
payload = "{ \"headers\" : { \"key\" : \"headers\" }, \"from\": { \"email\": \"fromAddress@example.com\", \"name\": \"fromName\" }, \"personalizations\" : [ { \"cc\" : [ { \"name\" : \"ccName\", \"email\" : \"ccAddress@example.com\" } ], \"bcc\" : [ { \"name\" : \"bccName\", \"email\" : \"bccAddress@example.com\" } ], \"to\" : [ { \"name\" : \"toName\", \"email\" : \"toAddress@example.com\" } ] } ], \"subject\" : \"Test subject\", \"content\" : [ { \"type\" : \"html/text\", \"value\" : \"This is a test email\" } ], \"reply_to\" : { \"email\": \"replyToAddress@example.com\", \"name\": \"replyToName\" } }"
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/mc/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 => '{
"headers": {
"key": "headers"
},
"from": {
"email": "fromAddress@example.com",
"name": "fromAddress"
},
"personalizations": [
{
"cc": [
{
"name": "ccName",
"email": "ccAddress@example.com"
}
],
"bcc": [
{
"name": "bccName",
"email": "bccAddress@example.com"
}
],
"to": [
{
"name": "toName",
"email": "toAddress@example.com"
}
]
}
],
"subject": "Test subject",
"content": [
{
"type": "html/text",
"value": "This is a test email"
}
],
"reply_to": {
"name": "replyToName",
"email": "replyToAddress@example.com"
}
}'
CURLOPT_HTTPHEADER => array(
"accept: application/json",
"authorization: [send_mail_token]",
"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/mc/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", "[send_mail_token]");
JSONObject object = new JSONObject("{
\"headers\" : { \"key\" : \"headers\" },
\"from\": { \"email\": \"fromAddress@example.com\", \"name\": \"fromName\" },
\"personalizations\" : [ {
\"cc\" : [ { \"name\" : \"ccName\", \"email\" : \"ccAddress@example.com\" } ],
\"bcc\" : [ { \"name\" : \"bccName\", \"email\" : \"bccAddress@example.com\" } ],
\"to\" : [ { \"name\" : \"toName\", \"email\" : \"toAddress@example.com\" } ] } ],
\"subject\" : \"Test subject\",
\"content\" : [ { \"type\" : \"html/text\", \"value\" : \"This is a test email\" } ],
\"reply_to\" : { \"email\": \"replyToAddress@example.com\", \"name\": \"replyToName\" }
}");
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();
}
}
}
}
MailChannels Transition API Code Explained
A detailed documentation into MailChannels transition API to start sending your transactional emails from ZeptoMail.
MailChannels 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 helps you organize your transactional emails by grouping them based on type, purpose, applications, and more. You can easily manage multiple applications under one roof efficiently. Learn more
Processed Emails
ZeptoMail can help you view the status of your sent emails with the help of processed emails. You can quickly view a list of emails arranged in the order they were processed. You can store the processed email data for 60 days, and you can also export them as a list with ZeptoMail. Learn more
Email Templates
ZeptoMail makes your work easier by offering pre-built email templates for different types of transactional emails. You can edit them, or even build them from scratch. With the help of merge tags, you can personalize your content for every customer in real time. Learn more
Domains
The domains page lets you manage your domains and add associated domains to ZeptoMail. You can add up to 100 domains per account. You can find DKIM and CNAME values and add them to DNS to verify your domain. You can also view the associate domains for each Mail Agent and their verification status. Learn more
Webhooks
In ZeptoMail, you can activate webhooks, a custom HTTP callback that allows you to track the recipient's activity, like opens, clicks, and bounces in an application or website. When a webhook gets activated, it promptly sends notification to the designated URL. Learn more
Email Tracking
Email tracking is another great feature to track the opens and clicks of your emails. This can help you measure 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 an interesting feature that helps you manage your attachments in ZeptoMail. You can store up to 1GB per account. You can easily attach images to your email just by uploading them to the File Cache. Now you can use the File Cache key in your emails API to insert images automatically. Learn more
Suppression List
The Suppression List is a record of emails addresses or domains that are suppressed because of bounces, unsubscribes, or invalid email addresses. This feature helps you improve your sender reputation. In ZeptoMail, you can enable the auto-suppression feature to add these email addresses to the suppression list automatically. Learn more
Subscription
The subscription page provides all of the details of subscription details, transaction details, purchased credits, and the number of credits and emails left. Enable auto-top mode to purchase credits automatically. To set up auto top-up, you must have your account reviewed and should have bought credits at least once. Learn more
Reports
ZeptoMail can help you get custom-made reports to track the overall performance of your transactional emails. You can easily monitor, compare, and receive comprehensive reports on opens, bounces, clicks, user engagement, and more. Remember, the Email Tracking option has to be enabled for getting click and open data. Learn more
Manage Users
Manage Users is a feature that helps you manage different users using a ZeptoMail account. You can add 30 users, assign their roles, and associate them with Mail Agents. Roles in ZeptoMail include: Postmaster: The admin of the account (has all privileges), Engineer: Has multiple access points, Viewer: Has view-only access. Learn more
Activity Logs
Activity Logs are a list of activities performed by multiple users using a ZeptoMail account. Actions like creating or renaming a file, updating a Mail Agent, and creating templates are recorded for compliance reasons. You can export up to 5,000 records as a .zip file, which will only be accessible for three days. Learn more
Content Settings
In ZeptoMail, you can save transactional email content in the Content Settings section of the Settings menu. You can also view the saved content in the Processed Emails tab for each mail agent. The content storage is available for 60 days. Remember to tick off the box "Save the email content" so you don’t lose your content. Learn more
IP Restrictions
ZeptoMail's IP Restriction feature lets you specify a list of IPs that can be used to send emails from your account. This added security measure helps protect against any token compromise and prevents unauthorized parties from sending emails from some other IPs. Learn more
Export Logs
ZeptoMail lets you export email logs, activity logs, and suppression lists. The exported file can be exported with a password. This helps protect your data and sensitive information from leaking. Learn more
Why should you choose ZeptoMail?
Exclusively transactional
ZeptoMail 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 based on 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
Because every action is recorded as data, you’ll get detailed reports and logs to keep you informed of all your activities.
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
You’ll have 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 because transactional emails contain confidential information.
Frequently asked questions
How long does it take to transition to ZeptoMail?
It only takes five minutes to switch to ZeptoMail. Simply change one line of your API code and you can start sending transactional emails from ZeptoMail.
Will your email deliverability be affected after the transition?
No, not at all. ZeptoMail ensures high deliverability because it uses dedicated IPs to send only transactional emails. This can improve your sender reputation after transitioning to ZeptoMail.
How much does it cost to transition to ZeptoMail?
There are no additional charges for the transition process as such. It takes five minutes of your time to complete the transition process.
Is ZeptoMail more affordable?
Yes, ZeptoMail is affordable. ZeptoMail operates on a credit-based system that means you pay only for the emails you use. One credit costs $2.50. On signing up, you receive one free credit good for 10,000 complimentary emails upon signing and remains valid for six months.
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?
To purchase credits, you need to select the option "buy extra credits" in the dashboard panel or the subscription panel. This will take you to the payment page to process your purchase.
What happens if you run out of email credits?
Your email sending will be paused. So, to keep sending email 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.