Skip to content

Mailjet

Mailjet (part of Sinch) is a European email platform for both transactional and marketing email. Its data is hosted in the EU by default and it has a usable free plan, which makes it popular with European small businesses.

Choose Mailjet when you want an EU-based provider with a free tier, or you already send newsletters through Mailjet and want transactional mail from the same account. For purely transactional sending with the strongest deliverability focus, see Postmark; for EU hosting with a developer API, Mailgun EU. Comparison: services overview.

  • A Mailjet account (new accounts may go through a short activation review).
  • A validated sender: add your domain in Account settings → Senders & Domains → Add domain and authenticate it (SPF + DKIM), or at least validate the single From address.
  • An API key pair (API key + secret key). Mailjet keys are not scoped by permission, so the least-privilege option is a dedicated sub-account key: Account settings → REST API → API Key Management → Create a sub-account API key. A sub-account has its own senders, stats and quota, and can be revoked without touching your main key.
  1. Open Email services → Add service → Mailjet.
  2. Fill in the fields:
Field Where to find it Example
API key Account settings → REST API → API Key Management a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6
Secret key Same page (click to reveal; can be regenerated) f6e5d4c3b2a1…
Webhook username Optional – username you put into the webhook URL (see below) frontmail
Webhook password Optional – matching password long-random-string
Max emails per second Optional; default 10/s 5
  1. Click Verify & save – Frontmail calls the Mailjet API with the key pair.
  2. The service is saved once the check passes. Both keys are encrypted with AWS KMS envelope encryption.

Mailjet shows the values under Senders & Domains → your domain → Authentication settings:

; SPF – merge with your existing SPF record (only one per domain!)
example.com. TXT "v=spf1 include:spf.mailjet.com ~all"
; DKIM
mailjet._domainkey.example.com. TXT "k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNAD…"
; Domain ownership (only when Mailjet asks for it)
mailjet._a1b2c3d4.example.com. TXT "a1b2c3d4e5f6…"
; DMARC
_dmarc.example.com. TXT "v=DMARC1; p=none; rua=mailto:dmarc@example.com"
  • If you already have v=spf1 include:_spf.google.com ~all, change it to v=spf1 include:_spf.google.com include:spf.mailjet.com ~all – don’t add a second SPF record.
  • Mailjet’s envelope sender is its own bounce domain, so DMARC alignment relies on DKIM – make sure DKIM shows OK.
  • Start DMARC with p=none, tighten later.

Frontmail talks to api.mailjet.com. Mailjet stores data in the EU by default. Mailjet also operates a separate US infrastructure (api.us.mailjet.com) for accounts created there – Frontmail currently supports only the default endpoint, so use an account created on the standard (EU) platform.

  • Free plan: 200 emails per day, 6,000 per month.
  • Paid plans lift the daily cap and bill per month.
  • New accounts can be put under review by Mailjet’s compliance team if bounce or complaint rates are high; sending is blocked until the review ends.
  • Mailjet’s SandboxMode API flag validates messages without sending them; Frontmail doesn’t use it.

Mailjet calls these Event notifications (webhooks).

  1. Copy the webhook URL from the service page in Frontmail (copy button):

    https://api.frontmail.dev/webhooks/providers/mailjet/<token>
  2. Recommended: protect it with Basic auth. Mailjet has no separate auth field, so put the credentials into the URL and enter the same values in the Frontmail fields Webhook username / Webhook password:

    https://frontmail:long-random-string@api.frontmail.dev/webhooks/providers/mailjet/<token>
  3. In Mailjet open Account settings → Event notifications (webhooks) and paste the URL for these events:

Mailjet event Frontmail event
Sent (accepted by the recipient’s server) delivered
Bounce – hard_bounce: true bounced – added to the suppression list
Bounce – soft, Blocked recorded as a soft bounce
Spam complained – added to the suppression list
Open opened
Click clicked
  1. Mailjet sends a test call when you save; the event should appear in the service’s event log.

Signature verification: Mailjet does not sign event payloads. The secret token in the URL identifies the service, and if you set a webhook password, Frontmail rejects every request whose Basic auth does not match.

Frontmail sets Mailjet’s CustomID to the Frontmail message ID so events match the right message.

  • auth – the service is broken (wrong API key/secret, 401/403, sender or domain not validated, account blocked). The service is marked unhealthy; the owner gets an email and a dashboard banner. A fallback service on the template takes over; without one the credit is refunded and the message waits in the hold queue as held_service_error, and is sent automatically after you fix the service (re-checked on save and by the daily health check).
  • permanent – this message can’t be sent (invalid recipient, 400 validation). Fallback service if configured, otherwise failed and the credit refunded.
  • transient – 5xx, 429, timeouts. Retried with exponential backoff; after the last attempt failed and refunded.
Mailjet response Class What to do
401 – API key authentication/authorization failure auth Check the API key and secret key pair; regenerate if needed.
403 – Forbidden / account blocked or under review auth Check the Mailjet dashboard and contact Mailjet support.
400 – “The sender … is not validated / not authorized” auth Validate the From address or domain in Senders & Domains (in the right sub-account).
400 mj-0013 – “… is an invalid email address” permanent See invalid recipient.
400 – other validation errors (subject too long, attachment too big) permanent Fix the template; see HTML templates.
429 – Too many requests transient Rate or daily limit hit; Frontmail retries. Lower Max emails per second.
500 / 503, timeout transient Mailjet outage – Frontmail retries.
  • Domain added and authenticated in Mailjet (SPF include + mailjet._domainkey)
  • One merged SPF record; DMARC p=none
  • Dedicated sub-account API key pair
  • Test connection passes
  • Event notification URL with Basic auth credentials, same values in Frontmail
  • Events enabled: sent, bounce, blocked, spam (+ open, click)
  • Daily volume within your plan’s limit