Back to main menu


Mailgun API 2.0: Forget MIME!

You no longer need to deal with MIME email message format to submit feature-rich messages HTML bodies, attachments and so on in Mailgun. Read more...



This post was originally published on October 18, 2011

Good news everyone!

Mailgunners been in the lab, keyboards in hands, trying to get some code off - and now Mailgun 2.0 is out. Today we are starting a short series of blog posts that tell you about all the exciting features we have built. If you can’t wait, you can always read our docs about the all the goodies in the new release.

We want to begin by saying: “NO MORE MIME!”

That’s right, you no longer need to deal with MIME email message format to submit feature-rich messages HTML bodies, attachments and so on.

The bitter truth is that not all programming languages are blessed with easy to use, well-documented and bug-free MIME libraries. Yet, nearly everyone knows how to make an HTTP POST request these days, which is ironic because underlying data formats are the same.

Another trend we noticed is that many programmers are not email experts…and why should they be? For example, we have been asked numerous times how to implement “Bcc” functionality or how to attach a file to a message.

Aiming to be the best email platform out there, we have decided to take a deeper look at how email messages are being created and sent. We are done asking our developers to read Wikipedia articles on multi-part emails and wrestle with MIME libraries of questionable quality.

Mailgun new message sending API is simple. Post parameters via HTTP to us and we build MIME and send your message out. What parameters? The ones you would expect: “From”, “To”, “Cc”, “Bcc”, “Subject”, “HTML body”, “attachment file”. You get the idea - same stuff Gmail GUI offers.

This means you can send non-trivial emails using good old curl…or even browser-based JavaScript! Of course, you old-schoolers are welcome to still use your own MIME with SMTP, or submit MIME via HTTP: we are fully backwards compatible.

Enough talking, lets look at some code. Most programming languages have built-in support for making HTTP requests, but for higher-level joy we recommend restclient for Ruby or requests for Python.

To get started, let’s send a simple text message:

curl --user api:key -F from='Shrek <>' -F to='Fiona <>' -F subject='Status update' -F text='The cat is off the hook'

How about a multipart message with text and HTML parts with multiple recipients and a few attachments, which also has a BCC recipient? Easy:

curl --user api:key -F from='Shrek <>' -F to='Fiona <>' -F bcc='Donkey <>' -F subject='Status update' -F text='The cat is off the hook' -F html='The cat is off the hook!' -F attachment=@kitchen-photo.jpg

Users who wish to set custom MIME headers can still do so without ever touching MIME. If a POST parameter begins with “h:” prefix, Mailgun recognizes it as a custom MIME header. Here’s an example of sending a message with a custom Message-Id header:

curl --user api:key -F from='Shrek <>' -F to='Fiona <>' -F subject='Status update' -F text='The cat is off the hook' -F h:Message-Id=''

There you have it: a clean and simple way to avoid MIME mess. You can see more API tricks in the documentation link below. Some other cool tricks you can include sending in test mode or scheduling for a specific delivery time.

Take a look:

Peace! — Mailgunners

Sign Up

It's easy to get started. And it's free.

See what you can accomplish with the world’s best email delivery platform.

Related readings

Email validation – Why is it vital for your inbox?

We all have those moments when we get nervous and need to double-check ourselves. Did we fill in the right answer bubbles on a test? Did we type in the right password when...

Read more

How to send transactional email in a NodeJS app using the Mailgun API

Sending transactional emails is easy regardless of your tools. If you use a NodeJS helper library, this walkthrough will help you get set up in Mailgun. Read more...

Read more

An expanded Mailgun product suite to transform email deliverability

Today marks a special day for Sinch Mailgun. For over a decade, our focus has been to provide the best email experience for businesses all around the world. Now, we take...

Read more

Popular posts

Email inbox.

Build Laravel 10 email authentication with Mailgun and Digital Ocean

When it was first released, Laravel version 5.7 added a new capability to verify user’s emails. If you’ve ever run php artisan make:auth within a Laravel app you’ll know the...

Read more

Mailgun statistics.

Sending email using the Mailgun PHP API

It’s been a while since the Mailgun PHP SDK came around, and we’ve seen lots of changes: new functionalities, new integrations built on top, new API endpoints…yet the core of PHP...

Read more

Statistics on deliverability.

Here’s everything you need to know about DNS blocklists

The word “blocklist” can almost seem like something out of a movie – a little dramatic, silly, and a little unreal. Unfortunately, in the real world, blocklists are definitely something you...

Read more

See what you can accomplish with the world's best email delivery platform. It's easy to get started.Let's get sending
CTA icon