3 Tips When Migrating to Bird from Postfix, Sendmail or Exim

Tom Mairs

3 Aug 2018

Email

1 min read

3 Tips When Migrating to Bird from Postfix, Sendmail or Exim

Key Takeaways

    • Migrating from Postfix, Sendmail, or Exim to Bird is simple and low-lift—you can route email via SMTP with minimal configuration changes.

    • Bird supports both SMTP and REST API injection, letting you choose between traditional relay-based sending and modern JSON-based transmissions.

    • The REST API offloads template generation and mass mail delivery from local servers, improving scalability and delivery speed.

    • Bird’s event and metrics APIs provide JSON-formatted delivery data, making it easier to track bounces, opens, clicks, and complaints compared to Postfix logs.

    • You can integrate webhooks for real-time feedback or pull metrics on demand—ideal for analytics dashboards and compliance workflows.

    • Bird’s architecture ensures secure TLS communication over port 587 and supports easy migration without complex infrastructure changes.

Q&A Highlights

  • What’s the easiest way to migrate from Postfix or Sendmail to Bird?

    Simply point your existing SMTP configuration to Bird’s secure relay endpoint on port 587 and enable TLS—no major code changes required.

  • Does Bird support REST-based email sending instead of SMTP?

    Yes. Bird’s REST API accepts JSON payloads with templates and recipient lists, automatically generating and sending personalized messages at scale.

  • How can I monitor message delivery and performance after migration?

    Use Bird’s event webhooks or the message_events and metrics APIs to track delivery, bounces, opens, and complaints in real time or via scheduled queries.

  • Can I replace Postfix logs with Bird’s reporting tools?

    Absolutely. Bird’s JSON event model is structured for automation and easy integration with analytics tools—no log parsing needed.

  • What about compatibility with existing on-premises systems?

    Bird supports hybrid and secure setups using S/MIME and TLS, allowing you to connect on-prem systems or management code directly to Bird’s platform.

  • Why migrate from legacy MTAs to Bird?

    Bird centralizes deliverability, analytics, and scalability, removing maintenance overhead while giving developers and marketers unified insight into performance.

This document outlines common ways our customers use Bird for general integration. These integrations cover essential topics like “how do I send email?” and “how do I know what happened to the email?” For organizations maintaining hybrid on-premises and cloud setups with security requirements, our S/MIME implementation guide for on-premises platforms covers PowerMTA and Momentum configurations for secure email delivery. If you are transitioning from Postfix, Sendmail, or Exim, this document should explain everything you need to know about the basics of sending and reporting on email.  The rest of this document assumes you have an existing SparkPost account.

How do I send email?

Bird will accept mail for transfer in a couple of ways. By far, the most common is SMTP (Simple Mail Transfer Protocol) and Bird presents itself precisely as any other secure email agent on port 587. If you currently have generation or mail merge software that creates an email for delivery, Bird will accept it as a standard SMTP message and attempt to deliver it. You will need a system that with a valid TLS certificate that can generate SMTP messages and send them over port 587. Postfix, Sendmail, and Exim all have this capability natively.

Example 1:

You have a web server that generates a merged message for email delivery through Postfix.
· Adjust the web server’s generation software to send SMTP message to your assigned SparkPost server instead of the Postfix server
· Yes it really is that easy

Example 2:

You have some management code that needs to use the local server’s “Mail” function.
· If you are using Sendmail, edit the /etc/mail/sendmail.mc file to add a “smart-host” definition.
IE: define(`SMART_HOST’,`smtp.MyMessageBirdServer.com’)
· If you are using Postfix, edit the /etc/postfix/transport file to add an smtp relay definition.
IE: * smtp:MyMessageBirdServer.com
· Make sure you enable TLS and set your outbound port to 587.
· Apply the changes and restart the local mail services
· Execute the management code as, and the mail will route to MessageBird for delivery

What about REST injection?

For customers who use HTTP(S) to transport data in their networks, converting a message to SMTP can be cumbersome. Bird has a comprehensive REST API that can accept a JSON template, list of recipients, and substitution data over HTTPS and then convert that into generated (merged) email to be sent to the world over standard SMTP. This is particularly helpful to off-load the generation work from web servers to the mail engine.

Example:

Your servers generate a newsletter to 50,000 recipients daily merging personal data then send each individually through Postfix.
· Create JSON objects for the recipients, substitution data, and content template.
· Use the REST API to POST the JSON objects to Bird’s Transmission API. Doing this offloads the generation process to SparkPost for faster delivery.
· You can even put the JSON in a file and use cURL:

curl -v -H "Content-Type: application/json" -X POST \ https://api.bird.com/api/v1transmissions -d@./newsletter.json

For customers who use HTTP(S) to transport data in their networks, converting a message to SMTP can be cumbersome. Bird has a comprehensive REST API that can accept a JSON template, list of recipients, and substitution data over HTTPS and then convert that into generated (merged) email to be sent to the world over standard SMTP. This is particularly helpful to off-load the generation work from web servers to the mail engine.

Example:

Your servers generate a newsletter to 50,000 recipients daily merging personal data then send each individually through Postfix.
· Create JSON objects for the recipients, substitution data, and content template.
· Use the REST API to POST the JSON objects to Bird’s Transmission API. Doing this offloads the generation process to SparkPost for faster delivery.
· You can even put the JSON in a file and use cURL:

curl -v -H "Content-Type: application/json" -X POST \ https://api.bird.com/api/v1transmissions -d@./newsletter.json

For customers who use HTTP(S) to transport data in their networks, converting a message to SMTP can be cumbersome. Bird has a comprehensive REST API that can accept a JSON template, list of recipients, and substitution data over HTTPS and then convert that into generated (merged) email to be sent to the world over standard SMTP. This is particularly helpful to off-load the generation work from web servers to the mail engine.

Example:

Your servers generate a newsletter to 50,000 recipients daily merging personal data then send each individually through Postfix.
· Create JSON objects for the recipients, substitution data, and content template.
· Use the REST API to POST the JSON objects to Bird’s Transmission API. Doing this offloads the generation process to SparkPost for faster delivery.
· You can even put the JSON in a file and use cURL:

curl -v -H "Content-Type: application/json" -X POST \ https://api.bird.com/api/v1transmissions -d@./newsletter.json

How do I get delivery information?

Bird collects copious amounts of delivery information and makes that available to you in JSON format that can be “pushed” as a webhook or “pulled” with an API call. The data for a delivery looks something like this:

{
  "campaign_id": "Welcome_Letter",
  "customer_id": "108",
  "delv_method": "esmtp",
  "event_id": "84769964978165188",
  "friendly_from": "bounce@sp-send.com",
  "ip_address": "50.116.50.117",
  "ip_pool": "default",
  "message_id": "00046a82565a6d39451a",
  "msg_from": "abc-bounces-108@sp-send..com",
  "msg_size": "2164",
  "num_retries": "0",
  "queue_time": "1759",
  "raw_rcpt_to": "fakespark+32@deadboltemail.com",
  "rcpt_meta": {},
  "rcpt_tags": [],
  "rcpt_to": "fakespark+32@deadboltemail.com",
  "routing_domain": "deadboltemail.com",
  "sending_ip": "52.38.47.118",
  "subject": "Welcome Letter Template",
  "tdate": "2018-01-10T21:15:24.000Z",
  "template_id": "welcome-letter",
  "template_version": "5",
  "transmission_id": "84769964922735103",
  "type": "delivery",
  "timestamp": "2018-01-10T14:15:24.000-07:00"
}

That is probably much more data than you are used to seeing in a Postfix log and it is already in a format that is easily consumable. It is relatively trivial to convert that JSON data to Postfix logging format if needed. Delivery, bounce, reject, spam_complaint, open, click, and delay data can be read the same way.

Examples:

1) You usually export Postfix logs out to Excel so you can sort and analyze.
A) Execute a message_events API call and run the resulting JSON data through JSON2CSV.

2) You like to convert your Postfix logs to JSON, then pull them into a web service for reading and analysis.
A) Use the MessageBird metrics API to poll SparkPost for the data you need, and it is automatically exported as JSON

3) You have a separate process that tails and parses the logs in real-time and updates a separate recipient database.
A) SparkPost can provide a real-time webhook that can feed your process spam_complaintants and unsubscribes specifically for this purpose. Implementation is trivial.

-Tom

Other news

Read more from this category

A person is standing at a desk while typing on a laptop.

The complete AI-native platform that scales with your business.

© 2025 Bird

A person is standing at a desk while typing on a laptop.

The complete AI-native platform that scales with your business.

© 2025 Bird