i've got exim4 on ubuntu server and i-ve got a pool of 20 external IP's.

Is that possible to configure exim4 to use this ip-s rotating to send mail?


I think i could do this with iproute / iptables load balancing with "link stick" but i want to know if this is possible with exim4 internal configuration. Maybe there i should create several external smtp_drivers that will be using one of 20 IP and some random() func ?

link|improve this question

Why would you want to? – Zoredache Jan 31 at 8:39
say you want to send 2k emails to server gmail.com but after 1k gmailcom says: "Hey, you've excided maximum allowed emails from ip, try later". This later is 30/60/120 minutes but i have to deliver mail within 30 min. – MealstroM Jan 31 at 11:12
feedback

2 Answers

up vote 1 down vote accepted

I found this article which show how to sets up a random function to pick an IP from a list and then assign it as an output interface to the smtp driver.

Essentially, you have to set up a function:

sub randinet {
  @inet = ("x.x.x.1", "x.x.x.2", "x.x.x.3", "x.x.x.4");
  return $inet[int rand($#inet+1)];
}

and modify the smtp driver:

remote_smtp:
driver = smtp
interface = "${perl{randinet}}"
link|improve this answer
feedback

You can do this from within exim as well without using perl:

create a lookup file /etc/exim/ips.txt with

1: xxx.xxx.xxx.1
2: xxx.xxx.xxx.2
3: xxx.xxx.xxx.3
4: xxx.xxx.xxx.4

Set the transport to:

remote_smtp:
  driver = smtp
  interface = "${lookup {${randint:5}} lsearch {/etc/exim/ips.txt}}"

randint will return a random number between 1-4 which is then looked up in the file and used if you have more ip's just add to the list and increment the randint value to number ips + 1

Can be used by those who have exim built without perl or just don't want to use perl keeping everthing within exim.

link|improve this answer
feedback

Your Answer

 
or
required, but never shown

Not the answer you're looking for? Browse other questions tagged or ask your own question.