A reader signs up on your Ghost site but never gets the confirmation email. A member tries to sign in, and the sign-in link never arrives. On self-hosted Ghost, the cause is usually the mail settings in your config file.
Ghost has two email systems
- Transactional email: sign-in and signup links, email confirmation, staff invitations, password resets. Self-hosted Ghost sends these with the
mailsettings inconfig.production.json. - Newsletters: posts sent to your members. Ghost sends these through Mailgun only. They cannot go through SMTP, so SecureSMTP cannot send them.
Ghost(Pro) users
Why transactional email fails on self-hosted Ghost
1. No SMTP server configured
If mail is not set in your config, Ghost tries to deliver mail directly from your server. Most VPS providers block or limit outgoing mail on port 25, and mail sent straight from a VPS IP is often rejected or filtered.
2. The From address is not authenticated
If Ghost sends from an address on your domain through a server that is not allowed to send for it (no SPF, no DKIM), Gmail and Outlook often send the message to spam.
3. Mailgun is set up but transactional mail is not
The Mailgun settings in Ghost Admin are for newsletters only. They do not cover sign-in links. Transactional email still needs the mail block in the config file.
Check where it breaks
- Request a sign-in link from a private browser window, using an address you control. Wait a few minutes. Check the inbox and spam folder.
- Read the Ghost log. Look in
content/logs/in your Ghost install for mail errors such as timeouts or failed logins. - Check the mail block in
config.production.json. If there is nomailsection, Ghost has no SMTP server. - Check the headers of an email that did arrive (Gmail: Show original). SPF, DKIM and DMARC should say PASS.
Point self-hosted Ghost at SecureSMTP
- Sign up at securessmtp.com/signup (the Free plan includes 5,000 emails a month).
- Dashboard → Forms → Sites → + Add Site. Copy the API key from the last step. It is shown only once. It is your SMTP password.
- Edit
config.production.json:"mail": { "transport": "SMTP", "from": "Your Site <[email protected]>", "options": { "host": "smtp.securessmtp.com", "port": 587, "secure": false, "auth": { "user": "securessmtp", "pass": "qcs_live_..." } } }Port 587 uses STARTTLS ("secure": falseis correct). For port 465 set"secure": true. Then restart Ghost:ghost restart. - Request a sign-in link again. The email shows up in the Email log in your SecureSMTP dashboard.
- To send from your own address, add a sending domain in the dashboard (any plan, including Free) and publish its DKIM record. New accounts need this to send. See Domains and DNS.
Full SMTP details are in the SMTP guide.
Frequently asked questions
Does this work on Ghost(Pro)?+
No. On Ghost(Pro), Ghost handles email for you and there is no SMTP setting to change. This guide is for self-hosted Ghost, where you set the mail server in config.production.json.
Can SecureSMTP send my Ghost newsletters?+
No. Ghost sends newsletters (bulk email to members) through Mailgun only; it does not support bulk sending over SMTP. SecureSMTP covers the transactional side: sign-in links, signup confirmations and staff emails.
What does Ghost send over SMTP?+
Transactional email: member sign-in and signup links, email address confirmation, staff invitations and password resets. These use the mail settings in config.production.json.
Which From address will members see?+
New accounts send from their own verified sending domain, so emails go out from the address you set for that domain. Any plan, including Free, can add one. Until it is verified you can send test emails to yourself. Older accounts can keep using [email protected] for a limited time, with your site name as the sender name and the From address Ghost used as the Reply-To.
Will switching SMTP affect my members or posts?+
No. Members, posts and settings live in Ghost’s database. Changing the SMTP server only changes how emails are delivered.
Next step