外部へメール送信
家のサーバから mail コマンドで外部へメールを送信しようとすると、送信者が 「user-name@localhost.localdomain」 になってしまう。いくつかのホストではこのようなドメインを SPAM とみなして弾くようだ (特に携帯は厳しい)。sendmail で外向けのメールのドメインを変更しよう。
root ユーザになって /etc/mail/sendmail.mc を開き、以下のコメントアウト (行頭の dnl) を外す。
MASQUERADE_AS(`foo.domain.com')dnl
FEATURE(masquerade_envelope)dnl
MASQUERADE_DOMAIN(localhost)dnl
MASQUERADE_DOMAIN(localhost.localdomain)dnl
MASQUERADE_DOMAIN(domain-alias.com)dnl
MASQUERADE_AS には localhost.localdomain の代わりに付けたいドメインを記述する。
FEATURE はこの変換をヘッダだけでなく MTA がやり取りするエンベローブ情報にも適用するコトを意味する。また、domain.alias.com だけでなく *.domain.alias.com に適用したい場合には masquerade_entire_domain を指定する。
MASQUERADE_DOMAIN は変換元のドメインを指定する。上記の例だと localhost, localhost.localdomain, domain-alias.com を対象としている。見ての通り複数指定が可能であり、これらのいずれかに一致したドメインは MASQUERADE_AS で指定したドメインに置き換えられる。特にエイリアス等を付けてなければ localhost と localhost.localdomain だけで良いだろう。
もう一つ覚えておく必要があるのが EXPOSED_USER。これに指定されたユーザは上記の変換が適用されない。通常はデフォルトで root や postmaster が設定されているはずだから、これらで外へのメールは制限が付いていると思って良い。
sendmail.mc を編集したら以下のコマンドで sendmail.cf を作り直し:
$ m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
sendmail を再起動しよう。
$ /etc/rc.d/init.d/sendmail restart |
再起動したら mail コマンドなどを使用して外にメールを送信してみよう。意図したドメインが付いていれば成功 (root だと EXPOSED_USER に引っかかって変換されないので注意)。ちなみに MTA から返されるエラーメールの送信者もちゃんと MAILER-DAEMON@foo.domain.com に変換されるようになる。