Great deliverability without upgrading to dedicated IP. Some providers say it can’t be done. We disagree.
x
Two paper planes. One white and one yellow.

SparkPost Migration Guide

Everything you need to know about moving from SparkPost

Table of Contents

Chapter 1

Introduction#

Key differences between SparkPost and Postmark

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.

Key differences between SparkPost and Postmark #

These are some important differences to be aware of when moving over to Postmark from SparkPost:

  • Postmark separates email traffic through Message Streams. Transactional and broadcast (bulk) traffic does not mix in Postmark, including IP ranges. SparkPost has a single stream for transactional and marketing/bulk where all email traffic is sent through the same IP range.
  • Postmark does not have list management features. Instead, you can manage suppression lists and unsubscribes through Postmark, and add 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

Let our team guide your migration process. Schedule a call with our success team.


Chapter 2

Postmark Concepts#

Important concepts to learn when moving over to Postmark

There are a couple of important concepts to learn when moving over to Postmark: Servers, Message Streams,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.

Servers #

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.

Message Streams #

Postmark separates email traffic through Message Streams, meaning that transactional and broadcast traffic never intersects in Postmark. Transactional message streams are for messages that are usually unique and triggered by a user action like a password reset, opted-into weekly digest, or receipts. Transactional streams do not support broadcast messages. Broadcast message streams are for bulk messages that sent to multiple recipients at once like announcements, newsletters, or other application emails.

Sender Signatures and Verified Domains #

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.


Chapter 3

APIs#

How the Postmark API works

A note on API tokens in Postmark #

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.

Check out our help article on the different API Tokens in Postmark for more information.

APIs Map #

API TypeSparkPost API NamePostmark API Name
Sending EmailsSMTP APIEmail
Managing BouncesEvents API
Bounce
Managing TemplatesTemplatesTemplates
Managing Sending SettingsSending DomainsServer
Managing ServersSubaccountsServers
Managing Sent EmailsEvents API
Messages
Managing Inbound Emails
Messages
Manage email domains you can send fromInbound DomainsDomains
Manage email addresses you can send fromSending DomainsSender Signatures
Sending StatisticsMetricsStats
Suppression ListSuppression ListSuppressions
Managing IP PoolsIP Pools

A/B Testing

A/B Testing

Recipient Validation
Recipient Validation
Data Privacy
Data Privacy API
Reusable Content
Snippets

API Libraries #

In addition to the official libraries offered by Postmark, we also include community submitted libraries for additional language/framework options.

Language/FrameworkSparkPost Official LibraryPostmark Official LibraryPostmark Community Library
C#SparkPost C#
Postmark .NET
Classic ASPSimple Classic ASP Class for Postmark
ClojureClojure Binding for Postmark API
ColdFusionA ColdFusion wrapper written to interact with the Postmark API, Coldfusion component
Craft Plugin
Postmark Craft plugin
DjangoAnymail: Django email backends for Mailgun, Mailjet, Postmark, SendGrid, SparkPost and more
DrupalDrupal Library
ElixirSparkPost ElixirSwoosh
ErlangErlang Library
GoSparkPost GoPostmark Golang, Postmark.go
GrailsGrails plugin
GruntPostmark Grunt
HaskellHaskell Library
JavaSparkPost JavaPostmark JavaJava library, Spring's MailSender compatible implementation
LaravelLaravel Plugin
MagentoMagento Extension
NodeJSSparkPost NodePostmark.jsNode Email Templates
Objective-CStandalone Objective-C Class
PerlPerl WWW::Postmark
Pharo SmalltalkPharo Smalltalk, Postmark
PHPSparkPost PHPPostmark PHPPHP Community Libraries
Postmark CLI
Postmark CLI
PowerShellPostmark PowerShell Snap-in
PythonSparkPost PythonPostmarker, pystmark, Postmark Python library
RubyPostmark Ruby
RailsPostmark Rails
ScalaScala Client, Scala Library
SwiftSwift Postmark
WordPress PluginPostmark for WordPress
ZendPostmark drop-in replacement for Zend

Chapter 4

Sending Outbound Emails#

Start sending through Postmark

Similarities to SparkPost #

  • Sending via a REST API and/or SMTP supported
  • Like SparkPost’s sink.sparkpostmail.com domain, you can also send test emails to Postmark’s sink email address, test@blackhole.postmarkapp.com. Alongside this, Postmark also offers a Sandbox mode.
  • Entire domains can be verified for sending using DKIM and SPF records
  • Both SparkPost and Postmark support adding metadata to messages.

Differences from SparkPost #

  • 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…

Configuration for Sending via SMTP #

There are two ways that you can send with SMTP, depending on what your SMTP client offers. The only difference between them is the configuration. ​

You can use the unique API Token for your server (which acts as both a username and password) and a Header to specify the message stream you're sending through. If a header is not specified, Postmark will send through the default transactional stream.

If you don't have an option to add a custom header during the SMTP send, you can instead use an SMTP Token. An SMTP Token consists of an Access Key (which acts as a username) and a Secret Key (which acts as a password).

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.

SettingsSparkPostPostmark
SMTP Endpoint for Transactional
smtp.sparkpostmail.comsmtp.postmarkapp.com
SMTP Endpoint for Broadcasts
smtp.sparkpostmail.comsmtp-broadcasts.postmarkapp.com
SMTP Stream ID Header
X-PM-Message-Stream: (Stream ID)
Port587 or 252525, 587, or 2525
UsernameSMTP_injectionServer API Token
PasswordAPI KeyServer API Token
AuthenticationTLS (STARTTLS)Plain text (unencrypted), CRAM-MD5, TLS

If you need to whitelist the IPs you connect to Postmark SMTP with, whitelist the following ranges:

  • 147.75.195.176/30 [147.75.195.176 - 147.75.195.179]
  • 147.75.202.84/30 [147.75.202.84 - 147.75.202.87]
  • 147.75.205.84/30 [147.75.205.84 - 147.75.205.87]

You can also view the help doc for the full Postmark IP list.

Sending via API #

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 API Tokens tab.

To send through a particular Message Stream within your server when using API, you'll need to add an additional "MessageStream" parameter at the time of sending. This is the Stream ID. If no MessageStream is specified, messages will be sent through the Default Transactional Stream.

Outbound Sending API JSON Fields Map

FieldSparkPostPostmark
From email address(es)content → from → emailFrom
From namecontent → from → emailFrom
ReplyTo email addresscontent → reply_toReplyTo
ReplyTo namecontent → reply_toReplyTo
To email address(es)recipientsTo *
To namerecipientsTo *
Cc email address(es)ccCc *
Cc nameccCc *
Bcc email address(es)bccBcc *
Bcc namebccBcc *
Archive Addressesarchive
MetadatametadataMetadata
Subject linecontent → subjectSubject
Custom Tagrecipients → tagsTag
HTML Bodycontent → htmlHtmlBody
Text Bodycontent → textTextBody
Custom Headerscontent → headersHeaders
Template Identifiercontent → template_idTemplateId
Data to use in Templatesubstitution_dataTemplateModel
Open Trackingoptions → open_trackingTrackOpens
Link Trackingoptions → click_trackingTrackLinks
Attachmentscontent → attachmentsAttachments
Inline Attachmentscontent → inline_imagesAttachments
Send At Timeoptions → start_time
Send API Request without sending emailoptions → sandboxUse 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 out our official and community API libraries.


Chapter 5

Processing Inbound Email#

Migrating your inbound email handling

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.

Similarities #

  • 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)

Differences #

  • 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.
  • With SparkPost, attachments are must be extracted from the base64-encoded email content whereas Postmark will send base64-encoded attachments as additional attributes directly in the JSON payload.
  • You can use a wildcard in your MX record to have all sub-domains of your domain point to Postmark for inbound processing.
  • 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.


Inbound Processing JSON Fields Map #

Email Property SparkPostPostmark
Message Identifier for UI/API headers →Message-ID MessageID
HTML Body content → html HtmlBody
Plain Text Body content → text TextBody
Subject Line content → subject Subject
To Email Address content → tofriendly_fromTo, ToFull → Email
From Email Address friendly_from From, FromFull → Email
Cc Email Address content → cc Cc, CcFull → Email
Bcc Email Address Bcc, BccFull → Email
ReplyTo Email Address ReplyTo
Date headers → date Date
Attachment Filename(s) content → email_rfc822 → attachments Attachments → Name
Attachment Content content → email_rfc822 → attachments Attachments → Content
Attachment Content-Type content → email_rfc822 → attachments Attachments → ContentType
Attachment Size content → email_rfc822 → attachments Attachments → ContentLength
Number of Attachments content → email_rfc822 → attachments Attachments (array size)
Headers content →headers Headers
Tag Tag
Mailbox Hash MailboxHash
Stripped Text Reply StrippedTextReply
Sender’s IP Address
DKIM headers → DKIM-Signature Headers → DKIM-Signature
SPF headers → Received-SPF Headers → Received-SPF
SpamAssasssin Score
Headers
SpamAssassin Report
Headers → X-Spam-Tests
SpamAssassin Version Headers → X-Spam-Checker-Version
Character Sets
Identified as Spam Headers → X-Spam-Status
Raw MIME Contentcontent → email_rfc822

Inbound Spam Filtering #

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).

A screenshot of the slider for the SpamAssassin threshold as well as a text input field for adding rules for filtering 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.


Chapter 6

Webhooks#

Migrating your webhook handlers to Postmark

Both SparkPost and Postmark allow you to receive notifications as JSON POSTs to URLs you specify when specific events occur.

Webhook Types Map #

Event TypeSparkPostPostmark
Inbound ProcessingRelay events webhookInbound webhook
DeliveryDelivery webhook
Delivery webhook
BouncesBounce webhook
Bounce webhook
Spam ComplaintsSpam complaint webhook
Spam complaint webhook
Open trackingOpens webhookOpen tracking webhook
Click trackingClicks webhook
Click webhook
UnsubscribeUnsubscribe webhook
Subscription Change webhook
ProcessedInjection
AMP opens/clicks
AMP events
A/B test notifications
A/B test completion/

cancellation

There are some values provided by SparkPost's Event Webhooks that do not have comparable fields in Postmark’s webhooks, such as:

  • Whether TLS was used when sending the email
  • IP address used to send the email
  • If there was a certificate error on the receiving mail server when the email was sent
  • The SMTP message identifier for the sent email. Postmark includes the Postmark MessageID for identifying the email.
  • AMP opens/clicks and A/B test notifications. Postmark does not support either of these features.
  • SMS support

Delivery webhook #

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.

Delivery Webhook Fields Map #

ParameterSparkPostPostmark
Recipient’s email addressrcpt_to, raw_rcpt_to, recipient_domain
Recipient
Tag/Category (Message tags in Postmark, Recipient tags in SparkPost)rcpt_tagsTag
Recipient Type (To, Cc, Bcc)rcpt_type
Delivery timetimestampDeliveredAt
Receiving mail server’s response
Details
Email Identifiermessage_idMessageID
Server used to send the email (Server in Postmark, Subaccount in SparkPost)subaccount_idServerID
SubjectsubjectMessageID → Email → Subject
IP address used for sendingsending_ip
Recipient Servier IPip_address
IP poolip_pool
Campaign Identifiercampaign_id
Customer Identifiercustomer_id
Delivery Methoddelv_method
Device Token
device_token
Event IDevent_id
Friendly Fromfriendly_fromMessageID → Email → From
Message Frommsg_from
Message Sizemsg_size
Number of Retriesnum_retries
Queue Timequeue_time
Routing Domainrouting_domain
Template IDtemplate_id
Template Versiontemplate_version
Webhook Type
typeRecordType
Metadatarcpt_metaMetadata
Message Stream
MessageStream
Tracking Enabled
click_tracking/open_tracking
Initial Pixel
initial_pixel
Processedinjection_time
TLS Specification
outbound_tls
Hashed Recipient
rcpt_hash
Received Method
recv_method
Scheduled time
scheduled_time
Transmissiontransmission_id
Transmission Type
transactional

Bounce webhook #

Postmark includes some additional information for bounce events that are 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

Bounce Webhook Fields Map #

ParameterSparkPostPostmark
Recipient’s email addressrcpt_to, raw_rcpt_to, recipient_domain
Email
Recipient Type (To, Cc, Bcc)rcpt_type
From email addressfriendly_from, msg_fromFrom
Email subject linesubjectSubject
Bounce timestamptimestampBouncedAt
Tag/Category (Message tags in Postmark, Recipient tags in SparkPost)rcpt_tags
Tag
Unique bounce identifierevent_idID
Bounce Code
bounce_class

TypeCode
Bounce Type
Type/Name
Email Identifiermessage_idMessageID
Server used to send the email (Server in Postmark, Subaccount in SparkPost)subaccount_idServerID
Error Codeerror_code


Bounce detailsraw_reason

Details
Description of bouncereason

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
Campaign IDcampaign_id
Customer IDcustomer_id
Delivery Methoddelv_method
Device Token
device_token
Hashed Recipient
rcpt_hash
Initial Pixel
initial_pixel
Originating IP Addressip_address
Originating IP Poolip_pool
Processedinjection_time
Message Sizemsg_size
Metadatarcpt_metaMetadata
Message Stream
MessageStream
Number of Retries
num_retries
Routing Domainrouting_domain
Record Type
TypeRecordType
Received Method
recv_method
Sending IPsending_ip
Scheduled Time
scheduled_time
Template IDtemplate_id
Template Versiontemplate_version
Transmission IDtransmission_id
Transmission Type
Transactional
Tracking Enabled
click_tracking/open_tracking
Unique bounce identifierID

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.

Rebound #

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.

Screenshot of rebound JavaScript snippet
You can even customize this notifications appearance and messaging without writing any code.

Open Tracking webhook #

Open Tracking Webhook Fields Map #

ParameterSparkPostPostmark
Recipient’s email addressrcpt_to, raw_rcpt_to, recipient_domain
Recipient
Tag/Category (Message tags in Postmark, Recipient tags in SparkPost)rcpt_tags
Tag
Recipient Type (To, Cc, Bcc)rcpt_type
Timestamp of when open occurredtimestamp
ReceivedAt
Email Identifiermessage_id
MessageID
User Agentuser_agent
UserAgent
IP Address of recipient when they opened the emailGeo → IP
Platformuser_agent
Platform
Email client used to open the emailuser_agentClient
Geographic Locationgeo_ipGeo
Whether this was the first open for this emailinitial_pixelFirstOpen
Event TypetypeRecordType/Type/Name
Campaign IDcampaign_id
Customer IDcustomer_id
Delivery Methoddelv_method
Event IDevent_id
Friendly Fromfriendly_from
Hashed Recipient
rcpt_hash
IP address to which the message was deliveredip_address
IP Poolip_pool
Message Frommsg_from
Message Sizemsg_size
Message Stream
MessageStream
Metadatarcpt_metaMetadata
Number of Retriesnum_retries
Operating System
user_agent
OS
Processedinjection_time
Queue Timequeue_time
Routing Domainrouting_domain
Sending IPsending_ip
Scheduled Time
scheduled_time
Subaccount IDsubaccount_id
Subjectsubject
Template IDtemplate_id
Template Versiontemplate_version
Transmission IDtransmission_id
Transmission Typetransactional
Tracking Enabled
click_tracking/open_tracking

Click Tracking webhook #

Click Tracking Webhook Fields Map #

ParameterSparkPostPostmark
Recipient’s email addressrcpt_to, raw_rcpt_to, recipient_domain
Recipient
Tag/Categoryrcpt_tags
Tag
Recipient Type (To, Cc, Bcc)rcpt_type
Timestamp of when click occurredtimestampReceivedAt
Email Identifiermessage_idMessageID
User Agentuser_agentUserAgent
IP Address of recipient when they clicked the emailuser_agentGeo → IP
Operating System
user_agentOS
Platformuser_agent
Platform
Email client used when a link was clickeduser_agent
Client
Geographic Locationgeo_ipGeo
Click location (HTML or Plain Text email part)ClickLocation
URL that was clickedtarget_link_urlOriginalLink
URL name
target_link_name
Event TypetypeRecordType
Campaign IDcampaign_id
Customer IDcustomer_id
Delivery Methoddelv_method
Event IDevent_id
Friendly Fromfriendly_from
Hashed Recipient
rcpt_hash
IP address to which the message was deliveredip_address
IP Poolip_pool
Initial Pixel
initial_pixel
Message Frommsg_from
Message Sizemsg_size
Metadatarcpt_metaMetadata
Message Stream
MessageStream
Number of Retriesnum_retries
Processedinjection_time
Queue Timequeue_time
Routing Domainrouting_domain
Sending IPsending_ip
Scheduled Time
scheduled_time
Subaccount IDsubaccount_id
Subjectsubject
Template IDtemplate_id
Template Versiontemplate_version
Tracking Enabled
click_tracking/open_tracking
Transmission IDtransmission_id
Transmission Type
transmission_type

Spam Complaint webhook #

ParameterSparkPostPostmark
Recipient's email address
rcpt_to, raw_rcpt_to,

recipient_domain
Email
Tag/Categoryrcpt_tagsTag
Recipient Type (To, Cc, Bcc)rcpt_type
Timestamp of when Spam Complaint
occurred
timestampBouncedAt
Email Identifiermessage_idMessageID
Event TypetypeRecordType
Bounce CodeTypeCode
Campaign IDcampaign_id
Customer IDcustomer_id
Delivery Methoddelv_method
Friendly Fromfriendly_from
Feedback Type
fbtype
Hashed Recipient
rcpt_hash
IP address to which the message
was delivered
ip_address
IP Pool
ip_pool
Message Frommsg_from
Message Sizemsg_size
Metadatarcpt_metaMetadata
Message Stream
Message Stream
Number of Retriesnum_retries
Processedinjection_time
Queue Time
queue_time
Reported By
Email
Report To
Routing Domain
routing_domain
Sending IP
sending_ip
SubaccountIDsubaccount_idServerID
Scheduled Time
scheduled_time
Subjectsubject
Template ID
template_id
Template Version
template_version
Transmission IDtransmission_id
Transmission Type
transmission_type
Unique bounce identifierID
Spam Complaint Details
Details
Spam Complaint Description
Description
Whether the recipient’s email is
deactivated
Inactive
Whether the recipient’s email address

can be reactivated
CanActivate
If a message dump is availableDumpAvaliable

Subscription Change webhook #

  • The Subscription Change webhook is similar to SparkPost's Suppression Management.
  • The Subscription Change webhook is triggered when an email address is added or removed from a Message Stream's Suppression list. These event notifications are specific to the following subscription changes: Hard bounces, spam complaints, and manual suppressions.

Subscription Change Webhook Fields Map #

ParameterPostmark
Webhook TypeRecordType
Server used to send the emailServerID
Message StreamMessageStream
MetadataMetadata
Recipient email address connected to
the subscription change
Recipient
Timestamp of the subscription changeChangedAt
Who triggered the subscription change
(Recipient, Customer, Admin)
Origin
Whether the subscription change was a
deactivation or reactivation
SuppressSending
TagTag
Reason address was added to the Suppression

list

SuppressionReason

Chapter 7

UI Overview#

Getting familiar with the Postmark app

When you log into Postmark you are placed in the Servers page, which shows each server you have created. Each server you create has a default transactional message stream for outbound sending and an inbound message stream for processing inbound email. Each server has tabs for Message Streams, Templates, API Tokens, and Settings. Each message stream has tabs for Statistics, Activity, Setup Instructions, and Settings, which are unique for each message stream.

Servers #

Servers let you separate your outbound and inbound message streams, 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.

A screenshot of Postmark's conceptual servers.
You can use servers in Postmark to group logically related email activity by domains, environments, or other factors.

Statistics #

To view detailed statistics and metrics for a server's message streams, locate the server in the servers list or by using the search field. Click on the bar graph icon and select the server's message stream you are interested in to be taken to its overview page.

The statistics tab of a message stream is similar to SparkPost's Reports pages, though each stream has its own statistics page rather than an overall account view like SparkPost. Included in the statistics area for an outbound (transactional or broadcast) stream are the sending volume, link tracking metrics (if enabled), open tracking metrics (if enabled), and bounce metrics. In an inbound stream's Statistics tab you will see the successfully processed and failed inbound volume.

Screenshot of accessing a message stream's statistics.
To view detailed statistics and metrics for a server's message streams, locate the server in the servers list or by using the search field. Click on the bar graph icon and select the server's message stream (inbound or outbound) you are interested in to be taken to its overview page.
Screenshot of a transactional message stream's statistics tab.
Statistics can be filtered by date and tag to show the levels of engagement for various groups of emails or all emails.

Activity #

To see your inbound and outbound activity in a server, select the message stream you are interested in and click on the Activity tab. This area will show a detailed event view of the stream's events, including sent, delivered, open events, spam complaints, bounces, etc... for the outbound streams and inbound processing events for the inbound stream. Use the search bar to look for emails by subject or email address.

To see details for a particular event in a stream, click on the event. Some events included in the outbound streams are sent emails (Processed), 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
Screenshot of an example email activity feed showing emails sent, opened, clicked, bounced, or marked as spam.
The events activity stream will show emails, opens, bounces, clicks, and spam complaints.
Screenshot of the detailed view of an email.
In addition to message events, Postmark stores the full content (both plain text and HTML) of emails for 45 days.
Screenshot of an email with a bounce notification and the option to reactivate.
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.

Templates #

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.

Screenshot of the choice of templates or the option to code your own templates.
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.

Settings #

The Settings tab in a server lets you modify the server’s name and color. It is also where you can delete a server that is no longer being used.

Screenshot of server settings featuring the server name, a color, and the option to delete the server.
The main server settings let you rename your server as well as change the server's representative color.

API TokensThe API Tokens tab shows you your server API token(s). Use this tab to generate and delete server API tokens. Server API Tokens are used for outbound sending, SMTP authentication, and making server level API calls.

Screenshot of example server credentials for the server API.
The Server credentials tabs provides a unique API token for the server.

Managing Account Settings #

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.

Users and Permissions #

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.

Screenshot of the users and permissions list with an owner and an admin showing server-level permissions.
Users and permissions can be managed to allow full or read-only access to individual servers.
Screenshot of advanced user permissions management.
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.

Chapter 8

Conclusion#

It’s time to switch

Dive Deeper #

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.

Status information #

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.

Say hello! #

We love to help. Feel free to reach out via email or through our contact form, or Twitter (@postmarkapp). Or, if you have questions or need advice, you can schedule time directly with Rian, the Postmark product manager.

Welcome aboard #

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!

Still have questions?

  • Abdullah Al-hennawy Abdullah
  • Anita Pericic Anita

Ask us anything! We’re eager to help you with any problem or question you have…

Schedule a call