SDKs
Use os SDKs oficiais do Resend contra a sua instância MepMail — não há cliente nosso para instalar.
O MepMail fala o protocolo do Resend, então não existe SDK nosso para instalar. Os SDKs oficiais do Resend funcionam como estão, bastando apontá-los para a origem da API da sua instância — o que também significa que sair do Resend custa uma linha, não uma reescrita de cada chamada.
Duas coisas que o MepMail publica no npm não são SDKs — o servidor MCP local e a CLI de migração. Estão em Pacotes npm.
Cada trecho abaixo foi conferido no código-fonte do próprio SDK, e Node e Python
foram executados contra uma instância real (envio, com delivered).
O que os SDKs oficiais alcançam
| Alcança o MepMail | Não implementado |
|---|---|
emails domains contacts audiences broadcasts contactProperties segments suppressions templates topics webhooks | automations events logs oauthGrants |
A coluna da direita responde 404. Se alguma chamada de que você depende estiver
lá, fale com a gente — o formato de comunicação é compatível, então o endpoint
costuma ser trabalho de um dia, não de um redesenho.
URL base
https://api.mepmail.dev — o que todos os exemplos desta página usam.
O cadastro está aberto — sem convite e sem cartão: crie sua conta em mepmail.dev/signup. O plano Free envia até 100 e-mails por dia UTC.
No painel, você pode solicitar um e-mail de teste para o seu próprio endereço sem adicionar um domínio nem criar uma chave de API. Para integrar seu produto ou agente, verifique seu domínio de envio em Domínios, crie uma chave em Chaves de API e use a origem da API acima com o SDK.
Barra final
A URL base é unida ao caminho da requisição por cada SDK, e eles divergem sobre o caminho já começar ou não com barra. Errar isso é um 404 em toda chamada, então vale copiar exatamente:
| URL base | SDKs |
|---|---|
| Sem barra final | Node, Python, Rust, Elixir |
| Exige barra final | Go, Ruby |
| Indiferente | PHP, .NET |
Node.js / TypeScript
resend no npm — Node 18+.
npm install resendimport { Resend } from "resend";
const resend = new Resend("ms_123", {
baseUrl: "https://api.mepmail.dev",
});
const { data, error } = await resend.emails.send({
from: "Acme <[email protected]>",
to: "[email protected]",
subject: "Olá do MepMail",
html: "<strong>Funciona!</strong>",
});Python
resend no PyPI — Python 3.9+.
pip install resendimport resend
resend.api_key = "ms_123"
resend.api_url = "https://api.mepmail.dev" # sem barra no final
email = resend.Emails.send({
"from": "Acme <[email protected]>",
"to": "[email protected]",
"subject": "Olá do MepMail",
"html": "<strong>Funciona!</strong>",
})PHP
resend/resend-php no Packagist — PHP 8.1+.
Em PHP a URL base não é argumento de construtor: o SDK a lê da variável de
ambiente RESEND_BASE_URL no momento em que o cliente é criado.
composer require resend/resend-phpputenv("RESEND_BASE_URL=https://api.mepmail.dev");
$resend = Resend::client('ms_123');
$email = $resend->emails->send([
'from' => 'Acme <[email protected]>',
'to' => '[email protected]',
'subject' => 'Olá do MepMail',
'html' => '<strong>Funciona!</strong>',
]);Ruby
resend no RubyGems — Ruby 3.0+.
O Ruby também lê apenas a variável de ambiente — e a lê uma única vez, quando a
biblioteca é carregada, então ela precisa existir antes do require "resend".
Repare na barra final.
gem install resendENV["RESEND_BASE_URL"] = "https://api.mepmail.dev/"
require "resend"
Resend.api_key = "ms_123"
email = Resend::Emails.send({
"from" => "Acme <[email protected]>",
"to" => "[email protected]",
"subject" => "Olá do MepMail",
"html" => "<strong>Funciona!</strong>"
})Go
github.com/resend/resend-go/v4 — Go 1.21+.
Use o módulo com /v4. O github.com/resend/resend-go sem o sufixo é uma tag de
2023 que não compila mais.
go get github.com/resend/resend-go/v4import (
"net/url"
"github.com/resend/resend-go/v4"
)
client := resend.NewClient("ms_123")
client.BaseURL, _ = url.Parse("https://api.mepmail.dev/")
sent, err := client.Emails.Send(&resend.SendEmailRequest{
From: "Acme <[email protected]>",
To: []string{"[email protected]"},
Subject: "Olá do MepMail",
Html: "<strong>Funciona!</strong>",
})Rust
resend-rs no crates.io — async
(tokio + reqwest).
[dependencies]
resend-rs = "0.32"
tokio = { version = "1", features = ["macros", "rt-multi-thread"] }use resend_rs::types::CreateEmailBaseOptions;
use resend_rs::{Config, Resend};
let resend = Resend::with_config(
Config::builder("ms_123")
.base_url("https://api.mepmail.dev".parse()?)
.build(),
);
let sent = resend
.emails
.send(
CreateEmailBaseOptions::new(
"Acme <[email protected]>",
["[email protected]"],
"Olá do MepMail",
)
.with_html("<strong>Funciona!</strong>"),
)
.await?;Java
O SDK oficial de Java fixa https://api.resend.com em uma constante e não expõe
nenhuma forma de trocá-la, então não há trecho Java para apontar para nós — fale
HTTP direto:
var body = """
{
"from": "Acme <[email protected]>",
"to": ["[email protected]"],
"subject": "Olá do MepMail",
"html": "<strong>Funciona!</strong>"
}
""";
var request = HttpRequest.newBuilder()
.uri(URI.create("https://api.mepmail.dev/emails"))
.header("Authorization", "Bearer ms_123")
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(body))
.build();
var response = HttpClient.newHttpClient()
.send(request, HttpResponse.BodyHandlers.ofString());.NET
Resend no NuGet — alvo net8.0.
dotnet add package Resendusing Resend;
var options = new ResendClientOptions
{
ApiToken = "ms_123",
ApiUrl = "https://api.mepmail.dev",
};
var resend = ResendClient.Create(options);
await resend.EmailSendAsync(new EmailMessage
{
From = "Acme <[email protected]>",
To = { "[email protected]" },
Subject = "Olá do MepMail",
HtmlBody = "<strong>Funciona!</strong>",
});Elixir
resend no Hex — Elixir 1.15+. Este é
mantido pela comunidade, não publicado pelo Resend, então considere o ritmo
de releases dele com a devida reserva.
# mix.exs
def deps do
[{:resend, "~> 1.0-rc"}]
endclient = Resend.client(
api_key: "ms_123",
base_url: "https://api.mepmail.dev"
)
{:ok, email} =
Resend.Emails.send(client, %{
from: "Acme <[email protected]>",
to: "[email protected]",
subject: "Olá do MepMail",
html: "<strong>Funciona!</strong>"
})O relay SMTP
Prefere SMTP? O MepMail também roda um relay de submissão (STARTTLS, porta
2587) para clientes legados e bibliotecas que não conseguem trocar a URL base —
o caso do Java acima é um deles. A credencial é uma chave de API, e as regras de
domínio remetente são as mesmas da API. Veja
Auto-hospedagem → relay SMTP.