$/transactional-email-api providers โ†—
โ† all free tiers
free tier ยท go

8 Best Free Transactional Email APIs for Go (2026), Tested

Every provider here has a permanent free tier and either an official Go SDK or standard SMTP support. Trials excluded, checked against current pricing pages.

criteria

  1. 01

    Mailjet

    Transactional Marketing

    6,000/mo capped at 200/day. Permanent and useful for steady low-volume sends.

  2. 02

    Loops

    Marketing Transactional

    Unlimited emails on the Free plan within a 1,000-contact ceiling. Different model: optimal when your contact list grows slowly but your volume is high.

  3. 03

    Brevo

    Transactional Marketing

    300/day permanent. Best for low daily volumes that do not spike on launch day.

  4. 04

    Mailtrap

    Transactional Testing

    4,000/mo permanent on the sending side, plus a free testing tier.

  5. 05

    Resend

    Transactional

    3,000/mo permanent on a single domain.

  6. 06

    MailerSend

    Transactional

    3,000/mo permanent.

  7. 07

    Amazon SES

    Transactional

    New accounts get up to $200 in AWS credits for six months. The old 62,000/mo-from-EC2 allowance is gone.

  8. 08

    SMTP2GO

    Transactional

    1,000/mo permanent, no daily cap.

Send your first email from Go

Minimal send calls on the free tier, in ranking order. Swap the from address for a domain you have verified with the provider.

Resend go get github.com/resend/resend-go/v2
client := resend.NewClient(os.Getenv("RESEND_API_KEY"))
params := &resend.SendEmailRequest{
    From:    "you@yourdomain.com",
    To:      []string{"user@example.com"},
    Subject: "Hello",
    Html:    "<p>It works.</p>",
}
sent, err := client.Emails.Send(params)
free tier: 3,000/mo permanent, capped at 100/day, one domain
Amazon SES go get github.com/aws/aws-sdk-go-v2/service/sesv2
cfg, err := config.LoadDefaultConfig(ctx)
client := sesv2.NewFromConfig(cfg)
_, err = client.SendEmail(ctx, &sesv2.SendEmailInput{
    FromEmailAddress: aws.String("you@yourdomain.com"),
    Destination:      &types.Destination{ToAddresses: []string{"user@example.com"}},
    Content: &types.EmailContent{Simple: &types.Message{
        Subject: &types.Content{Data: aws.String("Hello")},
        Body:    &types.Body{Text: &types.Content{Data: aws.String("It works.")}},
    }},
})
free tier: Up to $200 in AWS Free Tier credits for new accounts
SMTP2GO standard library
auth := smtp.PlainAuth("", os.Getenv("SMTP_USER"), os.Getenv("SMTP_PASS"), "mail.smtp2go.com")
msg := []byte("From: you@yourdomain.com\r\n" +
    "To: user@example.com\r\n" +
    "Subject: Hello\r\n\r\n" +
    "It works.\r\n")
err := smtp.SendMail("mail.smtp2go.com:587", auth,
    "you@yourdomain.com", []string{"user@example.com"}, msg)
free tier: 1,000/mo permanent

All 8 compared

Every free-tier provider with Go support. Free volume and entry pricing sit with each pick above.

ProviderIdempotency keysWebhooksEvent streamOperating sinceSuppressions APIBest published rate per 1,000Batch sendingSDKs
MailjetNoYesYesNot publishedYesTiers not published in comparable formYesnode, python, go, ruby, php, java, dotnet
LoopsNoYesYes2022YesTiers not published in comparable formYesnode, python, go, ruby, php
BrevoNoYesYes2012YesTiers not published in comparable formYesnode, python, go, ruby, php, java, dotnet
MailtrapNoYesYes2014YesTiers not published in comparable formYesnode, python, go, ruby, php, elixir
ResendYesYesYes2023Yes$0.35Yesnode, python, go, ruby, php, rust, java, elixir, cli
MailerSendNoYesYes2020YesTiers not published in comparable formYesnode, python, go, ruby, php
Amazon SESNoNoYes2011Yes$0.10Yesnode, python, go, ruby, php, java, rust, dotnet
SMTP2GONoYesYes2006YesTiers not published in comparable formYesnode, python, go, ruby, php

other languages

reading this as teams choosing a transactional API

Judged purely as an API. What the request contract guarantees on retry, how complete the webhook event coverage is, whether suppressions are readable and writable programmatically, and how much the message log retains when something needs debugging in production.

Applied to free Go email sending, that means weighing idempotency keys, webhook coverage, event stream, and operating track record ahead of the rest, against high-frequency programmatic sends where a missed delivery is a product failure.

How rankings are produced โ†’