How Can We Dribble Out New Posts To Subscribers?

Operating System: Ubuntu 20.04.5 LTS
Ghost-CLI version: 1.23.1
Ghost version: 5.31.0

Is there a way to force Ghost to slow down the sending of published posts? A way to break a mailing list into it’s individual addresses, iterate through that list, sending to a single member every 40 seconds?

Why the question…

Ghost development team does not seem interested in providing service for anything other than Mailgun. An example of their justifications can be found

On the other hand, Mailgun is being difficult to work with.

Around six months ago, we signed up with Mailgun. When we took our new site live and tried to publish a new post, Mailgun blocked the publication.

We contacted Mailgun and they said they do not have enough history on us to allow publication. They say, “Give us some history and we will re-evaluate. Until then, you are limited to a 100 email per hour and 10 emails per batch.”

They want realistic history but block us from creating a realistic history and do not seem to be interested in helping resolve the situation.

We have 1500+ contact in our list from our previous platform and we need a way to dribble that out of Ghost to satisfy Mailgun’s unreasonable stance and unhelpful support. If there is a way to send a single email every 40 second, we could satisfy all the requirements they have thrown at us to this point.

Slowing ramping up allowed send rates is an industry standard anti-spam practice.

AWS SES required the same of me, asking me to slowly ramp up to the 100,000 daily emails I was used to sending. That project required writing some custom code to split my sending between the old provider and SES until AWS would accept my full volume.

Here’s what you can do:

  1. In your Ghost member user area, select a group of 100 users, and add a label to them like “1-100 Batch”. Go through and make 15 batches of users like that.
  2. When you publish a post, use the segment feature ( How to send emails to your audience) to select the first batch of user, and send the email just to them.
  3. Either manually, or by scripting with the API, repeat the process to send to the other batches once your hour limit has expired.

I realize it’s frustrating, but be frustrated with the spammers, because Mailgun and every other provider would prefer to give their users a better experience.

As long as your lists of “clean” and the emails don’t bounce or mark the message spam, I expect you’ll find that fairly soon your limits will be raised and you can start using larger batches or do full sends.


After going around and around with Mailgun, we were finally able to get them to lift the restriction. If you are in the same situation as we were, get a boatload of patience ready.

I completely understand. I am sysadmin for multiple email serves and spam is a disgusting problem. And as a result, all the customers we work with, we make sure their mailing lists are squeaky clean. The frustration with Mailgun is that when you provide list creation history for a double opt-in list with have 99.9% deliverability and still cannot get the restriction lifted, well, we have problem.

Going forward, since Mailgun is the only “sanctioned” email provider for Ghost and since Mailgun is so difficult to work with, we will NOT be recommending Ghost to any other users. So if you are considering Ghost as a publishing platform, you may want to do your homework before moving forward.

For as many aspects of Ghost as we like, until we can either find an abstraction that give the option to use any SMTP server or until we have the time and motivation to develop that abstraction ourselves, we will continue to use the other solutions we have historically used.

I wrote a patch to allow non-Mailgun senders, but it was not accepted because it didn’t use the “cleaner” approach of a formal adapter pattern that they use elsewhere on the backend for abstractions like this:

Then, I got Mailgun to work for me and backburnered the effort since I don’t need it myself anymore.

Mailgun is also used for tracking analytics, and I didn’t try to address that all in my patch.

While it work work to just not have any tracking analytics from emails integrated with Ghost, a better patch would also provide an abstraction for analytics as well, supporting using other providers for that as well.

Thanks. I will check it out.