株式会社タフス

ドメイン名?

sendmail のメール受信について、小ネタを一つ

例えば下記のようなメールアドレスがあります。
ext@tafs.co.jp

さて、”tafs.co.jp”の部分ってなんですか?と聞くと、普通”ドメイン名”という
回答が返ってきます。
でも、メールの世界では、ホスト名とドメイン名の両方の意味で使用しています。

仮にsmtp.tafs.co.jpというメールサーバがあった場合、何も設定していないと、
ext@tafs.co.jp 宛てのメールは受信出来ません。

ext@smtp.tafs.co.jp 宛だったらどうでしょう。。。 

そう受け取れます。

これに対して、smtp.tafs.co.jpは、tafs.co.jpのサブドメインですか?と聞いたら、
YESと答える人はあまりいないと思います。ホスト名です。

この場合、smtp.tafs.co.jpサーバーの、ext(UNIXアカウント)宛にメールを送って
いる事になります。

sendmailの場合、ext@tafs.co.jp宛てのメールを受信したい場合は、local-host-names
ファイルに

 tafs.co.jp

を追加すればOKです。

sendmailの解説本などを見ると、local-host-namesの説明として、
「サーバー自身が受信(spool)するドメインを記載する。」
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
等と書いてあります。親切な書き方といえばそうかもしれませんが、本当の意味は違い
ます。

メールの世界に受信するドメイン名を設定するなんてものは無いのです。
と言い切ってみた。(笑)

メールサーバが自分宛と判断して受信するのは、自分のホスト名宛か、自分の
IPアドレス宛にメールが届いたときだけなのです。(ext@smtp.tafs.co.jpの様に)
当然といえば当然、昔からホストを識別するのは、ホスト名かIPアドレスです。

メールサーバーは、デフォルトで自分宛を受け取ると書きましたが、sendmail が受信する
宛先を調べる方法があります。それは、テストモードで起動して、パラメータを調べます。

# sendmail -bt
ADDRESS TEST MODE (ruleset 3 NOT automatically invoked)
Enter <ruleset> <address>
> $=w
[192.168.1.31]
loghost
smtp
[loghost]
localhost
[127.0.0.1]
smtp.tafs.co.jp
>

sendmail -bt がテストモードのコマンドです。
プロンプトが “>”になるので、そこに、”$=w” と入力します。

`w’というクラス(変数のようなもの)の内容を表示しているのですが、これが、sendmail
が持っているサーバー名なのです。つまりこの値宛にメールが来れば全て受信するのです。
値を見れば分かるように、この設定では、ext@tafs.co.jpのメールは自分宛と
判断出来ないので、受信をしません。
そこで、local-host-namesに tafs.co.jpを追加してrestartすると下記のようになります。

# sendmail -bt
ADDRESS TEST MODE (ruleset 3 NOT automatically invoked)
Enter <ruleset> <address>
> $=w
[192.168.1.31]
loghost
smtp
tafs.co.jp  ・・・・・・追加されている。
[loghost]
localhost
[127.0.0.1]
smtp.tafs.co.jp
>

tafs.co.jpがメールサーバのホスト名として追加されました。これで、ext@tafs.co.jp
が受け取れるようになります。

設定ファイル名が、”local-host-names” なんですから、明らかにホスト名を
追加する為のものだと分かりますよね。ドメイン名を追加するファイルじゃないんです。

じゃ、[192.168.1.31]も、$=wに入っている って事は、ext@[192.168.1.31]  なんて
宛先のアドレスを受信すんの?
と思う人がいるかもしれません。
受け取れます。どうぞお試し下さい。
(ローカルなテスト環境でね)

じゃ、@tafs.co.jpがドメイン名として扱われるのはどんな時よ?って話しは
次回にします。