よく知られ歴史のあるメール配信ソフトとしてsendmailがあるが、設定が難解。Postfixの方が設定しやすいらしい。
以下の記述は特に断りがなければCentOS 5.5環境でのものです。 Postfixについてはこちら。
OSインストール時に選択していれば、既に入っているのでとりあえず省略(CentOS 5.3)。
telnetが使える場合。
shell> telnet localhost 25 Trying 127.0.0.1... Connected to localhost.localdomain (127.0.0.1). Escape character is '^]'. 220 www.hoge.org ESMTP Sendmail 8.13.8/8.13.8; Wed, 26 Aug 2009 16:18:54 +0900 ^] Ctrl + ] を入力 telnet> quit shell>
参考文献・サイト:
コンポーネント | 場所 | 備考 |
---|---|---|
sendmailのバイナリファイル | /usr/sbin/sendmail | 実体は/usr/sbin/sendmail.sendmail |
起動スクリプト設定ファイル | /etc/sysconfig/sendmail | |
コマンドnewaliases | /usr/bin/newaliases | 実体は/usr/sbin/sendmail |
コマンドmailq | /usr/bin/mailq | 実体は/usr/sbin/sendmail |
設定ファイルsendmail.cf | /etc/mail/sendmail.cf | |
エイリアスファイル | /etc/aliases |
sendmail.cf 中に場所を記載。
|
設定ファイル構築場所 |
/usr/share/sendmail-cf/cf/
|
mc ファイルからcf ファイルをビルドする作業を行うディレクトリ。Build スクリプトのある場所。
|
受信人名を別の名前(エイリアス)に置き換えること。
一般的な名前(infoなど)を実際のユーザ名に変換したり、多数の名前に変換するメーリングリストのような用途に用いる。設定ファイルの場所・ファイル名はsendmail.cf
のOA
行(またはO AliasFile
)で規定される(例:OA/etc/aliases
、O AliasFile=/etc/aliases
)。
aliasesファイルは「検索名: 置換名」という形式で列挙される。大文字小文字は区別しない。#で始まる行はコメントとしてみなされる。この置換処理は置換先がなくなるまで繰り返し行われる。
【例】aliasesファイル
# Basic system aliases この2項目は必須
mailer-daemon: postmaster
postmaster: root
メールの配信先サーバがダウンしているなど一時的にメール配信ができない場合、送信メールは一時的にキューディレクトリに保管される。そのキューディレクトリの設定はsendmail.cf
のOQ
行(またはO QueueDirectory
)で規定される(例:OQ/var/spool/mqueue
、O QueueDirectory=/var/spool/mqueue
)。
キューディレクトリでは、ヘッダ部分と本文部分に分けて別々のファイルに保存される。名前がqfで始まるファイルはヘッダ情報、名前がdfで始まるファイルは本文。3文字目以降の部分は1つのメッセージで共通。
sendmailは基本的に自身でメールを配信するのではなく、指定のプログラムに配信を依頼するという形をとる。その指定はsendmail.cf
のMlocal
,Mprog
行に記載される。Mlocal
はメールボックスへの配信(ユーザのメールボックスファイルへの書き込み、/bin/mail
が標準的)、Mprog
は処理を渡すプログラム(シェル、/bin/sh
が標準的)に関する設定。
【例】sendmail.cf Mlocal, P=/usr/bin/procmail, F=lsDFMAw5:/|@qSPfhn9, S=EnvFromL/HdrFromL, R=EnvToL/HdrToL, T=DNS/RFC822/X-Unix, A=procmail -t -Y -a $h -d $u Mprog, P=/usr/sbin/smrsh, F=lsDFMoqeu9, S=EnvFromL/HdrFromL, R=EnvToL/H drToL, D=$z:/, T=X-Unix/X-Unix/X-Unix, A=smrsh -c $u
受信先がローカルユーザではないとsendmailが判断した場合、メッセージは転送される。転送に関する設定はsendmail.cf
ファイルのMether
などの行に記載される。
(1)/etc/mail/access
ファイルにアクセス制御情報を記載する。
accessファイルの書式は以下の通り。
送信元 処理内容
具体例は以下の通り。
spammer.com 550 Yaja! hoge.spam.org REJECT www.safe.jp OK 123.45 RELAY
1行目はエラーコード(550)をsendmailのエラー処理ルーチンに渡し、メッセージ(Yaja!)を送信元に送る。2行目は指定ホストからのメールを拒絶する。3行目は指定ホストからのメールを受け入れる。4行目は123.45で始まるIPアドレスからの電子メールの中継を許可する。
(2)accessファイルの記載内容を変更したら、/etc/mail/
ディレクトリでmakeする。
毎回sendmail起動時に読み込まれる各種設定が/etc/mail/sendmail.cf
に記載されている。設定は行単位で記述され、先頭1文字がコマンドの種類を表す。コマンドの種類は以下の通り(出展:文献3)。
コマンド | 内容 | 備考 |
---|---|---|
V | 設定ファイルバージョン定義(V8のみ) | V8での機能を有効にする際記述する。 |
M | メール配信を行うエージェント(アプリケーション)を定義 | sendmailは自分自身でメール送信は行わず、ここに定義したエージェントに送信を依頼する。 |
D | マクロを定義 | 設定ファイル中何度も登場する値はマクロを定義しておくと記述や管理がしやすくなる。 |
R | 変換規則を定義 | |
S | 変換規則の組(ルールセット)を定義 | |
C | クラスマクロを定義 | 複数の値を持つことができるマクロ。 |
F | ファイルクラスマクロを定義 | 別ファイルに値のリストを持つことができるマクロ。 |
O | オプションを定義 | |
H | ヘッダを定義 | |
H | 優先順位を定義 | |
# | コメント行 |
設定はsendmail.cf
を直接編集せず、(1)mc
(マクロ)ファイルを編集する(2)コンパイルしてsendmail.cf
を生成、という方法も可能(sendmail.cf
内コメントにはmcファイルを用いる方法を「使うこと」となっている)。マクロファイルの書式は以下の通り。なおマクロの各引数はバッククォート(`
)とシングルクォート('
)で囲む(例:`string'
)。
記述 | 内容 | 例 |
---|---|---|
divert(-1)...divert(0) |
... の部分は全てコメントとみなされる。 |
divert(-1) #### If you modify this file, you will have to regenerate /etc/mail/sendmail.cf (run ./Build) #### divert(0) |
VERSIONID(`文字列') |
ソース制御システムを示す文字列。特に動作を左右するものではない。 |
VERSIONID(`setup for linux') |
OSTYPE(`OSの種類') |
OSの種類を示す文字列。ostype サブディレクトリ(/usr/share/sendmail-cf/ostype )に収められたOS固有のソースファイルが合わせて読み込まれる。
|
ostype/linux.m4 の内容を含めて設定を行う。
OSTYPE(`linux') |
FEATURE(`文字列') |
1つ目の設定でメール送信プログラムを、2つ目の設定でローカル配信プログラムを指定する。 |
送信にsmrsh を、ローカル配信に/usr/bin/procmail を用いる。
FEATURE(`smrsh') define(`PROCMAIL_MAILER_PATH',`/usr/bin/procmail') FEATURE(`local_procmail') |
sendmail.cf
の構築を行う操作は以下の通り。
shell> cp /etc/mail/sendmail.cf /etc/mail/sendmail.cf.bak ←設定ファイルのバックアップをとる
shell> cd /usr/share/sendmail-cf/cf ←構築用ディレクトリに移動、/usr/share/sendmail-cf/cf
は構築用ディレクトリ
shell> ./Build /usr/mail/sendmail.cf
shell> chmod 444 /etc/mail/sendmail.cf
システムユーザ宛てに送られたメールは、ユーザホームに置かれた .forward
に記された内容に従って転送される。転送先はコンマまたは改行で区切って記す。転送元にメールを残す場合は転送先の冒頭にバックスラッシュを付加して記す。転送先からメールが戻ってくる場合など、無限ループに陥る恐れのある場合はこの設定を追加する[4]。
【書式】 /usr/lib/sendmail オプション 宛先
入力された内容を本文として、指定の宛先へメールを送信する。 既定の入力元は標準入力。リダイレクトを用いてファイルなどから入力することもできる。 送信はmailコマンドでも可能。
【例】 /usr/lib/sendmail user@hoge.com < body.txt
-v
【例】 shell> /usr/lib/sendmail -v tom <mailbody 220 hoge.foo.org ESMTP Sendmail 8.13.8/8.13.8; Wed, 2 Sep 2009 10:53:50 +0900 >>> EHLO hoge.foo.org 250-hoge.foo.org Hello hoge.foo.org [127.0.0.1], pleased to meet you 250-ENHANCEDSTATUSCODES 250-PIPELINING 250-8BITMIME 250-SIZE 250-DSN 250-ETRN 250-DELIVERBY 250 HELP >>> MAIL From:<jack@hoge.foo.org> SIZE=55 250 2.1.0 <jack@hoge.foo.org>... Sender ok >>> RCPT To:<tom@pdbjs9.pdbj.org> >>> DATA 250 2.1.5 <tom@pdbjs9.pdbj.org>... Recipient ok 354 Enter mail, end with "." on a line by itself >>> . 250 2.0.0 n821roAo023377 Message accepted for delivery tom... Sent (n821roAo023377 Message accepted for delivery) Closing connection to [127.0.0.1] >>> QUIT 221 2.0.0 hoge.foo.org closing connection
メール本文の書式は以下の通り。
Subject: test
←空行でヘッダ部分と本文を区切る
This is main part of mail.
元文書はこちら。
この文書はsendmailの設定ファイルについて記述したもので、sendmailを利用するためのファイル sendmail.cf をどのようにして作ればいいかについて説明しています。また、Sendmail インストール・操作ガイド(doc/op/op.me)で説明されているsendmailのオプション設定方法についても記述しています。
始めるに当たって、tcpproto.mc(TCPのみのサイト用)、clientproto.mc(単一のメールホストを使うクライアント群用)、あるいは generic-*.mc ファイルをOS別の事例として見たいかもしれません。
設定は "cf" サブディレクトリに、拡張子 ".mc" を持つファイルに記載されています。この ".cf" ファイルは、"m4" プログラムで処理し ".cf" ファイルを作る必要があります。その際あらかじめ "cf.m4" をロードが必要です。
m4 cfディレクトリ/m4/cf.m4 mc設定ファイル > config.cf
あるいは、以下の様に単純に書くこともできます。
cd cfディレクトリ/cf
./Build config.cf
ここでcfディレクトリは cfディレクトリ のルート、mc設定ファイル は拡張子 ".mc" の設定ファイルの名前を指定します。もし __file__ または -I フラグ(ditto)
設定ファイルにはドメインマクロが参照するドメイン依存定義の集まりが必要になることでしょう。 例えば、Berkeley ドメインファイルにはいくつかの内部で区別されるホストの定義が含まれます。