Set up DMARC and see who's sending email using your brand's domain.
x
Two paper planes. One white and one yellow.

Amazon SES Migration Guide

Everything you need to know about moving from SES to Postmark

Table of Contents

Chapter 1

Introduction#

Key differences between Amazon SES 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 Amazon SES. This guide will detail some of the differences and similarities between SES and Postmark, as well as give some useful tips for migrating to Postmark from SES.

It includes details on differences between the Postmark and SES APIs, sending outbound emails, processing inbound emails, UI differences, and webhooks. For quick reference, we have included tables where possible to equate SES functionality and JSON fields to their comparable functionality and fields in Postmark.

Key differences between SES and Postmark #

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

  • Postmark separates email traffic through Message Streams. Transactional
    and broadcast (bulk) traffic does not mix in Postmark, including IP ranges. Amazon SES has a single stream for transactional and marketing/bulk where all email traffic is sent through the same IP range.
  • There are no list management features available in Postmark. However, you can manage suppression lists and unsubscribes through Postmark, and add unsubscribe links to your emails. Learn more here.
  • You do not need to set up your own logging or perform any additional steps to store sent messages. Successfully sent messages are stored for 45 days in Postmark automatically (including the content and delivery events). Sent messages are available to view using our UI or you can pull them with our REST API.
  • Bounces, unsubscribes, and spam complaints are also stored indefinitely within the Suppressions tab, for troubleshooting purposes.
  • Postmark's developer plan provides you with 100 emails per month. This is the only free plan and can be used for trying out our service.
  • We do not recommend using dedicated IPs for most senders but do have that option available if you meet certain eligibility requirements as a sender.
  • Postmark does not have a reseller or affiliate program.
  • Postmark does not have sending quotas or maximum sending rates that you have to adhere to or request increases on. You can send as many emails as you need to, when you need to send them.

If you need any support during your migration process, please let us know. Our Customer Success team is here to help.


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 can be thought of as folders you create that group together similar email activity. Each server contains Message Streams to separate your Inbound, Transactional, and Broadcast messages and stats, as well as the server's API token(s) and templates. You can create as many servers as you need, there is no limit.

Some uses of servers are separating different types of emails such as transactional and broadcasts, 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, including IP ranges. This is a longstanding best practice for ensuring optimal deliverability. Transactional message streams are for messages that are usually unique and triggered by a user action like a welcome email, password reset, or receipts. Transactional streams do not support bulk messages. Broadcast message streams are for bulk messages that sent to multiple recipients at once like announcements, newsletters, or other application email.

Sender Signatures and Verified Domains #

In Postmark you need to have 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.

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.

Tip: You can use any sender signature/verified domain for sending with any Postmark server, from any location. You do not need to verify the same domain multiple times for using with different AWS regions.


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 TypeSES API Action(s)Postmark API Name
Sending EmailsSendEmail, SendRawEmailEmail
Managing BouncesSendBounceBounce
Managing TemplatesCreateTemplate, DeleteTemplate, GetTemplate, ListTemplates, SendTemplatedEmail, UpdateTemplateTemplates
Managing Sending SettingsCreateConfigurationSet, CreateConfigurationSetEventDestination, DeleteConfigurationSet, DeleteConfigurationSetEventDestination, ListConfigurationSets, UpdateConfigurationSetEventDestinationServer
Managing ServersServers
Managing Message StreamsMessage Streams
Managing Sent EmailsMessages
Managing Inbound EmailsMessages
Managing Inbound Processing SettingsCreateReceiptFilter, CreateReceiptRule, CreateReceiptRuleSet, DeleteReceiptFilter, DeleteReceiptRule, DeleteReceiptRuleSet, DescribeActiveReceiptRuleSet, DescribeReceiptRule, DescribeReceiptRuleSet, ListReceiptFilters, ListReceiptRuleSets, ReorderReceiptRuleSet, SetActiveReceiptRuleSet, SetReceiptRulePosition, UpdateReceiptRuleServer
Manage email domains you can send fromGetIdentityDkimAttributes, GetIdentityMailFromDomainAttributes, SetIdentityDkimEnabled, SetIdentityMailFromDomain, VerifyDomainDkim, VerifyDomainIdentityDomains
Manage email addresses you can send fromDeleteIdentity, VerifyEmail, ListIdentities, GetIdentityVerificationAttributesSender Signatures
Sending StatisticsGetSendStatisticsStats
Mange WebhooksWebhooks

Tip: Rather than a single API that has multiple ‘actions’, Postmark has multiple APIs with different endpoints, which are used for the specific operations you need to make.

API Libraries #

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

API Libraries Map #

Language/FrameworkSES SDKPostmark Official LibraryPostmark Community Library
C#C# SDK, .NET SDKPostmark .NET
Classic ASPSimple Classic ASP Class for Postmark
ClojureClojure Binding for Postmark API
ColdFusioncfPostmarkapp, ColdFusion component, A replacement for the stock Coldbox MailService Plugin
DrupalDrupal Library
ElixirEx Postmark
ErlangErlang Library
GoGo SDKPostmark Golang, Postmark.go
GrailsGrails plugin
GruntPostmark Grunt
HaskellHaskell Library
JavaJava SDKPostmark JavaJava library, Spring's MailSender compatible implementation
LaravelLaravel Plugin
MagentoMagento Extension
NodeJSPostmark.js
Objective-CStandalone Objective-C Class
PerlPerl WWW::Postmark
Pharo SmalltalkPharo Smalltalk, Postmark
PHPPHP SDKPostmark PHPPHP Community Libraries
PowerShellPostmark PowerShell Snap-in
PythonPython SDKPostmarker, pystmark, Postmark Python library
RubyRuby SDKPostmark Ruby
RailsPostmark Rails
ScalaScala Client, Scala Library
WordPress PluginPostmark for WordPress
ZendPostmark drop-in replacement for Zend

Chapter 4

Sending Outbound Emails#

Start sending through Postmark

Similarities to SES #

  • Sending via an API and/or SMTP supported
  • Like SES’ success@simulator.amazonses.com test address, you can also send test emails to Postmark’s sink email address, test@blackhole.postmarkapp.com. Postmark also offers a Sandbox mode, comparable to the Mailbox Simulator.
  • Entire domains can be verified for sending using DKIM records.
  • The maximum message size, including attachments, is 10 MB with both SES and Postmark.
  • Postmark messages can also have up to 50 recipients in a single message, which is the same as SES.

Differences from SES #

  • Postmark does not have sending quotas or maximum sending rates that you have to adhere to or request increases on.
  • You only need to verify a domain or individual email address for sending with Postmark once, whereas with SES you may be used to verifying the same domain multiple times for each AWS region.
  • There are only two SMTP endpoints for Postmark (One for Transactional, one for Broadcasts), unlike SES, which has three different endpoints for different regions. We will automatically route you to the nearest data center when connecting to smtp.postmarkapp.com.
  • SES allows sending messages using a raw MIME format, which is not supported by Postmark. Emails must be sent through Postmark’s API or SMTP using the MIME components (To, From, Subject, etc…).
  • You must use a Server API Token for both your SMTP username and password when using SMTP with Postmark. You can generate up to 3 API Tokens per Server.
  • Templates are not supported with Postmark’s SMTP service and can only be used with the Postmark Templates API.
  • In addition to adding a tag, you can also add custom metadata to messages sent using Postmark.

Verifying Email Addresses and Domains for Sending #

Similar to SES, domains in Postmark can be verified for sending using a DKIM record added to your domain’s DNS. You only need to use a DKIM record to verify a domain in Postmark, similar to SES. Head over to our help article on verifying a domain for sending with Postmark for more detailed steps.

Once you add DKIM for a domain in Postmark, it is applied automatically to all emails sent from that domain, without an option to disable it at the message or sending email address level. Similar to SES, we will also periodically check your DNS to make sure the TXT record for DKIM is still in place. We do not completely remove domains from your account if we do not detect it, though. If we find the DKIM record is not present, we will pause signing with DKIM and send you an email notification so you are aware and can get the record back in your DNS.

With Postmark you only need to verify a domain once, you do not need to complete the process for multiple regions like you do with SES. Sub-domains are also not automatically verified in Postmark once you verify a root domain. Each sub-domain you want to send from will also need to be added to your Postmark account and verified with DKIM records.

Postmark, like SES, 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 a DKIM record to send with that email address, though we always recommend setting up DKIM and a custom Return-Path 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 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: Port 2587 is not supported with Postmark SMTP. If you were using that port with SES, 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 or throttled by ISPs.

SettingSESPostmark
SMTP Endpointemail-smtp.us-east-1.amazonaws.com, email-smtp.us-west-2.amazonaws.com, email-smtp.eu-west-1.amazonaws.comsmtp.postmarkapp.com, smtp-broadcasts.postmarkapp.com
Port25, 587, or 258725, 587, or 2525
UsernameSES SMTP Credentials (Username)Server API Token
PasswordSES SMTP Credentials (Password)Server API Token
AuthenticationSSL, TLSPlain text (unencrypted), CRAM-MD5, TLS

If you need to whitelist the IPs you connect to Postmark SMTP with, you can find our SMTP Endpoints to whitelist here.

Similar to SES, some SMTP sending options are specified in SMTP headers when using Postmark.

OptionSESPostmark
Click TrackingX-SES-CONFIGURATION-SETX-PM-TrackLinks header
Open TrackingX-SES-CONFIGURATION-SETX-PM-TrackOpens header
TagsX-SES-MESSAGE-TAGSX-PM-Tag header
Metadata
X-PM-Metadata- headers

See our SMTP User Guide to learn more about sending through Postmark via SMTP.

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, similar to the X-Amzn-Authorization header in SES. As a reminder, you can get your server API token from a server’s API Tokens tab.

Outbound Sending API JSON Fields Map #

FieldSESPostmark
From email addressSourceFrom
From nameSourceFrom
ReplyTo email addressReplyToAddressesReplyTo
ReplyTo nameReplyToAddressesReplyTo
To email addresses(es)DestinationTo *
To nameDestinationTo *
Cc email addresses(es)DestinationCc *
Cc nameDestinationCc *
Bcc email address(es)DestinationBcc *
Bcc nameDestinationBcc *
Subject lineMessageSubject
Custom TagTagsTag
Metadata
Metadata
HMTL BodyMessage → Body → HTMLHtmlBody
Text BodyMessage → Body → TextTextBody
Custom HeadersRawMessage → DataHeaders
Template IdentifierTemplateTemplateId
Data to use in TemplateTemplateDataTemplateModel
Open TrackingConfigurationSetNameTrackOpens
Link TrackingConfigurationSetNameTrackLinks
AttachmentsRawMessage → Data (SendRawEmail Action Only)Attachments
Inline attachmentsRawMessage → Data (SendRawEmail Action Only)Attachments
Send API Request without sending email
Use POSTMARK_API_TEST for your X-Postmark-Server-Token header value

Click here to learn more about sending through Postmark via our API.

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 official and community API libraries.


Chapter 5

Processing Inbound Email#

Migrating your inbound email handling

How inbound email processing is implemented is very different between Postmark and SES. If you were using inbound processing with SES and will be using Postmark for processing email once you migrate, this section is an important read.

Similarities #

  • Both SES and Postmark feature the ability to process emails sent to an entire sub-domain or domain using MX records.
  • Custom settings for blocking incoming email are available in both SES and Postmark.

Differences #

  • Postmark’s inbound message size limit is 35 MB compared to SES's limit of 10 MB.
  • Postmark does not require you to take any actions to preserve inbound messages. We will automatically keep them in your Activity and available through the API for 45 days as standard.
  • Specific actions based on the recipient (Receipt Rules / Receipt Rule Sets in SES) cannot be set in Postmark. Your code for your inbound webhook URL would need to take care of any additional processing tailored for specific recipients.
  • It is not possible to block inbound messages by their source IP. Instead, Postmark provides inbound message blocking based on the sender's email address, sender's domain, and SpamAssassin spam score.
  • 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 receives inbound emails, converts them to JSON, and POSTs them to your inbound webhook URL, rather than processing them using Receipt Rules that route the messages to an S3 bucket, Amazon WorkMail, or SNS notification.
  • 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.
  • In the event your inbound webhook URL fails to send a successful response to an inbound message, a total of 10 retries will be made by Postmark, 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.
  • Headers cannot be added to inbound messages in Postmark.

Inbound Processing JSON Fields in Postmark #

Email PropertySESPostmark
Message Identifier for UI/APImail→messageIdMessageID
HTML BodycontentHtmlBody
Plain Text BodycontentTextBody
Subject Linemail→commonHeadersSubject
To Email Addressreceipt→recipientsTo, ToFull → Email
From Email Addressmail→sourceFrom, FromFull → Email
Cc Email Addressreceipt→recipientsCc, CcFull → Email
Bcc Email Addressreceipt→recipientsBcc, BccFull → Email
ReplyTo Email Addressmail→headersReplyTo
Datemail→timestampDate
Attachment Filename(s)mail→contentAttachments → Name
Attachment Contentmail→contentAttachments → Content
Attachment Content-Typemail→contentAttachments → ContentType
Attachment Sizemail→contentAttachments → ContentLength
Attachment Content-IDmail→contentAttachments → ContentID
Number of Attachmentsmail→contentAttachments (array size)
Headersmail→headers, mail→commonHeadersHeaders
TagTag
Mailbox HashMailboxHash
Stripped Text ReplyStrippedTextReply
DKIMreceipt→dkimVerdict→statusHeaders → DKIM-Signature
SPFreceipt→spfVerdict→statusHeaders → Received-SPF
SpamAssasssin ScoreHeaders
SpamAssassin ReportHeaders → X-Spam-Tests
SpamAssassin VersionHeaders → X-Spam-Checker-Version
Identified as Spamreceipt→spamVerdict→statusHeaders → X-Spam-Status
Identified as containing a virusreceipt→virusVerdict→status
Processing Timereceipt→processingTimeMillis
Inbound Spam Filtering Settings
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

Somewhat similar to Event Publishing using Configuration Sets in SES, Postmark allows you to receive notifications as JSON POSTs to URLs you specify when specific events occur using webhooks. With Postmark, you are no longer forced to use CloudWatch, Amazon SNS, or Kinesis Firehose to receive events, since you can use any URL for receiving webhook events with Postmark. Postmark webhooks are sent in real-time as message-level events occur, meaning each POST to your webhook URL is for a specific message. Postmark has unique webhooks for each event type (Open, Click, Delivery, Bounce, Inbound message, Spam Complaint, and Subscription Change) rather than a single source that specifies the event with an event type parameter.

Webhook Types Map #

Event TypeSESPostmark
DeliveryeventType → deliveryDelivery webhook
BounceseventType → bounceBounce webhook
Spam ComplaintseventType → complaintBounce webhook
Open trackingeventType → openOpen tracking webhook
Click trackingeventType → click
Click webhook
Inbound ProcessingInbound webhook
Subscription ChangeSubscription change webhook


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 #

ParameterSESPostmark
Recipient’s email addressmail → recipientRecipient
Tag/MetadataTag
Delivery timemail → timestampDeliveredAt
Receiving mail server’s responsemail → smtpResponseDetails
Email Identifiermail → messageIdMessageID
Email Source (Server in Postmark, Domain/Address in SES)mail → sourceArnServerID
MIME Headersmail → headers

Bounce webhook #

Postmark includes some additional information for bounce events that is not present in the SES event notification you should be aware of:

  • The Postmark server used to send the email
  • 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 by default (and retention can be customized from 7 to 365 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 #

ParameterSESPostmark
Bounced recipient’s email addressBounce → bouncedRecipients → emailAddressEmail
From email addressmail → commonHeadersFrom
Email subject linemail → commonHeadersSubject
Bounce timestampBounce → timestampBouncedAt
Tag/MetadataTag
Unique bounce identifierBounce → feedbackIdID
Bounce TypeBounce → bounceTypeType
Email Identifiermail → messageIdMessageID
Server used to send the emailServerID
SMTP Status code
Bounce detailsBounce → statusDetails
Description of bounceDescription
MIME Headersmail → commonHeaders
Whether the recipient’s email is deactivatedInactive
Whether the recipient’s email address can be reactivatedCanActivate
If a message dump is availableDumpAvailable

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.

Spam Complaint webhook #

Postmark will send a webhook if a recipient clicks on "Spam" or "Junk" from their mailbox. This is similar to the Complaints event in SES.

Spam complaint webhook fields map #

ParameterSESPostmark
Type of eventeventTypeRecordType
Event identifierbounce → feedbackIdID
Recipient’s email addresscomplaint → complainedRecipientsRecipient
Sender addressmail → commonHeaders From
Tag/Categorymail → tagsTag
Timestamp of when spam complaint occurredcomplaint → timestampBouncedAt
Email Identifiermail → messageIdMessageID
Server used to send the email
ServerID
Custom metadata
Metadata
Whether the recipient’s email is deactivatedInactive
Whether the recipient’s email address can be reactivatedCanActivate
If a message dump is availableDumpAvailable
Stream used to send the emailMessageStream

Subscription change webhook #

This is a unique to Postmark webhook that SES doesn't offer an equivalent to. A subscription change is recorded when an email address is added or removed from a Message Stream's Suppression list. An email address is added to a Suppression List after a Hard Bounce, Spam Complaint, or Manual Suppression.

Subscription change webhook fields map
#

ParameterPostmark
Recipient’s email addressRecipient
Sender addressFrom
Tag/CategoryTag
Timestamp of when suppression occureBouncedAt
Email IdentifierMessageID
Server used to send the emailServerID
Custom metadataMetadata
Type of suppressionSuppressionReason
Whether the recipient’s email is deactivatedSuppressSending
Stream used to send the emailMessageStream
Source of SuppressionOrigin


#

Open Tracking webhook #

You will notice some open tracking information available with the Postmark open tracking webhook that does not exist in SES Open objects:

  • Whether this open event was the first time the email was opened
  • Country, Region, and City where the email was opened
  • Platform, Email client, and OS the recipient was using when they opened the email
ParameterSESPostmark
Recipient’s email addressmail → recipientRecipient
Tag/MetadataTag
Timestamp of when open occurredOpen → timestampReceivedAt
Email Identifiermail → messageIdMessageID
User AgentOpen → userAgentUserAgent
IP Address of recipient when they opened the emailOpen → ipAddressGeo → IP
Country where email was openedGeo → Country, Geo → CountryISOCode
Region where email was openedGeo → Region, Geo → RegionISOCode
City where email was openedGeo → City
PlatformPlatform
Email client used to open the emailClient
OS recipient was usingOS
Whether this was the first open for this emailFirstOpen

Click Tracking webhook #

You will notice some click tracking information easily available with the Postmark click tracking webhook that requires parsing the User Agent field in SES’ Click events:

  • The platform the recipient was using (mobile, desktop, webmail)
  • The geographic location the recipient was in, including the region, country, city, zip code, and coordinates
  • The email client or browser and version the recipient was using when they clicked a link in the email

Click Tracking Webhook Fields Map #

ParameterSESPostmark
Recipient’s email addressdestinationRecipient
Tag/Categorymail → tags
Tag
Timestamp of when click occurredclick → timestampReceivedAt
Email Identifiermail → messageIdMessageID
User Agentclick → userAgentUserAgent
IP Address of recipient when they clicked the emailclick → ipAddressGeo → IP
PlatformPlatform
Email client used when a link was clickedClient
Geographic LocationGeo
Click location (HTML or Plain Text email part)ClickLocation
URL that was clickedlink
OriginalLink

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 Transactional, Inbound, and Broadcast Message Streams, templates, and API 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 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 page for a message stream is similar to the aggregate metrics you can view with SES, though each stream has its own statistics page, rather than an overall account view. Included in the statistics area is the sending volume, processed (inbound) volume, link tracking metrics (if enabled), open tracking metrics (if enabled), and bounce metrics.

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 the detailed statistics for a server report. Emails sent, opened, and clicked filterable by date and tags.
Email activity can be filtered by date and tag to show the levels of engagement for various groups of emails or all emails.

Activity #

Coming over from SES, you might not be used to being able to quickly view sent and received messages in a friendly UI, without having to do any additional setup. With Postmark, you can quickly search and view your sent and processed messages without any extra effort or development work. Postmark will automatically store and display all successfully sent messages for 45 days as standard (and retention can be customized from 7 to 365 days), and will store all bounces indefinitely.

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. Use the search bar to look for emails by subject or email address.

To see details for a particular event in a Message Stream, click on the event. Some events included 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 by default.
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-tested 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, turn on/off SMTP sending for the Server, and turn on/off Link and Open Tracking. 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, SMTP settings, link and open tracking, 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, turn on SMTP for the server, and turn on/off Open/Link tracking..

API Tokens #

The 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. A Server can have up to 3 active API Tokens.

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:

  • Require all account users to use 2FA.
  • 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 your bill and billing details.
Screenshot of account settings like requiring 2FA, emergency contacts, and billing notification contacts.
From the account settings, you can require 2FA, add emergency contacts as well as billing notification contacts.

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 through our contact form or via Twitter (@postmarkapp).

Welcome aboard #

You now have a solid understanding of how to transition over the core features you need in an ESP and how to move from Amazon SES 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…

Contact us