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:
{
"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_xxxxxxxxxxxxRestart 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
| Symptom | Cause and fix |
|---|---|
Invalid login: 535 … in the Ghost log | Read 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 received | secure is false or missing, so Ghost waits for a plaintext greeting on a TLS port. Set "secure": true with "port": 465. |
Connection timeout | Your 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 rejected | Repeated failed logins block your IP address for up to an hour. Fix the credentials, then wait before retrying. |
| Config changes have no effect | Ghost 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 not | Expected — newsletters go through Ghost's separate bulk-email setting, which only supports Mailgun. |
See the SMTP overview for the full status-code table.