Hey everyone, hoping someone can help me out, I’ve been at this for weeks and have run out of ideas.
issue: When anyone tries to sign up on my site, they get “Failed to send magic link email.” Newsletter sending through Mailgun works perfectly fine — published posts arrive in subscribers’ inboxes (in Promotions but that’s a separate reputation issue). It’s only the magic link / signup flow that’s broken.
My setup:
-
Self-hosted Ghost on DigitalOcean ($12/month droplet, Ubuntu 24.04)
-
Domain through Porkbun (fromfirstprinciples.cv) with Cloudflare DNS
-
Mailgun fully verified — SPF, DKIM, DMARC all green
-
Newsletter sending uses Mailgun API key (works fine)
-
For transactional email I configured SMTP via Mailgun’s SMTP credentials, with
mail.fromset tohello@fromfirstprinciples.cv(a verified Mailgun sender)
What I’ve tried:
-
Verified the config is saved correctly via
cat config.production.json— mail block looks right -
Restarted Ghost multiple times via
ghost restartand fullghost stop/ghost start -
Opened port 587 in ufw firewall
-
Checked the production error logs — nothing relevant logged when the failure happens
-
Tried Brevo SMTP before switching to Mailgun SMTP, same failure
-
Checked my own subscribed account is receiving newsletters (it is)
What I don’t understand:
When the signup fails, no member record is created in Ghost’s Members list. So it’s failing before the member is even saved, which suggests the email step is throwing somewhere that doesn’t get logged.
Has anyone hit this before? Is there somewhere else I should be looking for logs, or a setting I’m missing? Happy to share more config details if needed.
Cheers