eximにはSmarthostと呼ばれる機能があって、SMTPアカウントからメールを送出出来るのは、よくある話です。1時間に1500通くらいのメールを出したかったのですが、通常のSMTPアカウントは業界屈指のxserverなどで、1000通/1時間程度が最大送信数なのです。そこで3つのSMTPサーバーをSmarthostに設定して、メールを送出するときには3つをランダムに選んで送信出来れば、負荷分散になるのではないかというもくろみです。
(1)IPアドレスがユニークなSMTPサーバーを3台確保。
xserverで1つの契約で、複数のメールアドレスが取得できますが、3つのメールアドレスを使えばいいのではないかと思いましたが、それではだめでした。SMTPサーバーが共通の sv123.xserver.jp になってしまい、1000通/時間の制限は1メールアドレスではなく、1つのSMTPサーバーあたりという制限なのです。そこで3つのスタンダードプランを確保することになりました。
まだ問題がありました。3つのうちの2つの契約でSMTPサーバーが同じケースがありました。IPアドレスがユニークなSMTPサーバーを3台確保したいので、お試し期間を利用して、4つ5つと契約して最終的にユニークな3台に行き着きました。ホスト名がユニークなだけではダメです。nslookup でIPアドレスを引くと、名前の異なるSMTPサーバーでも同一のIPアドレスというケースがありました。
この記事では、確保した3台のSMTPサーバーを sv123.xserver.jp, sv456.xserver.jp, sv789.xserver.jp であるとして、話を進めます。
(2)3台のSmarthostの設定
Ubuntu, Debian等の exim4パッケージでは、
$ sudo dpkg-reconfigure exim4-config
でスマートホストの設定が出来ます。(1台のSmarthostの設定の場合はググってください。)
1台の場合だと、
gmail.com::587
とするところを、今回のケースでは、
sv123.xserver.jp::587:sv456.xserver.jp::587:sv789.xserver.jp::587
のように”:”で3台のSMTPサーバーを結合した結果を入力します。
(3)設定を小さなファイルに分割しますか?は No を選択します。
技術のある方は Yes でも対応可能だと思いますが、ここでは説明を簡略にするために No を選びました。
(4) /etc/exim4/passwd.client の記述。
passwd.client には3つのSMTPアカウントを記述します。
(5) /etc/exim4/exim4.conf.template に1行追加。
1150行目付近に次の1行を追加します。
smarthost:
debug_print = "R: smarthost for $local_part@$domain"
driver = manualroute
hosts_randomize ←この1行を追加
domains = ! +local_domains
transport = remote_smtp_smarthost
route_list = * DCsmarthost byname
host_find_failed = ignore
same_domain_copy_routing = yes
no_more
この hosts_randomize の追加で3台のSMTPサーバーからランダムに1つを選んでは、1つのメールをそのsmarthostに送信するようになります。このhosts_randomize がなければ、3台列挙したSMTPサーバーを左から順に送信を試行して、ダメなときは1つ右を試行するというようになります。
(6) exim再起動。
お好みで、update-exim4.conf もしくは、
$ sudo systemctl restart exim4
をどうぞ。
以上で設定完了です。