I’m at my wit’s end with the bulk email failing using mailgun. We only have 59 subscribers and mailgun shows none of my [many] attempts to send. It does log the “test” emails of how the post will look, and transactional emails when adding new contributors, as successful.
I’ve tried various config setups. I’ve tried the maligun API key locatable on maligun/accountsettings/API security. I’ve tried the “sending API key” from the left side menu sending/domainsettings/ –> “Add sending key” .
I tried using SMTP credentials and port 2025 instead of the API following the 2025 update to this post: Mailgun not working when on Digital Ocean (Ghost running with docker-compose). 504 in web ui, but 200 in docker logs - #9 by markstos
"mail": {
"from": "no-reply@newsletter.postcolonialpolitics.org",
"transport": "SMTP",
"options": {
"service": "Mailgun",
"host": "api.eu.mailgun.net",
"port": 2525,
"requireTLS": false,
"secure": false,
"auth": {
"user": "newsletter@newsletter.postcolonialpolitics.org",
"pass": "*******...."
},
"region": "eu"
}
},
The setup recommended here is much cleaner but also is not working for me. And actually the “mg” in the domain breaks the transactional new contributor emails. The bulk email fails either way.
"mail": {
"from": "no-reply@newsletter.postcolonialpolitics.org",
"transport": "mailgun",
"options": {
"service": "Mailgun",
"host": "api.eu.mailgun.net",
"auth": {
"api_key": "***************************",
"domain": "mg.newsletter.postcolonialpolitics.org"
}
}
},
{"name":"Log","hostname":"postcolonial-ubuntu-s-1vcpu-1gb-lon1-01","pid":58841,"level":50,"version":"6.0.9","err":{"id":"a2537ac0-93bc-11f0-9f84-31e70712cbc1","domain":"https://postcolonialpolitics.org","code":"BULK_EMAIL_SEND_FAILED","name":"EmailError","statusCode":500,"level":"normal","message":"Error sending email 68ca9e4153a6ade5d9ddde9a","stack":"EmailError: An unexpected error occurred, please retry sending your newsletter.\n at BatchSendingService.emailJob (/var/www/postcolonialpolitics/versions/6.0.9/core/server/services/email-service/BatchSendingService.js:167:32)\n at BatchSendingService.sendBatches (/var/www/postcolonialpolitics/versions/6.0.9/core/server/services/email-service/BatchSendingService.js:403:19)\n at async BatchSendingService.sendEmail (/var/www/postcolonialpolitics/versions/6.0.9/core/server/services/email-service/BatchSendingService.js:213:9)\n at async BatchSendingService.emailJob (/var/www/postcolonialpolitics/versions/6.0.9/core/server/services/email-service/BatchSendingService.js:158:13)\n at async /var/www/postcolonialpolitics/versions/6.0.9/node_modules/@tryghost/job-manager/lib/JobManager.js:260:25\n at async JobManager.worker (/var/www/postcolonialpolitics/versions/6.0.9/node_modules/@tryghost/job-manager/lib/JobManager.js:16:22)","hideStack":false},"msg":"Error sending email 68ca9e4153a6ade5d9ddde9a","time":"2025-09-17T11:51:23.502Z","v":0}
{"name":"Log","hostname":"postcolonial-ubuntu-s-1vcpu-1gb-lon1-01","pid":58841,"level":30,"version":"6.0.9","msg":"[BULK_EMAIL_DB_RETRY] email 68ca9e4153a6ade5d9ddde9a -> failed - Started (1st try)","time":"2025-09-17T11:51:23.502Z","v":0}
{"name":"Log","hostname":"postcolonial-ubuntu-s-1vcpu-1gb-lon1-01","pid":58841,"level":30,"version":"6.0.9","msg":"[BULK_EMAIL_DB_RETRY] email 68ca9e4153a6ade5d9ddde9a -> failed - Finished (after 1st try)","time":"2025-09-17T11:51:23.523Z","v":0}
I really have no idea what else to try and a lot of the forum posts are from a couple years ago at least.
My setup is:
Digital Ocean: 1 GB Memory / 25 GB Disk / LON1 - Ubuntu 22.04 (LTS) x64
Ghost-CLI version: 1.28.3
Ghost version:6.0.9
Node version 22.19.0
Everything checks out with ghost doctor, although it skips Validating config –> side note why??
I’m not using Docker and really would like to not bite that off just now, we’re a very small operation.
On Mailgun:
Sending records: 2 TXT, the dkim is active and the other is verified.
Receiving records: MX verified
Tracking records: CNAME verified, email.newsletter.postcolonialpolitics.org, not sure why I have email in the front but in any case I turned off tracking b/c it screws up the links embedded in the emails.
My DMARC record is “Unconfigured” and I don’t know why.
Please someone help! What am I missing?
The documentation on this is very very sparse Email Newsletters - Ghost Developer Docs. & Configuration - Ghost Developer Docs there’s no example of how the config should look for bulk email, let alone bulk email & transactional (both pretty essential) And this Configuration - Ghost Developer Docs just explains “why mailgun”but not “how mailgun”

