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

Mailgun Migration Guide

Everything you need to know about moving from Mailgun to Postmark

Table of Contents

Chapter 1

Introduction#

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

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

Key differences between Mailgun and Postmark #

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

  • Postmark separates email traffic through Message Streams. Transactional
    and broadcast (bulk) traffic does not mix in Postmark, including IP ranges.
  • You can manage suppression lists and unsubscribes through Postmark, and add unsubscribe links to your emails. Learn more here.
  • Messages are stored for 45 days in Postmark by standard (including the content), and retention can be customized from 7 to 365 days.
  • All Postmark accounts have all features. There are no differences in features between the different plan options.
  • Postmark works with recurring monthly plans. We do not provide a pay as you go option like Mailgun. We do, however, offer a 100 emails per month developer plan that is free for as long as you need so that you can try 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 an email validation service. You can either continue using Mailgun’s validation endpoints or use a service like kickbox.io, to replace Mailgun’s email validator.
  • Postmark does not have a reseller program.

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 few 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 and within those servers are Message Streams. Servers can be thought of as folders you create that group together similar email activity. Each server has its own activity (inbound, transactional, and broadcasts), 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 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. It is different from Mailgun 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 TypeMailgun API NamePostmark API Name
Sending EmailsMessagesEmail
Managing Suppressions
SuppressionsSuppressions
Managing TemplatesTemplates
Templates
Managing Sending Settings
Server
Managing Servers
Servers
Managing Sent EmailsEventsMessages
Managing Inbound EmailsMessages, EventsMessages
Manage Inbound Processing SettingsRoutes
Manage email domains you can send fromDomains
Domains
Manage email addresses you can send from
Sender Signatures
Sending StatisticsStatsStats
IP Management
IPs/IP Pools

Creating Mailing Lists
Mailing Lists

Email Validation
Email Validation

Inbox Placement Tests
Inbox Placement

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/FrameworkMailgun Official LibraryPostmark Official LibraryPostmark Community Library
C#Postmark .NET
Classic ASPSimple Classic ASP Class for Postmark
ClojureClojure Binding for Postmark API
ColdFusionColdFusion component,A ColdFusion wrapper written to interact with the Postmark API
Craft Plugin
Postmark Craft plugin
DjangoAnymail: Django email backends for Mailgun, Mailjet, Postmark, SendGrid, SparkPost and more
DrupalDrupal Library
ElixirSwoosh
ErlangErlang Library
GoMailgun Go
Postmark Golang, Postmark.go
GrailsGrails plugin
GruntPostmark Grunt
HaskellHaskell Library
JavaPostmark JavaJava library, Spring's MailSender compatible implementation
LaravelLaravel Plugin
MagentoMagento Extension
NodeJSMailgun JS
NodeJSNode Email Templates
Objective-CStandalone Objective-C Class
PerlPerl WWW::Postmark
Pharo SmalltalkPharo Smalltalk, Postmark
PHPMailgun PHPPostmark PHPPHP Community Libraries
Postmark CLI

Postmark CLI
PowerShellPostmark PowerShell Snap-in
PythonPostmarker, pystmark, Postmark Python library
RubyMailgun Ruby GemPostmark Ruby
RailsPostmark Rails
ScalaScala Client, Scala Library
SwiftSwift Postmark
WordPress PluginMailgun WordPress Plugin
Postmark for WordPress
ZendPostmark drop-in replacement for Zend

Chapter 4

Sending Outbound Emails#

Start sending through Postmark

Similarities to Mailgun #

  • Sending via a REST API and/or SMTP supported
  • Like Mailgun’s sandbox domain, you can also send test emails to Postmark’s black hole email address, test@blackhole.postmarkapp.com. Postmark also offers a Sandbox mode.
  • Entire domains can be verified for sending using DKIM and Return-Path records
  • Similar to how Mailgun allows for adding metadata using the v: prefix, you can add metadata to Postmark messages with both our REST API and SMTP services.

Differences from Mailgun #

  • Postmark retains 45 days of full content and message event history as standard, whereas Mailgun only retains 30 days of event history and only retains the full content for rendering for 3 days. On top of that, Postmark’s retention can be customized from 7 to 365 days.
  • Since Postmark only sends your email from high reputation, fully warmed up IP ranges, there is no chance of your sending rate being throttled or queued, which happens when Mailgun is sending from a newly allocated IP.
  • Mailgun allows sending messages using a MIME string through their API, which is not supported by Postmark. Emails must be sent through Postmark’s API using the MIME components (To, From, Subject, etc…)
  • Postmark’s outbound message size limit is 10 MB including attachments, Mailgun’s limit is 25 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 a max of 3 Server API Tokens.
  • 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.

Verifying Email Addresses and Domains for Sending #

Similar to Mailgun, domains in Postmark are verified for sending using DKIM and custom Return-Path 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.

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 custom Return-Path records 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 a DNS Settings page that includes the unique DNS record information for setting up DKIM, 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 465 is not supported with Postmark SMTP. If you were using that port with Mailgun, 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.

SettingMailgunPostmark
SMTP Endpoint for Transactional
smtp.mailgun.orgsmtp.postmarkapp.com
SMTP Endpoint for Broadcasts
smtp.mailgun.orgsmtp-broadcasts.postmarkapp.com
SMTP Stream ID Header

X-PM-Message-Stream: (Stream ID)
Port465 for SSL, 25, 587, or 2525 for unencrypted/TLS25, 587, or 2525
UsernameDomain’s SMTP usernameServer API Token
PasswordDomain’s SMTP passwordServer API Token
AuthenticationUnencrypted, SSL, TLS

If you need to whitelist the IPs you connect to Postmark SMTP with, you can find the full list below under SMTP Endpoints.

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 #

FieldMailgunPostmark
From email address(es)fromFrom
From namefromFrom
ReplyTo email address
ReplyTo
ReplyTo name
ReplyTo
To email addressestoTo *
To nametoTo *
Cc email addressesccCc *
Cc nameccCc *
Bcc email address(es)bccBcc *
Bcc namebccBcc *
Subject linesubjectSubject
Custom Tago:tagTag
Metadatav:prefixMetadata
HMTL BodyhtmlHtmlBody
Text BodytextTextBody
MessageStream
Stream ID
Custom Headersh:X-My-HeaderHeaders
Template Identifier
TemplateId or TemplateAlias
Data to use in Template
TemplateModel
Open Trackingo:tracking-opensTrackOpens
Link Trackingo:tracking-clicksTrackLinks
AttachmentsattachmentAttachments
Inline attachmentsinlineAttachments
Send At Timeo:deliverytime
Send API Request without sending emailo:testmodeUse 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

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

Similarities #

  • Both Mailgun and Postmark feature the ability to process emails sent to an entire sub-domain or domain using MX records.
  • Inbound spam filtering using Spam Assassin is available in both Postmark and Mailgun.

Differences #

  • Postmark's message size limit is 35 MB compared to Mailgun's limit of 25 MB.
  • Postmark does not require you to take a specific store action (store() in Mailgun) to preserve inbound messages. We will automatically keep them in your Activity and available through the API for 45 days as standard.
  • 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 Routes with the data being sent as form data.
  • Postmark does not have an option to receive inbound messages in their raw MIME form. Inbound messages will always be sent to your inbound webhook URL as well-formatted JSON.
  • 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.
  • Mailgun will retry for 8 hours if there is a failure at the following intervals: 10 minutes, 10 minutes, 15 minutes, 30 minutes, 1 hour, 2 hour and 4 hours. With Postmark, a total of 10 retries will be made, 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.

Inbound Processing JSON Fields Map #

Email PropertyMailgunPostmark
Message Identifier for UI/API
MessageID
HTML Bodybody-htmlHtmlBody
Stripped HTML Body (no quotes)stripped-html
Plain Text Bodybody-plainTextBody
Subject LinesubjectSubject
To Email AddressrecipientTo, ToFull → Email
From Email AddressfromFrom, FromFull → Email
Cc Email Address
Cc, CcFull → Email
Bcc Email Address
Bcc, BccFull → Email
ReplyTo Email Address
ReplyTo
Signaturestripped-signature
DatetimestampDate
Attachment Filename(s)attachment-info → filenameAttachments → Name
Attachment Contentattachment-xAttachments → Content
Attachment Content-Typeattachment-xAttachments → ContentType
Attachment Sizeattachment-xAttachments → ContentLength
Attachment Content-IDcontent-id-mapAttachments → ContentID
Number of Attachmentsattachment-countAttachments(array size)
Headersmessage-headersHeaders
Tag
Tag
Mailbox Hash
MailboxHash
Stripped Text Replystripped-textStrippedTextReply
DKIMX-Mailgun-Dkim-Check-ResultHeaders → DKIM-Signature
SPFX-Mailgun-SpfHeaders → Received-SPF
SpamAssasssin ScoreX-Mailgun-SscoreHeaders → X-Spam-Score
SpamAssassin Report
Headers → X-Spam-Tests
SpamAssassin Version
Headers → X-Spam-Checker-Version
Identified as SpamX-Mailgun-SflagHeaders → X-Spam-Status

Inbound Spam Filtering #

Postmark provides you with some additional control on how spam filtering is handled that is not available in Mailgun. In your inbound settings in the Postmark UI (Inbound > Settings) 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).

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.

Inbound processing libraries and code examples #

Language/FrameworkLibrary/Code example
RailsGriddler Postmark
RubyPostmark mitt (gem), Sample application
PHPPostmark inbound PHP
PythonPostmark Inbound Python, postmarker
.NETC# + MVC Inbound Demo, Inbound Reply Text Parser in VB

Chapter 6

Webhooks#

Migrating your webhook handlers to Postmark

Mailgun and Postmark both allow you to receive notifications as JSON POSTs to URLs you specify when specific events occur using webhooks. Here you can compare the different types of webhooks Postmark provides:

Webhook Types Map #

Event TypeMailgunPostmark
Inbound Processing
Inbound webhook
Delivery

delivered

Delivery webhook
Bounces

permanent_fail, temporary_fail

Bounce webhook, Subscription change webhook
Spam Complaintscomplained
Bounce webhook, Subscription change webhook
Open trackingopenedOpen tracking webhook
Click trackingclickedClick webhook
Suppression List Changes

Subscription change webhook
Unsubscribesunsubscribed
Subscription 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 #

ParameterMailgunPostmark
Recipient’s email addresstoRecipient
Tag/Metadata“custom variables”Tag, Metadata
Delivery timetimestampDeliveredAt
Receiving mail server’s responsedelivery-statusDetails
Email IdentifierMessage-IdMessageID
Email Source (Server in Postmark, Domain in Mailgun)senderServerID
MIME Headersmessage-headers
Webhook Type
eventRecordType
Message Stream

MessageStream
Attachmentsattachments
Subjectsubject
From email address
from

Bounce webhook #

Postmark includes some additional information for bounce events that is not present in the Mailgun Bounce Event Webhook you should be aware of:

  • Unique identifier for the bounce (used to reactivate a bounced email address using the Postmark Bounce API)
  • 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 as standard (and retention can be customized from 7 to 365 days), but it 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 #

ParameterMailgunPostmark
Recipient’s email addresstoEmail
From email addressfromFrom
Email subject linesubjectSubject
Bounce timestamptimestampBouncedAt
Tag/Metadatatag, “custom variables”Tag, Metadata
Unique bounce identifierID
Bounce TypeeventType
Email Identifiermessage-idMessageID
Server used to send the emaildomainServerID
SMTP Status codecode
Bounce detailsdelivery-statusDetails
Description of bouncereason
Description
MIME Headersmessage-headers
Whether the recipient’s email is deactivatedInactive
Whether the recipient’s email address can be reactivatedCanActivate
If a message dump is availableDumpAvailable
Attachmentsattachments
Bounce Code
TypeCode
Message Stream
MessageStream
Webhook type
eventRecordType

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 #

You will notice some open tracking information available with the Postmark open tracking webhook that does not exist in Mailgun’s Event webhook:

  • Whether this open event was the first time the email was opened
  • Unique identifier for the sent email

Open tracking webhook fields map #

ParameterMailgunPostmark
Recipient’s email addressrecipientRecipient
Tag/Metadatatag, “custom variables”Tag, Metadata
Timestamp of when open occurredtimestampReceivedAt
Email Identifiermessage-idMessageID
User Agentuser-agentUserAgent
IP Address of recipient when they opened the email

ip

Geo → IP
Country where email was openedcountryGeo → Country, Geo → CountryISOCode
Region where email was openedregionGeo → Region, Geo → RegionISOCode
City where email was openedcityGeo → City
Platformclient-typePlatform
Email client used to open the emailclient-nameClient
OS recipient was usingclient-osOS
Whether this was the first open for this emailFirstOpen
Message Stream

MessageStream

Webhook Type
eventRecordType

Click Tracking webhook #

Like Mailgun, Postmark also has a click tracking webhook available for you to receive notifications when a recipient clicks a link. See below for a mapping of the field names from the Mailgun click tracking webhook to the Postmark click tracking webhook.

Click Tracking Webhook Fields Map #

ParameterMailgunPostmark
Recipient’s email addressrecipientRecipient
Tagtag/user-variables
Tag, Metadata
Timestamp of when click occurredtimestampReceivedAt
Email Identifiermessage-idMessageID
User Agentuser-agentUserAgent
IP Address of recipient when they clicked the emailipGeo → IP
Platformclient-typePlatform
Email client used when a link was clickedclient-nameClient
Geographic Locationcountry, region, city
Geo
Click location (HTML or Plain Text email part)
ClickLocation
URL that was clickedurlOriginalLink
Message Stream

MessageStream
Webhook type
eventRecordType
Operating System

OS



Spam Complaint webhook #

Like Mailgun, Postmark also has a click tracking webhook available for you to receive notifications when a recipient clicks a link. See below for a mapping of the field names from the Mailgun click tracking webhook to the Postmark click tracking webhook.

  • Whether a message dump is available. Postmark stores content for 45 days as standard (and retention can be customized from 7 to 365 days), but it 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.

Spam Complaint Webhook Fields Map #

ParameterMailgunPostmark
Recipient’s email addressrecipientEmail
From email addressfromFrom
Email subject linesubjectSubject
Complaint timestamptimestampBouncedAt
TagtagTag
Bounce Type
eventType/Name
Unique bounce identifierID
Bounce codeTypeCode
Message Stream
MessageStream
Metadatauser-variablesMetadata
Email identifiermessage-idMessageID
Webhook TypeeventRecordType
Server used to send the emailServerID
Complaint detailsDetails/Description
Description of complaintDetails/Description
Whether the recipient’s email
is deactivated
Inactive
Whether the recipient’s email

address can be reactivated
CanActivate
If a message dump is availableDumpAvailable

Subscription Change webhook #

  • The Subscription Change webhook is similar to Mailgun's Suppression Management, although on Postmark's side, this webhook incorporates a few actions in one.
  • 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
Tag
Tag
Reason address was added to the suppression
list
SuppressionReason

Chapter 7

UI Overview#

Getting familiar with the Postmark web 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, Suppressions, Webhooks, 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. Servers not used in the last 30 days 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.

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 sending stream and inbound processing events for the inbound stream. Use the search bar to look for emails by subject or email address.

Keep in mind that with Postmark, you do not need to store messages explicitly using a Route to keep them for more than three days. Postmark will automatically store all successfully sent messages for 45 days as standard (and retention can be customized from 7 to 365 days) and all bounces indefinitely.

To see details for a particular event in a stream, click on the event. Some events included in the outbound stream 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 transactional stream 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 as standard.
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 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.

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 Mailgun 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