2014/02/28

Hainekoのmailertableとsendermtについて

Hainekoの纏まったドキュメントは思いつきで取ったドメインであるhaineko.orgに日本語と英語で書く予定ですが、すぐに出来るわけでもないので、現時点でのHainekoについて、いろいろちょいちょい書いていく過程の二回目、リレーサーバの定義について書きます。

今日書く内容は、Hainekoの要というか基礎となる部分であるリレーサーバをどう定義するかについて、二つのファイル: mailertableとsendermtを中心に紹介しようかと思います。



Hainekoはメールのリレーサーバなので、受けとったメールをどこかのSMTPサーバまたはメールクラウドにリレーします。どのサーバにリレーするかを決定するファイルがetc/mailertableとetc/sendermtの二つです。

mailertable - 宛先メールアドレスでのルーティング

etc/mailertableは、sendmailを管理した事がある人なら同名のファイルがあった事を知ってはるかもしれませんが、宛先メールアドレスのドメイン部分でリレー先のメールサーバを決定します。

sendermt - 発信者アドレスでのルーティング

etc/sendermtは発信者アドレスのドメイン部分でリレー先のメールサーバを決定します。このファイルが評価されるのはmailertableの後です。

評価順序

Hainekoは受けとったメールの"rcpt"に指定されたメールアドレスのドメイン部分がmailertableに定義されたマップに一致するかどうか検索し、一致するものが無ければ、発信者アドレス("mail")のドメイン部分に一致するマップがsendermtファイルに定義されているかどうかを検索します。
  1. mailertableに宛先メールアドレスのドメイン部分が一致するものがあるか検索
  2. (1)で一致しなければ、sendermtに発信者アドレスのドメイン部分が一致するものを検索
  3. (2)で一致するものが無ければmailertableのdefaultマップで定義されるサーバにリレーする
  4. (3)でdefaultマップが定義されていなければ127.0.0.1:25へリレーする

基本的な書式

mailertableもsendermtも書式は同じで、電子メールアドレスのドメイン部分をキーとするマップを定義します。

gmail.com:
  mailer: 'ESMTP' ← lib/Haineko/SMTPD/Relay/*.pmが呼ばれる
  host: '192.0.2.34' ← ホスト名かIPアドレス
  port: 25 ← ポート番号
  auth: 'GmailAuth' ← SMTP認証が必要な場合、etc/authinfoが参照される。
  retry: 1 ← 相手側サーバが400系エラーの時再試行する回数
  sleep: 5 ← 接続再試行まで待機する秒数
  timeout: 9 ← 接続確立までのタイムアウト秒数
  starttls: 1 ← TLSで接続する
  disable: 0 ← 1にするとこの設定は使用されない

example.com:
  mailer: 'AmazonSES'
  auth: 'AmazonSES'
  timeout: 10
  disabled: 0

上記の設定は****@gmail.comな宛先の場合は192.0.2.34にリレーするという意味です。その下はAmazonSESのWeb-APIを使ったリレー設定です。****@example.comな宛先の場合はAmazonSESにHTTPSでリレーされます。AmazonSESやSendGrid,MandrillのようなWeb-APIでリレーする場合は、APIのサーバが固定値でモジュールに入っているので"host"や"port"の設定は不要です。

@example.comや@gmail.com以外が宛先であるメールは"default"に定義されている設定に従ってリレーされます。

authinfo - SMTP認証またはWeb-APIのキー定義

mailertableやsendermtで"auth"に定義した名前は、etc/authinfoというファイルから認証情報を探すのに使われます。

GmailAuth:
  username: 'Gmailのユーザ名'
  password: 'Gmailのパスワード'

AmazonSES:
  username: 'APIのKeyID'
  password: 'APIのSecret Key'
この記事では"GmailAuth"と"AmazonSES"という名前がそれにあたります。mailertable,sendermtとauthinfoの間で名前が一致していたらキー名は何でも良いです。

まだ手を付けてもいないのですが、このあたりの設定ファイルはRedisに対応しようかと思っています。他の設定ファイルについてはまた今度書きます。

0 件のコメント:

コメントを投稿