[exim4]Smarthostを複数指定する

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

をどうぞ。

以上で設定完了です。

フォローする