I have 200 IP addresses attached to my KumoMTA server, all in the same pool with a weight of 1 for each. If I send 200 emails continuously, will all these IP addresses be utilized? Specifically, will any of the IP addresses repeat during the process?
Hey there @helpful-emu, thanks for posting. Please read the “Troubleshooting” and “How to Ask for Help” buttons below. If you would like a 1:1 support session from the KumoMTA team, details are at the “Book a Support Session” button below.
That is not a good idea from a deliverability perspective. Even if you had a sending volume that actually required 200 IPs you’d be better off breaking them into smaller pools.
But is that doable? Will the IPs repeat. I am just testing it, it is not a production thing.
Specifically, will any of the IP addresses repeat during the process?
Provided that the queue doesn’t idle out (takes ~10 minutes) between any two message sends, the weighted round robin algorithm will use each candidate IP in sequence
Just to be sure If I send them out in 5 seconds gap so they will cover whole IP right? No IP will repeat?
correct; if you sustain traffic, the scheduled queue will remember the round robin state and continue to use the IPs in sequence. If that scheduled queue is empty for ~10 minutes it will idle out and forget the state (this is intentional, to save RAM), and a subsequent send will start again from the first IP
I sent 3 mails simultaneously with 5 second gap but the IP came out different like 18 and 80 of same pool. I have listed them out in sequence in sources.toml.
Here is some of my sources.toml
[source.“ip-1”]
source_address = “11.0.0.1”
ehlo_domain = ‘mail1.example.com’
[source.“ip-2”]
source_address = “11.0.0.2”
ehlo_domain = ‘mail2.example.com’
[pool.“pool-1”]
[pool.“pool-1”.“ip-1”]
weight = 1
[pool.“pool-1”.“ip-2”]
weight = 1
the round robin state is per scheduled queue; per destination. It’s not a global state; if you send to different domains, each one has its own round robin state
Can I make it a global state? The domain doesn’t matter, if the mail is going out it should use round-robin algo. Is that doable?
I want to note that this sort of mechanism is implemented probabalistically: with sufficient volume the distribution will be even. It is a non-goal to make a global state with guaranteed sequential distribution; that would impose a performance cost that is too high, and one that would be “impossible” to achieve across a cluster of sending MTAs.
This is my queues.toml
scheduling_header = “X-Schedule”
tenant_header = “X-Tenant”
remove_tenant_header = true
campaign_header = “X-Campaign”
remove_campaign_header = true
[queue.default]
max_age = ‘24 hours’
egress_pool = “rotation”
So how can I configure it as close as possible for global round robin state?
you might consider building some logic in lua that uses information that you maintain and store in a remote data source that micro manages the queues.
As Mike mentioned above, what you’re talking about doing is not good from a deliverability standpoint and it is not something that we would recommend, which is one of the reasons why there isn’t an easy way to do it.
Okay just for the knowledge what problems may occur if such “Single Pool” setup is used in production?
You can get blacklisted for showshoeing pretty quickly
TBH that’s what it sounds like to me, just sayin’
So lets say I divide my IP sources into different pools in sources.toml. But how my queues.toml will be? How will I define the pool to be used here? How can I define multiple pools in [queue.default]?
What is your goal in sending across so many IPs? What are your users?
How do you logically divide up your messages?
And what is your daily sending volume?