Migrating email service providers can be a large undertaking. We want to help relieve some of that stress of moving to Postmark from SparkPost. This guide will detail some of the differences and similarities between SparkPost and Postmark, as well as give some useful tips for migrating to Postmark from SparkPost.
It includes details on differences between Postmark and SparkPost APIs, sending outbound emails, processing inbound emails, UI differences, and webhooks.
These are some important differences to be aware of when moving over to Postmark from SparkPost:
Postmark does not allow anyone to send marketing or bulk email, whereas SparkPost does. If you were sending your marketing and/or bulk email through SparkPost and want to switch those over to another provider, we highly recommend using Campaign Monitor for any bulk email you need to send. This means that features like list management or suppression lists are not supported.
Since Postmark does not allow bulk email (including subscription newsletters), there are no list management features available in Postmark, such as handling unsubscribes or adding unsubscribe links to your emails.
Postmark doesn’t offer premium or enterprise options because we provide full support for all of our customers regardless of how much you pay.
Postmark does not provide 15,000 free emails each month like SparkPost. We do however offer a 100 emails per month developer plan that is free, so you can try out our service.
We do not recommend using dedicated IPs for most senders but do move senders to dedicated IPs at no additional charge once they reach a significantly large volume. As a result, you are never responsible for warming up an IP. We take full responsibility for managing IP addresses and warming them up.
Postmark does not currently support custom domains for click tracking. For security purposes, we use a secure domain: https://click.pstmrk.it.
Important concepts to learn when moving over to Postmark
There are a couple important concepts to learn when moving over to Postmark: Servers and Sender Signatures, and Verified Domains. A server and a confirmed sender signature/verified domain are required for sending, so it is important to understand what they are used for.
Each Postmark account contains servers. Servers are similar to sub-accounts on SparkPost and can be thought of as folders you create that group together similar email activity. Each server has its own activity (inbound and outbound), stats, server API token(s), a unique inbound email address, and templates. You can create as many servers as you need, there is no limit.
Some uses of servers are separating your clients’ activity, sending emails for different environments (prod, staging, development), or separating sending for your different domains. When you begin adding more users to your Postmark account, you can also assign them access to specific servers so that they can’t view email activity or change settings across your entire Postmark account.
In Postmark you need to have either a confirmed sender signature or verified domain for each email address you want to send from. Sender signatures are individual email addresses that are authorized for sending via a confirmation email sent to that address. Adding and verifying a domain using a DKIM record lets you send from any email address on that domain.
The domain verification option is similar to SparkPost’s domain verification, but Postmark’s sender signatures offer a lower-friction way to verify individual email addresses for sending when verifying an entire domain isn’t practical.
We use sender signatures and verified domains to ensure you own or are authorized to send from the mailboxes you add to your Postmark account. You can have as many signatures and domains as you need, there is not a limit. Sender signatures and domains are associated with your account, not a specific server. This means they can be used for sending across all of your account’s servers.
Postmark does not support verifying domain ownership by emailing abuse@example.com and postmaster@example.com. To verify a domain, you will need the ability to update DNS records for the domain.
Tip: You can use any sender signature/verified domain for sending with any Postmark server. It is different from SparkPost where the sending domain and its activity are linked together.
Each Postmark account has an account API token. Every server in an account also has its own server API token(s). Server API tokens are used for server-level actions such as sending email, getting statistics, modifying a template, etc… account API tokens are used for account-level actions such as creating a new server or adding a new domain for sending.
Like SparkPost’s sink.sparkpostmail.com domain, you can also send test emails to Postmark’s sink email address, test@blackhole.postmarkapp.com. Messages sent to this domain will be dropped on the receiving end but you will be able to see the delivery confirmation and message in your Activity. Also see our blog post about best practices when testing with your Postmark account.
Entire domains can be verified for sending using DKIM and SPF records
Both SparkPost and Postmark support adding metadata to messages.
Postmark retains the full content and event history of every message for 45 days whereas SparkPost only maintains event history and only for 10 days.
Postmark’s outbound message size limit is 10 MB including attachments, SparkPost’s limit is 20 MB.
Postmark messages can have up to 50 recipients in a single message.
You must use a Server API Token for both your SMTP username and password when using SMTP with Postmark. You can generate as many Server API Tokens as you need.
Postmark does not support scheduling messages to be delivered later. Postmark sends the emails as soon as the request to send is received. If you want to schedule messages to be sent at a later date or time, you would need to do that in your codebase.
Templates are not supported with Postmark’s SMTP service and can only be used with the Postmark API.
With Postmark, you can verify a single email address, or “Sender Signature,” for sending in place of verifying an entire domain
Verifying Email Addresses and Domains for Sending #
Similar to SparkPost, domains in Postmark are verified for sending using DKIM and SPF records added to your domain’s DNS. Head over to our help article on verifying a domain for sending with Postmark for more detailed steps. Unlike SparkPost, you cannot verify a domain by sending emails to the abuse@ and postmaster@ email addresses for your domain.
Postmark also includes an additional option for sending from a single email address that you can confirm using an emailed link. You can add individual addresses as Sender Signatures to your account, which does not require that you add DKIM and SPF records to send with that email address, though we always recommend setting up DKIM and SPF to maximize deliverability.
You can add and manage your sending domains and email addresses from the Sender Signature page in Postmark. Each domain you add has an Authentication page that includes the unique DNS record information for setting up DKIM, SPF, and a custom return-path.
Tip: Postmark does not allow sending from any public domain email addresses, such as Gmail, Yahoo, AOL, Outlook, Live, etc…
Each server you create in Postmark will have its own unique server API token(s). You will need to use a server API token (found in the credentials tab of a server in Postmark) for authenticating SMTP sending.
Tip: You will need to switch over to using port 25, 2525, or 587 when using Postmark SMTP. We recommend using port 2525 or 587, since port 25 is sometimes blocked by ISPs.
Settings
SparkPost
Postmark
SMTP Endpoint
smtp.sparkpostmail.com
smtp.postmarkapp.com
Port
587 or 2525
25, 587, or 2525
Username
SMTP_injection
Server API Token
Password
API Key
Server API Token
Authentication
TLS (STARTTLS)
Plain text (unencrypted), CRAM-MD5, TLS
If you need to whitelist the IPs you connect to Postmark SMTP with, whitelist the following ranges:
Authentication When authenticating with the Postmark API for sending emails, you will need to use your server API token in an X-Postmark-Server-Token header. As a reminder, you can get your server API token from the server’s credentials tab.
Outbound Sending API JSON Fields Map
Field
SparkPost
Postmark
From email address(es)
content → from → email
From
From name
content → from → email
From
ReplyTo email address
content → reply_to
ReplyTo
ReplyTo name
content → reply_to
ReplyTo
To email address(es)
recipients
To *
To name
recipients
To *
Cc email address(es)
cc
Cc *
Cc name
cc
Cc *
Bcc email address(es)
bcc
Bcc *
Bcc name
bcc
Bcc *
Archive Addresses
archive
Metadata
metadata
Metadata
Subject line
content → subject
Subject
Custom Tag
recipients → tags
Tag
HTML Body
content → html
HtmlBody
Text Body
content → text
TextBody
Custom Headers
content → headers
Headers
Template Identifier
content → template_id
TemplateId
Data to use in Template
substitution_data
TemplateModel
Open Tracking
options → open_tracking
TrackOpens
Link Tracking
options → click_tracking
TrackLinks
Attachments
content → attachments
Attachments
Inline Attachments
content → inline_images
Attachments
Send At Time
options → start_time
Send API Request without sending email
options → sandbox
Use POSTMARK_API_TEST for your X-Postmark-Server-Token header value
Tip: To set a name when adding a To, From, Cc, or Bcc field with the Postmark API, use this format: “Full Name <email@domain.com>”
To start sending quickly with Postmark's API, be sure to check our our official and community API libraries.
For the most part, inbound email processing is implemented similarly between Postmark and SparkPost, but SparkPost refers to it as “Relay Events.” If you were using relay events with SparkPost and will be using Postmark for processing email once you migrate, this section is an important read.
Postmark and SparkPost both process inbound emails by converting them to well-formed JSON, which is then posted to a URL that you specify for receiving inbound webhooks.
Both SparkPost and Postmark feature the ability to process emails sent to an entire sub-domain or domain using MX records.
You can manage inbound webhook settings using an API (Relay Webhooks API in SparkPost and Servers API in Postmark)
Postmark will provide the raw content as well as a clean “Stripped Reply” that removes any quoted text and email signatures.
Postmark will automatically parse and strip the inbound email address to include a field for the Mailbox Hash
With Postmark, you do not have to use a verified domain for inbound domain forwarding, and Postmark does not require that you set up inbound domain forwarding using an MX record in order to use inbound processing. Each server you create in Postmark will come with a unique inbound email address (ex. yourhash@inbound.postmarkapp.com) that you can use to receive emails inbound at your webhook URL. However, if you want to use inbound domain forwarding, and MX record is required.
Postmark requires that you enable SMTP (if not enabled already) on your Postmark server to use inbound processing.
SparkPost retries inbound message POSTs first at 300 seconds after the initial post, and then repeatedly tries up to 7 times with a back-off algorithm. With Postmark, a total of 10 retries will be made over a 10.5 hour period, with growing intervals from 1 minute to 6 hours. If all of the retries have failed, your inbound activity page will show the message has a processing error.
Postmark’s inbound message size limit including attachments is 35 MB, whereas SparkPost’s is 20 MB.
Postmark allows you to use filters to block specific domains or email addresses from inbound processing. This saves you processing resources and does not charge you for an email that was blocked for spam or other abuse. These blocked messages are saved for 10 days, and you can bypass the block via the web interface or API.
Postmark also offers some SpamAssassin message scoring and filtering for inbound messages.
Postmark provides you with some additional control on how spam filtering is handled that is not available in SparkPost. In your inbound settings in the Postmark UI (Settings > Inbound) you can set your Spam Assassin threshold, which is the Spam Assassin score that needs to be reached or exceeded to trigger the spam filter (the higher the Spam Assassin score, the more likely the email is spam).
Postmark's inbound spam filtering settings
In the inbound spam filtering settings you can also add rules for blocking inbound messages from specific email addresses and domains.
Both SparkPost and Postmark allow you to receive notifications as JSON POSTs to URLs you specify when specific events occur. While SparkPost has one main webhook concept with different event types, Postmark splits up event types into multiple distinct webhooks.
Postmark’s delivery webhook allows you to receive notifications when an email is delivered to a recipient. In Postmark, an email is considered successfully delivered when the destination email server returns a 250 OK response after delivery is attempted.
Postmark includes some additional information for bounce events that is not present in the SparkPost Event Webhook you should be aware of:
Information on whether the recipient’s email address is deactivated and can be reactivated
Whether a message dump is available. Postmark stores content for 45 days but retains bounce
information indefinitely. If the message was sent less than 45 days ago,
you can get a full dump of the message content if this parameter’s
value is true
It's also important to note that Postmark's bounce webhook also handles spam complaints and notifications whereas SparkPost uses a separate set of web hooks just for Spam. The fields below denote when an attribute from a SparkPost webhook is only included for spam or bounce requests.
Tag/Category (Message tags in Postmark, Recipient tags in SparkPost)
rcpt_tags
Tag
Unique bounce identifier
event_id
ID
Bounce Type
bounce_class (Bounce Hook Only)
Type
Email Identifier
message_id
MessageID
Server used to send the email (Server in Postmark, Subaccount in SparkPost)
subaccount_id
ServerID
Error Code
error_code (Bounce Hook Only)
Bounce details
raw_reason (Bounce Hook Only)
Details
Description of bounce
reason (Bounce Hook Only)
Description
Whether the recipient’s email is deactivated
Inactive
Whether the recipient’s email address can be reactivated
CanActivate
If a message dump is available
DumpAvailable
Event Type
type
Campaign ID
campaign_id
Customer ID
customer_id
Delivery Method
delv_method
Type of Spam Report
fbtype (Spam Hook Only)
Details, Description
Report By
report_by (Spam Hook Only)
Report To
report_to (Spam Hook Only)
Originating IP Address
ip_address
Originating IP Pool
ip_pool
Message Size
msg_size
Routing Domain
routing_domain
Sending IP
sending_ip
Template ID
template_id
Template Version
template_version
Transmission ID
transmission_id
Tip: Postmark includes an additional option when setting your bounce webhook URL to include the message content in the JSON sent to your URL. This option lets you receive the full message content when receiving bounce event information.
The Rebound JavaScript snippet (once installed on your website) will tap into the Postmark API to check for hard bounces and prompt your customers to update their email address if they've experienced deliverability issues in the past.
You can even customize this notifications appearance and messaging without writing any code.
You will notice some open tracking information available with the Postmark open tracking webhook that does not exist in SparkPost's Event webhook or is more difficult to access:
The platform the recipient was using (mobile, desktop, webmail). SparkPost only provides the user agent string, and you have to parse it yourself.
The email client or browser the recipient was using when they opened the email. SparkPost only provides the user agent string, and you have to parse it yourself.
The IP address of the recipient when the email was opened
Whether this open event was the first time the email was opened
You will notice some click tracking information available with the Postmark click tracking webhook that is not easily available from SparkPost’s Event webhook without parsing the User Agent field:
The platform the recipient was using (mobile, desktop, webmail) when they clicked the link
The email client or browser and version the recipient was using when they clicked a link in the email
When you log into Postmark you are placed in the servers page, which shows each server you have created. Each server you create has tabs for Statistics, Activity, Templates, Settings, and Credentials, which are unique for each server in your account.
Servers let you separate your outbound and inbound messages, templates, and credentials based on domains, environments, customers, or any other criteria that helps organize the activity of a given application or website.
The main servers page will show you a list of your servers. You can create as many servers as you need, there is no limit. You can also pin your most frequently accessed servers so they appear at the top of the list. Unused servers will be greyed out, for easy identification of which servers you may want to delete or repurpose.
You can use servers in Postmark to group logically related email activity by domains, environments, or other factors.
To view statistics and metrics for a server, click on the server, which will take you to its statistics tab.
The statistics tab is similar to SparkPost's Reports pages, though each server has its own statistics page rather than an overall account view like SparkPost. Included in the statistics area are the server's sending volume, processed (inbound) volume, link tracking metrics (if enabled), open tracking metrics (if enabled), and bounce metrics.
Email activity can be filtered by date and tag to show the levels of engagement for various groups of emails or all emails.
To see your inbound and outbound activity in a server, click on the Activity tab. This area will show a detailed event view of that Server’s events, including sent, delivered, open events, spam complaints, bounces, etc... Use the search bar to look for emails by subject or email address.
To see details for a particular event, click on the event. Some events included are sent emails, bounces, spam complaints, clicked links, and opened emails. Events in Activity are color coded to help you tell what occurred at a glance:
Email processed - light green
Email delivered - green
Email opened - blue
Link clicked - purple
Bounce/spam complaint - red
Message queued - yellow
The events activity stream will show emails, opens, bounces, clicks, and spam complaints.
In addition to message events, Postmark stores the full content (both plain text and HTML) of emails for 45 days.
When an email bounces, Postmark provides a detailed explanation from the server response as well as the option to reactivate delivery. You can also reactivate delivery for bounced addresses using the API.
Postmark gives you the ability to create and store templates including a variety of pre-built and well-test templates for common scenarios. From the Templates tab you can create, edit, and delete the server’s templates. Each server contains its own templates but you can easily copy templates from one server to another.
Alternatively, if you'd like to build your own batch of templates, we've created and open-sourced MailMason to help you automate the process of creating, testing, and managing your own templates using partials, variables, SASS, and asset management.
Postmark includes a variety of pre-built and well-tested templates to make getting started easier. They include Welcome emails, Password reset, Receipts, Invoices, and more.
The Settings tab lets you modify the server’s general, outbound, and inbound settings. This is where you can change the server’s name, color, webhook URLs, open tracking, and link tracking settings.
The main server settings let you rename your server as well as change the server's representative color.
The Credentials tab shows you your server API token(s) and the server’s inbound email address. Use this tab to create/delete server API tokens and access your inbound email address.
The Server credentials tabs provides a unique API token for the server as well as an automatically generated and unique inbound email address.
The Account page is where you can add emergency contacts in case we need to reach you regarding your account and have not heard back from the owner, set up billing notifications, mange your account API tokens, manage your subscription, and other administrative features.
From the account settings, you can add emergency contacts as well as billing notification contacts.
The Users page is where you add and manage users to your account for tasks such as viewing activity for troubleshooting and tracking purposes, managing server settings, creating templates, etc... Use our different roles to effectively manage the security of your account. See our help article on setting permissions for an overview of what options there are and how to control your users’ permissions.
Users and permissions can be managed to allow full or read-only access to individual servers.
You can control whether someone has access to the full account or individual servers, and with each individual server, you can control whether they have full access or read only access.
For more Postmark specific insight on how to get started and get the most out of Postmark, make sure to look through our “Getting Started Guide” or visit our support center where you can easily search all of our documentation from a single place. API docs. Guides. Blog posts. Help docs. Labs projects. You name it. We probably have something that can help you out.
Once you've switched to Postmark, you may want to become familiar with our status page and status API. We believe deeply in transparency, and we go a step further than just system availability and share our inbox rates and delivery speeds for the five most popular inbox providers. We also offer all of the data via an API so you can monitor us and set up automation in the event something does go wrong.
You now have a solid understanding of how to transition over the core features you need in an ESP from SparkPost to Postmark, including how to send outbound and process inbound email, what APIs and webhooks to use for certain functions, and how to view your email activity and statistics. If you have any questions about where to find a setting or how to use a feature in Postmark, get in touch and we can help!