Welcome new subscribers
Welcome new subscribers,
introduce your brand, and
start a lasting connection.
Reliable Email Infrastructure
Deliver transactional, marketing, and notification emails at scale — with world-class deliverability and simple integrations. Track deliveries, failures, and scale your sending without adding complexity.
First email in minutes
Built for the inbox
From launch to growth
OTPs, order updates
Newsletters, campaigns
offers, product alerts
Broadcast to millions
Built for the tools you already use
A simple, elegant interface so you can start sending emails in minutes. It fits right into your code for your favorite programming languages.
curl --request POST "https://api.sendmero.com/v1/messages" \
--header "Authorization: Bearer $SENDMERO_API_KEY" \
--header "Content-Type: application/json" \
--data '{
"from": "onboarding@yourapp.com",
"to": "user@example.com",
"subject": "Your verification code",
"html": "<p>Your code is 482913</p>"
}' curl --url "smtp://$SMTP_HOST:$SMTP_PORT" \
--ssl-reqd \
--user "$SMTP_USERNAME:$SMTP_PASSWORD" \
--mail-from "onboarding@yourapp.com" \
--mail-rcpt "user@example.com" \
--crlf --upload-file - <<'EMAIL'
From: onboarding@yourapp.com
To: user@example.com
Subject: Your verification code
MIME-Version: 1.0
Content-Type: text/html; charset=UTF-8
<p>Your code is 482913</p>
EMAIL const response = await fetch("https://api.sendmero.com/v1/messages", {
method: "POST",
headers: {
Authorization: "Bearer " + process.env.SENDMERO_API_KEY,
"Content-Type": "application/json",
},
body: JSON.stringify({
from: "onboarding@yourapp.com",
to: "user@example.com",
subject: "Your verification code",
html: "<p>Your code is 482913</p>",
}),
});
console.log(response.status, await response.json()); Setupnpm install nodemailer · save as send.mjs
import nodemailer from "nodemailer";
const smtp = nodemailer.createTransport({
host: process.env.SMTP_HOST,
port: Number(process.env.SMTP_PORT),
secure: false,
requireTLS: true,
auth: {
user: process.env.SMTP_USERNAME,
pass: process.env.SMTP_PASSWORD,
},
});
const result = await smtp.sendMail({
from: "onboarding@yourapp.com",
to: "user@example.com",
subject: "Your verification code",
html: "<p>Your code is 482913</p>",
});
console.log(result.messageId); import json, os
from urllib.request import Request, urlopen
message = {
"from": "onboarding@yourapp.com",
"to": "user@example.com",
"subject": "Your verification code",
"html": "<p>Your code is 482913</p>",
}
request = Request(
"https://api.sendmero.com/v1/messages",
data=json.dumps(message).encode(),
headers={
"Authorization": "Bearer " + os.environ["SENDMERO_API_KEY"],
"Content-Type": "application/json",
},
method="POST",
)
with urlopen(request) as response:
print(response.status, json.load(response)) import os, smtplib, ssl
from email.message import EmailMessage
message = EmailMessage()
message["From"] = "onboarding@yourapp.com"
message["To"] = "user@example.com"
message["Subject"] = "Your verification code"
message.set_content("<p>Your code is 482913</p>", subtype="html")
with smtplib.SMTP(
os.environ["SMTP_HOST"], int(os.environ["SMTP_PORT"]), timeout=30
) as smtp:
smtp.starttls(context=ssl.create_default_context())
smtp.ehlo()
smtp.login(os.environ["SMTP_USERNAME"], os.environ["SMTP_PASSWORD"])
smtp.send_message(message) <?php
$request = curl_init('https://api.sendmero.com/v1/messages');
curl_setopt_array($request, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('SENDMERO_API_KEY'),
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'from' => 'onboarding@yourapp.com',
'to' => 'user@example.com',
'subject' => 'Your verification code',
'html' => '<p>Your code is 482913</p>',
]),
]);
$response = curl_exec($request);
if ($response === false) throw new RuntimeException(curl_error($request));
echo $response;
curl_close($request); Setupcomposer require phpmailer/phpmailer
<?php
use PHPMailer\PHPMailer\PHPMailer;
require 'vendor/autoload.php';
$mail = new PHPMailer(true);
$mail->isSMTP();
$mail->Host = getenv('SMTP_HOST');
$mail->Port = (int) getenv('SMTP_PORT');
$mail->SMTPAuth = true;
$mail->Username = getenv('SMTP_USERNAME');
$mail->Password = getenv('SMTP_PASSWORD');
$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
$mail->setFrom('onboarding@yourapp.com');
$mail->addAddress('user@example.com');
$mail->Subject = 'Your verification code';
$mail->isHTML(true);
$mail->Body = '<p>Your code is 482913</p>';
$mail->send(); require "net/http"
require "json"
uri = URI("https://api.sendmero.com/v1/messages")
request = Net::HTTP::Post.new(uri)
request["Authorization"] = "Bearer " + ENV.fetch("SENDMERO_API_KEY")
request["Content-Type"] = "application/json"
request.body = {
from: "onboarding@yourapp.com",
to: "user@example.com",
subject: "Your verification code",
html: "<p>Your code is 482913</p>"
}.to_json
response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) do |http|
http.request(request)
end
puts response.code, response.body Setupgem install net-smtp
require "net/smtp"
message = <<~EMAIL
From: onboarding@yourapp.com
To: user@example.com
Subject: Your verification code
MIME-Version: 1.0
Content-Type: text/html; charset=UTF-8
<p>Your code is 482913</p>
EMAIL
smtp = Net::SMTP.new(ENV.fetch("SMTP_HOST"), Integer(ENV.fetch("SMTP_PORT")))
smtp.enable_starttls
smtp.start(
helo: "yourapp.com",
user: ENV.fetch("SMTP_USERNAME"),
secret: ENV.fetch("SMTP_PASSWORD"),
authtype: :plain
) do |connection|
connection.send_message(message, "onboarding@yourapp.com", "user@example.com")
end package main
import (
"io"
"net/http"
"os"
"strings"
)
func main() {
body := strings.NewReader(`{
"from": "onboarding@yourapp.com",
"to": "user@example.com",
"subject": "Your verification code",
"html": "<p>Your code is 482913</p>"
}`)
request, err := http.NewRequest("POST", "https://api.sendmero.com/v1/messages", body)
if err != nil { panic(err) }
request.Header.Set("Authorization", "Bearer "+os.Getenv("SENDMERO_API_KEY"))
request.Header.Set("Content-Type", "application/json")
response, err := http.DefaultClient.Do(request)
if err != nil { panic(err) }
defer response.Body.Close()
io.Copy(os.Stdout, response.Body)
} Setupgo get github.com/wneessen/go-mail
package main
import (
"os"
"strconv"
mail "github.com/wneessen/go-mail"
)
func main() {
port, err := strconv.Atoi(os.Getenv("SMTP_PORT"))
if err != nil { panic(err) }
smtp, err := mail.NewClient(os.Getenv("SMTP_HOST"),
mail.WithPort(port),
mail.WithTLSPolicy(mail.TLSMandatory),
mail.WithSMTPAuth(mail.SMTPAuthPlain),
mail.WithUsername(os.Getenv("SMTP_USERNAME")),
mail.WithPassword(os.Getenv("SMTP_PASSWORD")),
)
if err != nil { panic(err) }
message := mail.NewMsg()
if err := message.From("onboarding@yourapp.com"); err != nil { panic(err) }
if err := message.To("user@example.com"); err != nil { panic(err) }
message.Subject("Your verification code")
message.SetBodyString(mail.TypeTextHTML, "<p>Your code is 482913</p>")
if err := smtp.DialAndSend(message); err != nil { panic(err) }
} import java.net.URI;
import java.net.http.*;
class SendEmail {
public static void main(String[] args) throws Exception {
String message = """
{
"from": "onboarding@yourapp.com",
"to": "user@example.com",
"subject": "Your verification code",
"html": "<p>Your code is 482913</p>"
}
""";
var request = HttpRequest.newBuilder()
.uri(URI.create("https://api.sendmero.com/v1/messages"))
.header("Authorization", "Bearer " + System.getenv("SENDMERO_API_KEY"))
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(message)).build();
var response = HttpClient.newHttpClient()
.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
} SetupMaven: org.eclipse.angus:jakarta.mail:2.0.4
import jakarta.mail.*;
import jakarta.mail.internet.*;
import java.util.Properties;
class SendEmail {
public static void main(String[] args) throws Exception {
var properties = new Properties();
properties.setProperty("mail.smtp.host", System.getenv("SMTP_HOST"));
properties.setProperty("mail.smtp.port", System.getenv("SMTP_PORT"));
properties.setProperty("mail.smtp.auth", "true");
properties.setProperty("mail.smtp.starttls.enable", "true");
properties.setProperty("mail.smtp.starttls.required", "true");
properties.setProperty("mail.smtp.ssl.checkserveridentity", "true");
var message = new MimeMessage(Session.getInstance(properties));
message.setFrom(new InternetAddress("onboarding@yourapp.com"));
message.setRecipients(Message.RecipientType.TO, "user@example.com");
message.setSubject("Your verification code");
message.setContent("<p>Your code is 482913</p>", "text/html; charset=UTF-8");
Transport.send(message, System.getenv("SMTP_USERNAME"),
System.getenv("SMTP_PASSWORD"));
}
} using System;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Net.Http.Json;
using var client = new HttpClient();
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(
"Bearer", Environment.GetEnvironmentVariable("SENDMERO_API_KEY"));
using var response = await client.PostAsJsonAsync(
"https://api.sendmero.com/v1/messages",
new {
from = "onboarding@yourapp.com",
to = "user@example.com",
subject = "Your verification code",
html = "<p>Your code is 482913</p>"
});
Console.WriteLine(await response.Content.ReadAsStringAsync()); Setupdotnet add package MailKit
using System;
using MailKit.Net.Smtp;
using MailKit.Security;
using MimeKit;
var message = new MimeMessage();
message.From.Add(MailboxAddress.Parse("onboarding@yourapp.com"));
message.To.Add(MailboxAddress.Parse("user@example.com"));
message.Subject = "Your verification code";
message.Body = new TextPart("html") { Text = "<p>Your code is 482913</p>" };
using var smtp = new SmtpClient();
await smtp.ConnectAsync(
Environment.GetEnvironmentVariable("SMTP_HOST"),
int.Parse(Environment.GetEnvironmentVariable("SMTP_PORT")!),
SecureSocketOptions.StartTls);
await smtp.AuthenticateAsync(
Environment.GetEnvironmentVariable("SMTP_USERNAME"),
Environment.GetEnvironmentVariable("SMTP_PASSWORD"));
await smtp.SendAsync(message);
await smtp.DisconnectAsync(true); :inets.start()
:ssl.start()
url = String.to_charlist("https://api.sendmero.com/v1/messages")
token = String.to_charlist("Bearer " <> System.fetch_env!("SENDMERO_API_KEY"))
body = ~s({
"from": "onboarding@yourapp.com",
"to": "user@example.com",
"subject": "Your verification code",
"html": "<p>Your code is 482913</p>"
})
{:ok, {{_, status, _}, _, response}} = :httpc.request(
:post, {url, [{~c"authorization", token}], ~c"application/json", body},
[ssl: [verify: :verify_peer, cacerts: :public_key.cacerts_get()]],
[body_format: :binary]
)
IO.inspect({status, response}) Setupmix.exs: {:gen_smtp, "~> 1.3"} · mix deps.get · Erlang/OTP 25+
{:ok, _} = Application.ensure_all_started(:gen_smtp)
host = System.fetch_env!("SMTP_HOST") |> String.to_charlist()
message = Enum.join([
"From: onboarding@yourapp.com",
"To: user@example.com",
"Subject: Your verification code",
"MIME-Version: 1.0",
"Content-Type: text/html; charset=UTF-8",
"",
"<p>Your code is 482913</p>",
""
], "\r\n")
result = :gen_smtp_client.send_blocking(
{"onboarding@yourapp.com", ["user@example.com"], message},
relay: host,
port: System.fetch_env!("SMTP_PORT") |> String.to_integer(),
username: System.fetch_env!("SMTP_USERNAME"),
password: System.fetch_env!("SMTP_PASSWORD"),
no_mx_lookups: true,
tls: :always,
auth: :always,
tls_options: [
verify: :verify_peer,
cacerts: :public_key.cacerts_get(),
server_name_indication: host,
depth: 10,
customize_hostname_check: [
match_fun: :public_key.pkix_verify_hostname_match_fun(:https)
]
]
)
IO.inspect(result) Set SMTP_HOST, SMTP_PORT, SMTP_USERNAME, and SMTP_PASSWORD using your dashboard credentials. These examples use STARTTLS.
From message-level logs to inbox placement — everything you need to run email with total confidence.
Connect through REST API or SMTP and get the same reliable delivery for modern and legacy systems.
Track every email from queued to opened, with clear error details for bounces and failed sends.
Set up SPF, DKIM, and DMARC with guided steps, then secure access with IP allowlists and team roles.
Send delivery, open, click, bounce, and spam events straight to your server with real-time webhooks.
See where emails land—inbox, promotions, or spam—and catch delivery issues before they spread.
Handle flash sales, alerts, and OTP spikes with infrastructure built to keep every send moving.
Every domain gets guided SPF, DKIM, and DMARC setup, proactive blocklist monitoring, and inbox placement tracking — so you find out about a reputation problem before your users do.
Gmail
Yahoo
Outlook A verified identity and your logo in supported inboxes.
Spot blocklist, domain, and impersonation issues early.
Honor opt-outs and suppress bounces and complaints.
Automatic IP warm-up and delivery closer to your audience.
See which emails reach your audience and how people engage. Track opens and clicks, catch delivery issues, and use past results to improve your next campaign.
See when opens are recorded for your campaigns.
Follow link activity as your audience engages.
Find bounces and failed sends with clear explanations.
Compare past performance and export your reports.
Your audience knows your brand. Help them trust every email from it with a verified sending domain, protected account access, and the right permissions for everyone on your team.
Authenticate your domain with SPF, DKIM, and DMARC.
Allowlist IPs for your API and SMTP connections.
Set roles for templates and developer access.
Monitor sender reputation and spot issues early.
From the first welcome to your next launch, keep your audience informed and connected.
Welcome new subscribers,
introduce your brand, and
start a lasting connection.
Build excitement for
new products, fresh arrivals,
and offers worth opening.
Keep customers in the loop
with order confirmations
and timely shipping updates.
Stay connected with useful
tips, fresh ideas, and stories
that bring readers back.
Create an account, verify a domain, and send your first email — no sales call required.
Delivery, opens, clicks, and bounces in real time — filterable by domain, tag, or template.
One account, two integration paths. Use whichever fits the system you're sending from.
Real engineers answer, with sub-4-hour response times during business hours.
SOC 2-track infrastructure with encryption in transit and at rest, and granular role-based access.
Everything else is in the docs — but here's what people ask first.