Features

Dynamic email templates

Create email templates that populate in real-time with dynamic data unique to each recipient. With variables and dynamic content, you can turn every transactional email into a personalized touchpoint for your user experience.

MailerSend

Build once, personalize infinitely

Work more efficiently by creating dynamic email templates once and deploying personalized messages at scale. Minimize repetitive tasks and keep your system clean and free from excessive templates and workflows.

MailerSend
MailerSend

Deliver tailored experiences with personalized content

Enhance the user experience by using variables, filters, conditional logic, and dynamic tables in your templates. Dynamically generate order information, account activity, product recommendations, and more.

Send dynamic email templates quickly with our API

Start sending in minutes with official libraries for your favorite programming language, including PHP, Java and more. Simply use the pre-built code on your template’s page.
Read our API docs
curl -X POST \
https://api.mailersend.com/v1/email \
    -H 'Content-Type: application/json' \
    -H 'X-Requested-With: XMLHttpRequest' \
    -H 'Authorization: Bearer {place your token here without brackets}' \
    -d '{
        "from": {
            "email": "your@email.com"
        },
            "to": [
        {
            "email": "your@client.com"
        }
        ],
        "subject": "Hello from MailerSend!",
        "text": "Greetings from the team, you got this message through MailerSend.",
        "html": "

Greetings from the team, you got this message through MailerSend.

" }'
import { MailerSend, EmailParams, Sender, Recipient } from "mailersend";

const mailerSend = new MailerSend({
   api_key: "key",
});

const sentFrom = new Sender("you@yourdomain.com", "Your name");

const recipients = [
  new Recipient("your@client.com", "Your Client")
];

const emailParams = new EmailParams()
  .setFrom(sentFrom)
  .setTo(recipients)
  .setReplyTo(sentFrom)
  .setSubject("This is a Subject")
  .setHtml("This is the HTML content")
  .setText("This is the text content");

await mailerSend.email.send(emailParams);
$mailersend = new MailerSend();

$recipients = [
new Recipient('your@client.com', 'Your Client'),
];

$emailParams = (new EmailParams())
->setFrom('your@email.com')
->setFromName('Your Name')
->setRecipients($recipients)
->setSubject('Subject')
->setHtml('Greetings from the team, you got this message through MailerSend.')
->setText('Greetings from the team, you got this message through MailerSend.');

$mailersend->email->send($emailParams);
php artisan make:mail ExampleEmail

Mail::to('you@client.com')->send(new ExampleEmail());
from mailersend import emails

mailer = emails.NewEmail()

mail_body = {}

mail_from = {
    "name": "Your Name",
    "email": "your@domain.com",
}

recipients = [
    {
        "name": "Your Client",
        "email": "your@client.com",
    }
]

mailer.set_mail_from(mail_from, mail_body)
mailer.set_mail_to(recipients, mail_body)
mailer.set_subject("Hello!", mail_body)
mailer.set_html_content("

Greetings from the team, you got this message through MailerSend.

", mail_body) mailer.set_plaintext_content("Greetings from the team, you got this message through MailerSend.", mail_body) mailer.send(mail_body)
require "mailersend-ruby"

# Intialize the email class
ms_email = Mailersend::Email.new

# Add parameters
ms_email.add_recipients("email" => "your@client.com", "name" => "Your Client")
ms_email.add_recipients("email" => "your@client.com", "name" => "Your Client")
ms_email.add_from("email" => "your@domain.com", "name" => "Your Name")
ms_email.add_subject("Hello!")
ms_email.add_text("Greetings from the team, you got this message through MailerSend.")
ms_email.add_html("Greetings from the team, you got this message through MailerSend.")

# Send the email
ms_email.send
package main

import (
    "context"
    "os"
    "fmt"
    "time"

    "github.com/mailersend/mailersend-go"
)

func main() {
	// Create an instance of the mailersend client
	ms := mailersend.NewMailersend(os.Getenv("MAILERSEND_API_KEY"))

	ctx := context.Background()
	ctx, cancel := context.WithTimeout(ctx, 5*time.Second)
	defer cancel()

	subject := "Subject"
	text := "This is the text content"
	html := "

This is the HTML content

" from := mailersend.From{ Name: "Your Name", Email: "your@domain.com", } recipients := []mailersend.Recipient{ { Name: "Your Client", Email: "your@client.com", }, } // Send in 5 minute sendAt := time.Now().Add(time.Minute * 5).Unix() tags := []string{"foo", "bar"} message := ms.Email.NewMessage() message.SetFrom(from) message.SetRecipients(recipients) message.SetSubject(subject) message.SetHTML(html) message.SetText(text) message.SetTags(tags) message.SetSendAt(sendAt) message.SetInReplyTo("client-id") res, _ := ms.Email.Send(ctx, message) fmt.Printf(res.Header.Get("X-Message-Id")) }
import com.mailersend.sdk.Email;
import com.mailersend.sdk.MailerSend;
import com.mailersend.sdk.MailerSendResponse;
import com.mailersend.sdk.exceptions.MailerSendException;

public void sendEmail() {

    Email email = new Email();

    email.setFrom("name", "your email");
    email.addRecipient("name", "your@recipient.com");

    // you can also add multiple recipients by calling addRecipient again
    email.addRecipient("name 2", "your@recipient2.com");

    // there's also a recipient object you can use
    Recipient recipient = new Recipient("name", "your@recipient3.com");
    email.AddRecipient(recipient);
    
    email.setSubject("Email subject");

    email.setPlain("This is the text content");
    email.setHtml("

This is the HTML content

"); MailerSend ms = new MailerSend(); ms.setToken("Your API token"); try { MailerSendResponse response = ms.emails().send(email); System.out.println(response.messageId); } catch (MailerSendException e) { e.printStackTrace(); } }
MailerSend

Optimize templates with data-driven insights

Create up to 5 versions of a template and use email split testing to find which performs the best. Analyze the insights to improve your designs, boost engagement, and increase conversions.

MailerSend

Monitor performance with in-depth analytics

Access key metrics such as opens, clicks, bounces, unsubscribes, and more in the analytics dashboard. Filter data for your account, domains, or individual email templates and create custom reports.  

A well-designed, easy-to-use interface. Snappy mail delivery without any backlogs like SendInBlue. WordPress site works far better & API documentation is very clean and understandable.
MailerSend is extremely easy to use and super fast to set up. I was able to send the first email via the API in minutes. With the predefined templates and drag and drop editor, you're able to get started really quickly.
The drag and drop email builder has way more pre-built blocks than any competitor and the templates are really good-looking and practical.

Frequently Asked Questions

What is a dynamic email template?

A dynamic email template is a type of email that includes variables to personalize the content for each individual recipient. A simple example of this is using the {{name}} variable to add the recipient’s name. 

What is a dynamic email used for?

In transactional emails, dynamic templates are used to send emails with account or transaction-specific content (such as account details, password reset link or order confirmation) to recipients. Dynamic email email content can also be used to personalize messaging in order to build relationships and increase engagement, for example, by translating strings of text and adjusting it to the recipient’s locale.

How can I create dynamic email?

You can create a dynamic email by adding personalization variables into your API call. Learn how to use variables.

More features to explore

MailerSend is packed full of features that help you save time and grow your business.

Start collaborating on transactional emails now

Try MailerSend for free: Design your templates and send up to 100 emails with a trial domain. Add your own domain to get 3,000 emails/month free and start sending.