submit.mcに4行追加するだけ(内1行は空行)

Fedora 8では標準構成でsendmailがインストールされるので、これを起動時にサービスとして動くようにすれば、実は、大体の場合は使えるようになっていた。しかし、私がハマったのは、プロバイダによっては、メールの送信者(sender)のメールアドレスのドメイン名が実在するものでないと(多分スパムとして)弾くようになっていたためだ。しかも、マシン(実際には仮想マシン)をインストールする時に、そのマシンにドメイン名を設定しなかったためデフォルトの"localdomain"というドメイン名になっていた。勿論、インターネットの世界には実在しない。("localdomain.com"というドメインは実在するようだが。)

結果として、/etc/mail/submit.mcに4行追加し、/etc/mail/local-host-namesに1行追加するだけでOKだった。

まず、submit.mcでは、

	:
	:
17  divert(0)dnl
18  sinclude(`/usr/share/sendmail-cf/m4/cf.m4')dnl
19  VERSIONID(`linux setup')dnl
20
21  Dmadsaria.jp
22  Dwnought
23  define(`confDOMAIN_NAME', `$w.$m')dnl
24  define(`confCF_VERSION', `Submit')dnl
25  define(`__OSTYPE__',`')dnl dirty hack to keep proto.m4 from complaining
	:
	:

20行目〜23行目の4行の追加だけ。20行目は空行だが必要。これがないと19行目のVERSIONIDがマクロ展開された時にバージョンのコメント行の後ろに付いてしまうので改行する必要がある。

この例では、このマシンで動くsendmailは"nought.adsaria.jp"というマシン名、ドメイン名としてメールの投函処理をする。実際のマシン名やドメイン名に関わらず、メールの投函に関しては"nought.adsaria.jp"として動く。つまり(From:が"root@nought.adsaria.jpとかになる。)Dwで定義している"nought"はホスト名、Dmで定義している"adsaria.jp"はドメイン名を表す。ここで注意しなければならないのは"nought.adsaria.jp"というマシンがインターネット上に実在している必要がある。一番簡単なのはpingコマンドで確認すれば良い。("nought.adsaria.jp"というマシンもドメイン実際には存在しないので悪しからず。)私の場合は、たまたまプライベートに取得していたドメイン名が使えたので、それを使った。もし、使えるドメイン名がない場合は、利用しているプロバイダで「メールボックスは使わない」プロバイダがあれば、そのプロバイダのsmtpサーバ名を借りのも手かと思う。(送信者が実在のドメインからメールを出しているか確認するだけなので、プロバイダにトラブルが発生することはないだろう。)

基本的には、この設定をした時点で、実在ドメインのチェックをしているプロバイダでもメールを受取ってもらえるようになる。しかし、これだけだと一つ困ったことが起きる。自分自身のマシンのユーザにメールを出せない。例えば、

[root@accessserv ~]# mail root

として自分自身にメールを出そうとしても"root@nought.adsaria.jp"へ送ろうとする。そこで、"nought.adsaria.jp"を自分自身のドメイン名として扱うために/etc/mail/local-host-namesで定義する。

 1  # local-host-names - include all aliases for your machine here.
 2  nought.adsaria.jp

こうしておくと、例えばroot宛に投函されたメールは封筒に"root@nought.adsaria.jp"宛というラベルが貼られるが、配達人が「これは自分自身のマシンだ」と気付き、ローカルなrootに届けてくれる。

余談?だが、submit.mcはsubmit.cfというファイルを生成するためのマクロ定義ファイルなので、submit.mcを変更したら、その内容をsubmit.cfへ反映する必要がある。次のコマンドを実行する。

[root@accessserv ~]# make -C /etc/mail

ただし、このコマンドを実行するためには"sendmail-cf"というパッケージがインストールされていなければならない。もし、インストールされていない時はyumでインストールしてから実行する。

[root@accessserv ~]# yum install sendmail-cf

更に、submit.cfやlocal-host-namesを変更した場合はsendmailサービスを再起動しておく。

[root@accessserv ~]# service sendmail restart
Shutting down sm-client:                                   [  OK  ]
Shutting down sendmail:                                    [  OK  ]
Starting sendmail:                                         [  OK  ]
Starting sm-client:                                        [  OK  ]