これらの手順は、ほとんど一字一句、UCT Linux User's groupの configuring Sendmail for Dial-up connections のページからの引用です。
まず、 /etc/sendmail.cf を編集して、 どのホストがマスカレードしているのか指定しなければなりません。 /etc/sendmail.cf内で、 次のように宣言してある行を探してください。
# who I masquerade as (null for no masquerading) (see also $=M) DM |
そこで、"DM"で始める行の末尾にあなたのアドレスを書き加えてください。 我々は、あるユーザを例として、次のように変更してみました。
DMhendrix.org |
このようにすると、例示されたユーザがメールを送った際に、 Return-Path や From:フィールドには、 hendrix.org から送られてきたメールであることが記されます。 こうすることで、あなたのマシンがDNSエントリを持っていない場合に、 メールの送信先となるホストにより生成される"cannot route to sender" というメッセージを避けることができます。 更に、Eメールアドレスのユーザ部も変えなければなりません。 何故なら、ここまでの設定では、例示されたユーザがメールを送ると、 From: フィールドには mj@hendrix.orgと書かれることになりますが、 これは正しくないからです。 もし、あなたがEmailアドレスのユーザ名と同一のユーザ名で、ホームマシンにログインしているのであれば、 ステップ4「sendmailを再起動する」まで読み飛ばして構いません。 しかし、あなたが(例示されたように)異なるユーザ名でログインしているのであれば、 ステップ2及び3に示されるユーザデータベースの追加を行わなければなりません。
次に示されるような形式でファイルを作成してください。
loginname:mailname First_Last First_Last:maildrop loginname |
"loginname" は、あなたがホームマシンにログインする際のログイン名です (この例では、mjです)。"First_Last"は、あなたのEメールアドレスのユーザ部です (この例では、mjturnerです)。この例では、次のような内容を含む /etc/userdb というファイルを作成しました。
mj:mailname mjturner@hendrix.org mjturner:maildrop mj |
上のファイルを作成したら、テキストファイルである /etc/userdb を、sendmailの解釈できる"db"ファイル(Berkeley "db" database file)に変換しなければなりません。このため、makemapを次のように実行してください。
# makemap btree /etc/userdb.db < /etc/userdb |
これで、テキストファイルである /etc/userdb から、データベースファイルである /etc/userdb.dbが作成されます。 /etc/userdbを変更した場合には、忘れずに、 この処理を行ってください。この処理を行わなければ、sendmailは、メールを送信するときに、 あなたが作成した最新のユーザデータベースを使えません。
また、あなたは、sendmailに対して、メールを送信するときに、作成した ユーザデータベース (/etc/userdb.db) を用いることを教えなけ ればなりません。なお、シンタックスは、あなたが 8.7.x もしくは 8.8.x コンフィグファイルを使っているか、 8.6.x コンフィグファイルを使っているかによって、 わずかに異なっています。コンフィグファイルのバージョンは、"DZ"という文字列をサーチする (grep ^DZ /etc/sendmail.cf) ことで、 知ることができます。例えば、8.8.0コンフィグファイルであれば、 DZ8.8.0と表示されるでしょう。
8.6.x コンフィグファイルを使っている場合、次の文言で始まる行を探し、
# list of locations of user database file (null means no lookup) OU |
あなたの作成したユーザデータベースの場所を追加してください。例示したユーザは、上に示される行を次のように変更しました。
OU/etc/userdb.db |
8.7.x または 8.8.x コンフィグファイルを使っている場合、次の文言で始める行を探し、
# list of locations of user database file (null means no lookup) O UserDatabaseSpec= |
そこに、あなたの作成したユーザデータベースの場所を追加してください。 例示したユーザは、次のように変更しました。
O UserDatabaseSpec=/etc/userdb.db |
これらの変更をし終えたら、rootになってsendmailを再起動してください。
# ps aux | grep sendmail | grep -v grep root 64 0.0 0.0 1208 0 ? SW 11:45 0:00 (sendmail) # kill -HUP 64 |
(SysVでは、 ps aux に代えて ps -ef を使ってください)
ここで、sendmailが、そのコンフィグファイル (/etc/sendmail.cf) を再読み込みし、全てが反映されます。 これで、メールを送信するときに、ヘッダのFromフィールドには妥当な Eメールアドレスが記されることになり、ローカルなアドレスは記されない ようになるでしょう。上の例では、例示されたユーザがメールを送ると、ヘッダには、 From: mjturner@hendrix.org と記されるでしょう。 この設定は、全てのメールユーザエージェント(Mutt, Elm, Pine, mh, etc)で動作します。 アドレス変換は、メール転送エージェントのレベルで行われるからです。 基本的には、どんなメール送信プログラムでも使うことができるようになりましたし、 ヘッダに記載されるアドレスも正しいものになったでしょう。
sendmailでは、メール受信者側のサーバに接続しなければならないため、 メールが最終的な送信先に届くまでに、かなりの時間がかかることとなります。 また、この時間は、回線の使用効率が悪く、コストも高いこととなります。 しかし、sendmailに対して"smart"リレーを使うように設定すれば、sendmailは、 全てのメールをそのリレーに運び、更に、リレーがその送信先まで運ぶことになります。 例えば、あなたのISPのメールサーバは、理想的な"smart"リレーです。
Change
# "Smart" relay host (may be null) DS |
を
# "Smart" relay host (may be null) DSmail.hendrix.org |
に変更してください。
これを行ったら、sendmailを再起動することを忘れないでください (ステップ4「sendmailの再起動」参照)。これで、全ての非ローカルなメールは、 mail.hendrix.org に送信され、その後、 最終的な送信先まで送信されることになるでしょう。