eusend
SMTP

Ghost SMTP

Configure your Ghost blog to send transactional email — member sign-in links, password resets, staff invites — through eusend over SMTP.

Ghost sends two kinds of email: bulk newsletters (which require Mailgun) and transactional mail — member sign-in links, password resets, and staff invites. eusend handles the transactional mail through Ghost's mail SMTP configuration, DKIM-signed and tracked.

config.production.json

Ghost is configured through its config file (or the equivalent environment variables). Add a mail block:

config.production.json
{
  "mail": {
    "transport": "SMTP",
    "from": "Acme <no-reply@yourdomain.com>",
    "options": {
      "host": "smtp.eusend.dev",
      "port": 465,
      "secure": true,
      "auth": {
        "user": "eusend",
        "pass": "eu_live_xxxxxxxxxxxx"
      }
    }
  }
}

The from address must be on a domain you have verified in eusend.

As environment variables

If you run Ghost via Docker or a managed host, the same settings map to environment variables:

mail__transport=SMTP
mail__from=no-reply@yourdomain.com
mail__options__host=smtp.eusend.dev
mail__options__port=465
mail__options__secure=true
mail__options__auth__user=eusend
mail__options__auth__pass=eu_live_xxxxxxxxxxxx

Restart Ghost after changing the config.

⚠

Keep "secure": true with port 465 (implicit TLS). Ghost's mail transport is Nodemailer under the hood, so secure: false would attempt STARTTLS on the wrong port and fail.

Verify

In Ghost admin, go to Settings → Staff and send yourself an invite, or trigger a member sign-in link — both are transactional and go through eusend. The message appears in your eusend dashboard.

ℹ

Ghost still requires Mailgun specifically for bulk newsletter sending — that path is separate from transactional mail and is not configurable to other providers. eusend covers everything under the mail block above.

Troubleshooting

SymptomCause and fix
Invalid login: 535 … in the Ghost logRead the response text. Invalid credentials means the username is not the literal eusend or the API key is wrong. A message naming a domain means the From address is on a domain you have not verified.
Greeting never receivedsecure is false or missing, so Ghost waits for a plaintext greeting on a TLS port. Set "secure": true with "port": 465.
Connection timeoutYour host blocks outbound port 465, or the port is set to 587 or 25. eusend only accepts SMTP on 465. Ask your host to open it.
535 Too many failed attempts or 421 Connection rejectedRepeated failed logins block your IP address for up to an hour. Fix the credentials, then wait before retrying.
Config changes have no effectGhost reads its config at startup. Restart it, and check you edited the file for the environment Ghost runs in (config.production.json in production).
Sign-in links work, newsletters do notExpected — newsletters go through Ghost's separate bulk-email setting, which only supports Mailgun.

See the SMTP overview for the full status-code table.