How to send bulk/mass email
The short answer is that you need to set up your own web server (Hetzner, AWS, DigitalOcean, etc.), install an email software on it (Listmonk, Mailwizz, Mautic), and use an SMTP like Amazon SES. It's not that hard. If you're on Windows, Putty and FileZilla will be your main programs to access your server. When using CSV files for your contacts, you want to use UTF-8 format.
There are some detailed guides below for Sendy and Listmonk. But even if you have/want to hire someone to set it up for you, they should be able to do so for under $60 (check Fiverr). So it's still the most affordable option.
When I searched for this I had a very hard time finding a right answer because all the results were SEO blogs advertising their newsletter services (Mailchimp, Convertkit, etc.), which is not the same thing.
My use case is that I have a Google form collecting tens of thousands of applications. And I need to reply to those people en masse (a few thousand per day). None of the newsletter services are designed for this, and they're all very expensive.
Even if your use case is a regular newsletter, setting up your own server is way cheaper.
My goal was to find the most cost-effective, user-friendly, bulk/mass email sender with good deliverability and open rates. One-time, 100,000+ emails per month, 3-4k/day.
Feel free to share your input in the comments.
Table of Contents
- Amazon SES:
- Options to send through SES:
- Comparison of some of the main UI options:
- Web servers
- SPF, DKIM, DMARK:
I started off with no technical knowledge/proficiency. I was using Convertkit, which is nice, but not made for this. It's limited to 1k contacts (free, and paid plans are a bit expensive), so I was deleting & uploading 1k contacts every day, which had a variety of problems.
I was getting 50-60% open rates. They dropped to 40 when I messed up my SPF record, and they went up to 70+ when I was sending people enough "good news".
Mailerlite, Getresponse, and SendPulse all count deleted subs towards your total. So you can't delete yesterday's contacts and email new contacts each day. They all have similar (50-60%) open rates as Convertkit.
Getresponse https://www.getresponse.com/ counts removed/deleted contacts to the total on the free plan (500 subs). I checked with them and they confirmed that deleted subs won't count for paid plans. So I could pay $30/mo for 2.5k subs/emails/day.
Sendpulse: Support answered in Russian.
Sender.net: Very low open rates.
A Gsuite/Google Workspace account will give you 2k emails per day. You can use Mergo with it, but Mergo has various problems and is not ideal for this, and I needed to go past the 2k limit. Mergo was getting ~70% open rates.
I had issues with the similar options like YAMM and Mailmeteor, so I wasn't able to test them. But them and Gmass don't seem worth the cost.
A free version of Mergo using a script? https://developers.google.com/apps-script/samples/automations/mail-merge
More for gmail? https://vocus.io/blog/best-mail-merge-gmail/
Specifically designed for single-sending in bulk:
I found https://mail250.com and purchased a plan with them, but their deliverability is horrible (10% compared to my 50-60% with convertkit).
After more research I found:
List of API/transactional, marketing, and more: https://web.archive.org/web/20230807082117/https://old.reddit.com/r/webdev/comments/3f5zna/how_can_i_bulk_email_100k_website_users_who_opted/ctm35kv/ - most of these are either very expensive for sending to 100k+ contacts, or they don't provide a UI.
The best email marketing services and tools help marketers save time and improve their results: https://github.com/cemhurturk/the-best-email-marketing-services-and-tools-for-marketers
A thread on /r/webdev recommends:
MailChimp Campaign Monitor Mailgun - uses Mailjet. SendGrid Postmark
Mailchimp: https://mailchimp.com/pricing/marketing/ - quite limited/expensive in both sub count and emails/mo.
Campaign monitor: https://www.campaignmonitor.com/pricing/ - $100/mo for 5k subs.
Drip: https://www.drip.com/pricing - $50/mo for 3k contacts. Not sure if they'll let you delete and re-add.
Mailjet: https://www.mailjet.com/pricing/ - $100/mo for 100k emails.
Sendinblue: $65 for 100k emails.
Postmark: https://postmarkapp.com/pricing - looks technical. $100 for 125k.
SendGrid: $200/mo for emailing 80k contacts using their marketing campaigns. API/SMTP is cheaper.
Elastic Email: https://elasticemail.com/email-marketing-pricing - $265/mo for 100k.
PHPList: Seems to be an expensive hosted option https://www.phplist.com/pricing - $180 for 100k emails.
MimePost: 100k emails/mo for free https://mimepost.com/pricing. I have no idea what this is. It looks to be aimed at developers setting up their own server.
There are programs like SendBlaster and TurboMailer that you can run from your PC. These are very useless. You need a web server that the people you're emailing can interact with in order to process unsubscribes, "view in browser", use analytics (open tracking), etc.
$15 for 150k emails. By far the cheapest option. The free tier https://aws.amazon.com/free/ recently changed. No interface. But cheap and should have good deliverability.
firstname.lastname@example.org email@example.com firstname.lastname@example.org email@example.com
Can view all bounced/suppressed in the "suppression list". It doesn't add soft bounces.
- Overview of the three types of suppression lists https://docs.aws.amazon.com/ses/latest/dg/lists-and-subscriptions.html#3-suppression-overview
- SES account-level suppression list https://docs.aws.amazon.com/ses/latest/dg/sending-email-suppression-list.html
- Gmail doesn't provide complaint data to SES. https://repost.aws/questions/QU8uIfhVs1RLG-5GNmlRS36g/since-gmail-doesnt-provide-complaint-data-to-ses-wouldnt-resending-to-gmail-users-who-marked-a-previous-email-as-spam-hurt-our-reputation-and-deliverability
Export the suppression list:
Save output to clipboard:
aws sesv2 list-suppressed-destinations|clip - requires
sudo apt install geomview (200MB)
aws sesv2 list-suppressed-destinations > blocklist.txt - then have to download the file with FileZilla (can view with
ls), or output into pastebin:
cat blocklist.txt | curl -F 'clbin=<-' https://clbin.com
AWS Command Line Interface (AWS CLI) https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html
sudo apt install awscli aws configure AWS Access Key ID [None]: AWS Secret Access Key [None]: Default region name [None]: us-west-1 Default output format [None]:
Setup custom subdomain: https://docs.aws.amazon.com/ses/latest/dg/configure-custom-open-click-domains.html
Options to send through SES:
They require you to host the program on your/a website. There are a few more I came across but didn't list here.
Listmonk: https://listmonk.app/ Free, open source, simple, unpolished.
Mautic: https://www.mautic.org/ Free, opensource marketing automation platform. A more advanced and complicated version of Listmonk. Similar to MimePost?
Sendy: https://sendy.co/ - one-time $70 fee. Has some things better than Listmonk, and others worse.
Nuevomailer: https://www.nuevomailer.com/ $130 one-time fee.
Mailster: https://mailster.co/ - $90 one time fee. A Wordpress-only plugin?
weMail: https://getwemail.io/email-marketing/cheap-bulk-email-sender/ - wordpress plugin. $10/mo using AWS.
Comparison of some of the main UI options:
PHPList vs Listmonk: https://news.ycombinator.com/item?id=20421243
If you are an Open Source project and need expert marketing software, they offer a FREE phpList Hosted Plus Account. https://www.phplist.com/freeforopensource
- https://www.phplist.com/ - hosting
- https://www.phplist.org/ - software
- https://discuss.phplist.org/ - forum
Free and open source, but the most unpolished. You may spend lots of time trying to get certain things to work and fail in the end.
As far as I can tell, it's a "simpler and possibly slightly more user-friendly" version of Mautic.
Some things are better than Sendy, others worse. Overall I prefer Listmonk, especially since it's free and open source. It looks simple and clean. Very low hardware requirements, but that is due to sacrificing features.
Importing: You can't import email duplicates (with different name) to the same list. If you import a list of 10 people with 1 duplicate, it will say "finished 10/10" and no errors.
As of Mid 2023.
There's no option to view all unsubbed or complained; both the total or per-campaign. knadh/listmonk#391 (comment)
You can't see people your campaign was not delivered to: knadh/listmonk#934
Export does not include what lists they're subscribed to; nor who has unsubscribed (only "block listed" which is a "super-unsub") knadh/listmonk#738 -- Discussion about exporting them manually: knadh/listmonk#863
Resubscribing if you accidentally click or change your mind is a bit problematic knadh/listmonk#588
Link tracking is manual, per-link: https://listmonk.app/docs/templating/
Open rates are inaccurate: knadh/listmonk#1025. A comparison with Convertkit using response rates, was the same. But this means you can't properly purge lists or resend to unopens.
Has some helpful guides and you can easily find people to hire to set it up since it seems well known.
- Setting up your own Bulk Mail Server — using Sendy and AWS
- Install Sendy on AWS EC2 Instance with SSL. Configure Amazon Web Services EC2 Instance with LEMP and Virtualmin to host Sendy
It's decent, but still slightly unpolished. At only $10 less than MailWizz, I think it's worth it to just pay $10 more for MailWizz.
Forum posts usually don't get approved, so it's not possible to get community help most of the time. But support responds via email.
As of Nov 2022.
My main issue is that the open rates are not accurate. They go to 60-70% a few minutes after sending a campaign, and end around 70-80%. Whereas my real open rates with other providers would start around 10% and go up to 60-70%.
I found a bug with people getting unsubscribed erroneously and automatically. Support said the solution is enabling ‘Double opt-out’, which you have to change per-list.
There's no option to export all lists/subscribers; nor view/export all bounced, unsubbed, complained, etc.. You have to do it per-list.
https://www.mailwizz.com/pricing/ - $80 one time fee.
Seems to be the most polished option.
As of Nov 2022.
- Might have issue with inaccurate open rates:
It sounded like they may have fixed it by blocking known bots, but in 2023 I still saw a review saying open rates were inaccurate, so for me it's still not worth it over Listmonk.
A more complicated and advanced version of Listmonk?
"We had originally tested Mailchimp and Sendy, but they are best used as bulk email marketing tools. Where Mautic really shines is as a full-service contact resource center, so you can do full contact list management, as-complicated-as-you want drip campaigns, all still while being significantly less expensive than a tool like Mailchimp." https://www.trustradius.com/compare-products/mautic-open-source-vs-sendblaster
There are a ton of options. Hetzner seems to have a good reputation and possibly the best bang for your buck. https://gist.github.com/MaximilianKohler/3bdedd0185283ac30c1f1422f9626947#setting-up-a-server
I initially went with Amazon EC2 because the guide I found used them, and because their free tier gave you 62k emails per month if you sent them from EC2, but that's changing now, so you can use any server.
SPF, DKIM, DMARK:
You're going to need to understand the basics of these.
- Check email headers: https://toolbox.googleapps.com/apps/messageheader/
- Check records: https://toolbox.googleapps.com/apps/checkmx/
- itgenius.com/dns - https://www.youtube.com/watch?v=jJqzWTY7FWk
- Check https://mxtoolbox.com/spf.aspx
- Advanced info: https://support.google.com/a/answer/10683907
- If your TXT record results in more than 10 lookups, messages from your domain won’t pass SPF and could be sent to spam. https://support.google.com/a/answer/10685928
It’s only possible to have one SPF record on your DNS zone. If you have more than one, they need to be merged.
Merge records: https://www.mailerlite.com/help/how-to-verify-and-authenticate-your-domain#new/align-domain
v=spf1 a mx include:_spf.mlsend.com include:spf.protection.outlook.com -all
DKIM with mailchimp: https://www.youtube.com/watch?v=HhUTUAfgb6w - Email Domain Authentication https://mailchimp.com/help/set-up-email-domain-authentication/
- Examples: https://www.dmarcly.com/blog/everything-about-a-dmarc-record
- DMARC checker: https://dmarcly.com/tools/dmarc-checker
- Using easydmarc.com https://youtu.be/Y5jTH9GacTU?t=336
Free @yourdomain email using Cloudflare, an SMTP (Sendinblue/Brevo or Mailjet), and Gmail: https://www.youtube.com/watch?v=nNGcvz1Sc_8
Check deliverability: https://www.mail-tester.com/
ranking based on cost-effectiveness https://www.seenlyst.com/blog/email-validation-list-cleaner-benchmark/
Be weary about sketchy sites. They may be selling your email lists.
Email reputation is important if you want to avoid landing in peopls's spam. This is a major reason to use Amazon SES. But Amazon may kick you off if you allow your reputation to degrade.
ConvertKit provides the IP addresses, sending domains, and link tracking domains for your messages. Each of these items carries a reputation https://convertkit.com/sender-reputation