メール - みる会図書館


検索対象: UNIX MAGAZINE 1998年10月号
62件見つかりました。

1. UNIX MAGAZINE 1998年10月号

連載 / UN Ⅸ知恵袋ー① 図 2 言聢ファイルに言己丕するレシビの書式 * CO れ d を乞 0 れ ( 任意の数の c 。れ市。れ行が続く ) ac を 0 れ UNIX MAGAZINE 1998 ユ 0 @sharp.co.jp や morishita@foo.com さんからきたメー 列が含まれているメールが適合します。たとえは、 mori の場合、メールヘッダの From: 行に mori" という文字 条件の部分が、 AFrom: . *mori となっています。 ! suzuki@sharp. co ・ JP * ¯From: . *mori : 0 これは、次のようなレシピを用いることで実現できます。 まれているメールを別の人に転送したいことがあります。 特定のアドレスからきたメールや、決まった文字列か含 メールを転送する ていきましよう。 具ー純勺な利用例を交えながら設定ファイルの書き方をみ 設定ファイルの書き方 トすることもでき、ネストの回数に制限はありません。 さらにレシピを言当することが可能です。プロックはネス ロックを定義することができます。プロックの内部では、 ファイルの 3 不頁です。また、中括弧 ( { } ) を使ってプ 指定できる動作は、メールの転送、コマンドの起動、リ 内容を表 1 に示します。 にはメールの処理内容を書きます。“。〃に指定できる 表現は egrep で使われるものと同しです。“れ ( 動作 ) 合したメールのみが、以後の処理の対象となります。正規 c 。浦市。れ ( 条件 ) は正規表現で指定します。条件に適 レシピの書式を図 2 に示します。 されます。 すが、それらのメールはシステムのメールスフ。ールに追加 れます。もちろん、レシピに適合しないメールも出てきま ーリングリストに転送したりといったことが自動て処理さ り、 product-info@foo.co.jp 宛のメールをローカルなメ -/Mail/group-info ディレクトリの下にリファイルした group-info@sharp.co.jp からきたメールを、すべて 表 1 action 彳テのキ旨定 中幻先アドレス コマンド起動 ネストプロックの開始 ネストプロックの終了 その他リファイル ルです。条件の記述を工夫すれは、 定することもできます。また、 * F て om : . *@javasoft . com ! suzuki@sharp ・ co ・ JP : 0 より厳密にメールを指 とすれは、 javasoft.com というドメイン名をもつメール アドレスのメールすべてを選ぶことができます。重丿胙に指 定されている ! はメールの転送を表します。上の 2 つ の例では、適合したメールが suzuki@sharp.co.jp さん にされます。 条件文の書式は、 egrep コマンドの式です。ですから、 Fr 。 rn : 行にかぎらす、メールヘッダ中のさまざまな部分を 条件として利用することができます。メーリングリストを 自重丿賑分けする場合を考えてみましよう。ピンポールに 関するメーリングリスト pinball@maillist.com/ があ るとします。このメーリングリストを自動で振り分けるに は、 pinball@maillist.com からきたメールであることが 思に識別できるヘッダがあればよいわけです。たとえ は、 pinball@maillist.com からのメールに、つねに、、 X - Ml-Name: pinball" が付いているのであれば、以下のよ メールをリファイルする の両方を入れてください。 条負 : の [ と ] のあいだには、空白文字とタブ文字 ! suzuki@sharp.co ・ JP * [ ] *pinball$ : 0 うなレシピになるでしよう。 procmail は、 mbox 形式と MH 形式の両方をサポート 次に、メールをリファイルするレシピを書いてみます。 mo て 1 * ¯From : . : 0 しています。 39

2. UNIX MAGAZINE 1998年10月号

法本告之 NEWS from つ定期総会併設セミナー報告 jus では、 7 月 13 日に開かれた定期総会の際に「電子 メールシステムの設疋と SPAM 対策」と題するセミナー を併催しました。講師として、電子メール配送システム (MTA: Mail Transfer Agent) の設定や改良に携わっ ている京都大学の中村素典氏を招き、 sendmail をはしめ とする MTA の設疋と、とくに去も丘間題になっているメー ルの不正中継への対策について説明していただきました。 ます、メールの送受信に必要な設定についての角見があ りました。メールを送受イ言するためには、メールサーバー として運用する計算機を用意し、 MTA のインストールと 設疋をおこないます。 MTA としては sendmail がもっ とも普及していますが、最近では qmail も使われ始めて います。また、メールの送イこは DNS の MX レコー ドを参照して酉当先を決定するため、メールサーバーでは DNS を参照できるようにしておく必要があります。 受信については、 DNS の MX レコードに酉占先 ( 通常 は自分の所属するドメインのメールサーバー ) を定義しま す。ただし、 A レコードに対して酉占医されることもあるの で、 user@host.domain のようにホスト名を含むメール アドレスに送られたメールも受信できるように設定してお く必要があります。 MX レコードに複数の計算機を言当し て障害に対処する力法や、メール酉占に関する DNS の設 定についての注意点も解説されました。 次は、メールの不正中継への対策です。メール爆弾 ( あ るサイトに大量のメールを送り、そのサイトのメールの送 受信機能を麻痺させる ) や、 SPAM ( メールや NetNews の記事を無差別かつ大量に送信する ) では、真の発信者を 隠すために第三者のメールサーバーを踏み台にすることが よくおこなわれています。 MTA の設定により、この種の メールの受信を拒否することができます。 ます From と To か織外か系騰内かをみて、その組 合によって中継の可否を決め、その方針をもとに設定し UNIX MAGAZINE 1998.10 ます。 sendmail では、バージョン 8.8 から中継拒否か設 定できるようになり、バージョン 8.9 ではデフォルトで 拒否するように設定されます。 qmail でも、デフォルトで 中継拒否の設定が入っているようです。 SPAM への対策としては、発信者のメールアドレスや ドメインなどを判断材翆トにしてメールをフィルタリングし たり、メーリングリストで登録メンバー以外からのメール を拒否するなど、いくつかのガ去か紹介されました。しか し、 SPAM はメールを発信する人間の間題であり、技術 面での完全な対策はないとのことです。 最後に、参加者とのあいだで質疑応答がおこなわれまし た。電子メールの管理をしていて、これらの間題に悩まさ れている人が多かったようで、切実な質間か数多く出てい ました。電子メールがた学や企業において不可欠な道具と なった現在、正しい設定が重要だと痛感しました。 ・ ')))>lnternet Conference ' 98 jus では、 UNIX 関連技術の研究発表の場として毎年 2 回シンポジウムを開催しています。 1996 年から、そのう ちの 1 回を「 lnternet Conference 」として WIDE フ ロジェクト、日本ソフトウェア利学会インターネットテク ノロジー研究会と共同で開催してきました。今年はこれに 日本インターネット協会も加わり、「 lnternet Week ' 98 」 ( 12 月 15 日 ~ 18 日 ) の一環として開かれます。 日時 : 1998 年 12 月 15 日 ( 火 ) 10 : 00 ~ 17 : 00 12 月 16 日 ( 水 ) 10 : 00 ~ 16 : 00 会場 : 国立京都国際会館 京都市左京区宝ヶ池 (Tel 075 ー 791 ー 3111 ) 参加費 ( 括弧内は 11 月 2 日までの申込み科金 ) 会員 25 , 000 円 ( 18 , 000 円 ) 学生 8 , 000 円 ( 8 , 000 円 ) ーヨ殳 30 , 000 円 ( 23 , 000 円 ) ( いすれも 2 日間の通し料金 ) 定員 : 390 名 申込み方法 : Web ページ (http://www.nic.ad ・ jp/iw 問合せ先 : E-mail: ic98@jus.or. 申込み : 11 月 30 日 ( 月 ) 98 / ) からオンラインでお申し込みください。 139

3. UNIX MAGAZINE 1998年10月号

上記のレシピは、 mb 。 x 形式でメールをリファイルする 場合です。 From: 行に、、 m 。 ri " が含まれているメールが条 件に適合します。メールの中幻医のときとは異なり、重川第の 部分が、、 ! " て始まっていません。その代わりに m 。 ri と だけ書かれています。、、 ! " や、、にで始まらない動 ( 行子は、 リファイルと解釈されます。ですからこの場合は、 From: 行に、 m 。 ri " という文字列が含まれているメールを mori ファイルにリファイルします。 mori ファイルは mbox 形式で、存在しなけれ ( 万たに作成さすでに存在して い川よ末尾にメールが追加されます。 とくに指定しなければ、 mbox ファイルは環境変数 HOME て示されるディレクトリ、すなわちューサーの ホーム・ディレクトリに作成されます。リファイル先を 特定のディレクトリにしたい場合は、 . procmailrc の先 頭で MAILDIR 変数を設定します。すべてのメールの リファイル先が、 -/MaiI ディレクトリの下にあるなら は、 . procmailrc に次の 1 行を追加するとよいでしよう。 MAILDIR=$HOME/Mai1 mori という名前のディレクトリがすでに存在する場合 は、 mori ディレクトリの下にリファイルされます。その 際、メールは mbox 形式ではなく、 1 つのメールに対し て 1 つのファイルが生成されます。メールかオ褓内される ファイルの名前は、一意になるように自重加勺に生成されま す。デフォルトでは、 msg. のあとに一意の数値カ咐けら れたファイル名が生成されて使われます。 msg. は任意の 文字列に変更可能です。 . procmailrc で MSGPREFIX 変数を指定します。 MSGPREFIX=message ・ 上の行を追加すると、メッセージのファイル名が mes ー sage. て始まるようになります。 mbox 形式ではなく MH 形式でメールを保存している 場合はどうでしようか。メールを MH 形式でリファイル 連載 / IJN Ⅸ知恵袋ーの 40 : 0 す。この場合、 mori というディレクトリの下にメールが mbox 形式の場合との違いは、重川行の末尾の、、 /. " で mori/ . する場合は、次のような動になります。 リファイルされます。その際、 mori ディレクトリに含ま れるファイルのなかで、数のみからなるファイル名か調 べらそのなかの最大数値よりも 1 多い直をファイル 名としてもっファイルが作成されます。 コマンドを起動する あるメールがきたとき、そのメールをコマンドの入力と して使いたい場合があります。たとえば、受信した週報を すべて印刷したい場合は次のレシピを使います。 : 0 c * *Subject : . *Week1y Report ー lpr このレシピの条件は、 Subject: 行に、、 WeekIy Re- port" という文字列を含むメールに適合します。条件に適 合したメールは動作行の指示に従って、 lpr コマンドに送 ら印刷されます。 1 行目の、、 c " はコピーを意味するフラグです。通常、条 件に適合したメールは、重川材引こ書かれた処理がおこなわ れたあと廃棄されます。 c フラグを付けると、メールのコ ピーを作成することができます。ですから、レシピに適合 した場合でも、メール本体は廃棄されすに残っており、継 続して以降に言当主されたレシピに渡されていきます。フラ グの言田は「フラグとロックファイル」の節て解説します。 MH を利用している人のなかには、 MH の未読情報を 活用している人もいるでしよう。 procmail は MH 形式 のリファイルに対応していますが、ファイル名の規則に関 して MH と一貫性をもたせるだけで、未読情報は更新さ れません。そこで、 MH のコマンドを使って、より MH らしくリファイルしてみます。 : 0 : week1yreport/$LOCKEXT * ASubject: . *Week1y Report ー rcvstore 十 weeklyreport 上のレシピでは、 Subject: 行に、 Weekly Report" が 含まれるメールを MH の rcvstore コマンドを使ってリ ファイルします。 rcvstore コマンドが未読情報を更新す るので、 procmail を使って自動的にリファイルしても、 帯長がすれることはありません。 最初の行に見置れない文字列か書かれています。これは procmail がメールを処理するとき、排他制御に使われる ロックファイルの指定です。図 2 に示したように、レシピ UNIX MAGAZINE 1998.10

4. UNIX MAGAZINE 1998年10月号

のディレクトリの下にロックファイルを生成しています。 ロックファイル名を明示的に指定しなかった場合は、出力 先のファイル名に変数 LOCKEXT の内容を続けた文字 列がロックファイル名になります。変数 LOCKEXT の デフォルト値は . lock です。 ロックが必要になるのは、 1 度に受信されるメールがか ならすしも 1 通だけとはかぎらないからです。たまたま複 数のメールか 1 司時に自分宛にきたら、メールを医するフ ロセスが複数起動します。もし、ファイルを操作するレシ ピに適合するメールが同時に 2 つ届いたら、同じファイ ルを 2 つの procmail カイ正してしまうかもしれません。 この競合状態を避けるためにロックをおこなうのです。 応用例 転送しつつリファイルする メールを中幻医してしまうと、自分の手許に受信したメー ルか残りません。次のレシピを使うと、メールの中幻医と同 時にリファイルすることができます。 morl : 0 ! suzuki@sharp : 0 c * : . *morl : 0 UNIX MAGAZINE 1998.10 ルアップ接続を利用している場合などは、大きなメールを 合があります。しかし、プロバイダへのアクセスにダイヤ 自分が加入しているプロバイダにメールを中幻医したい場 サイズによって振り分ける ファイルされます。 コピーが残ります。コピーは 2 番目のレシピに渡り、リ ピに c フラグが付いていますから、メールか沖幻されても いので、かならす実行されます。プロック中の最初のレシ ています。プロック内のレシピには条件か記述されていな まれているメールに対して、さらに 2 つのレシピを適用し こではネストプロックを使っています。、、 m 。 ri " が含 連載 / UN Ⅸ知恵袋ー① 1 行目のフラグのあとには、 ・ co ・ JP クファイル名か指定できます。 ( コロン ) に続けてロッ この例ではリファイル先 転送するのがためらわれることも多いと思います。次のレ シピを使って小さなメールだけを転送しましよう。 : 0 * く 1000 ! keiichi@my—provider. com のレシピを試してみましよう ( 誌面の都合ー E 、て折り返 み飛はしたりしている人もいるのではないでしようか ? 次 信する人のなかには、デコードの手間がかかるメールを読 で号化するものがあります。毎日たくさんのメールを受 本文で 7 ビット文字集合しか使っていなくても MIME を読んでいる上司がいます。最近のメーラーのなかには、 よう。実際、私の部門には mail コマンドを使ってメール ーはもっとも乗り換えたくないソフトウェアのひとつでし ポートするものか増えてきました。しかしながら、メーラ UNIX で利用できるメーラーも、去もでは MIME をサ MIME メールの自動デコード 説します。 ルに適合します。、、く " については「特殊な牛」の節で解 を卩串ヾる条件です。上のレシピは 1 , 000 バイト飛閊のメー くはメールのサイズ 初めて見る条件カ咄てきました。 しています。以ート 1 司様 ) 。 : 0 * Tontent—Type : *text/plain ; *charset=iso—2022—jp : 0 fbw * AContent—Transfer—Encoding : ー mimencode —u : 0 Afhw *base64 ー formail —I "Content—Transfer—Encoding : 7bit" ます、メール本文に含まれているデータの種類がテキ ストであることと、文字集合が日本語 (iso-2022-jp) で あることを石忍します。次に、 base64 によって符号化さ れているかどうかを調べます。符号化されている場合は、 mimencode コマンド 2 をフィルタとして使って復号化し ます。フィルタとしてコマンドを動作させると、コマン ドの出力が次のレシピの入力になります。ですから、この 例では mimencode によって復号化されたメールが次の 2 Metamai レヾッケージに含まれています。 41

5. UNIX MAGAZINE 1998年10月号

連載 / UN Ⅸ知恵袋ー① 表 2 定斉みの正規表現 TOwo 《T0ー0da7 ℃ ss AFROM_DAEMON AFROM_MAILER 宛先に社 ) 0 を含む 宛先に祠市℃ ss を含む。 0 との違いはヘッダセパレータ ( : ) に続く無視する文字。 0 の場合は、 w 。か現 (. * [A-a-zA-Z0-9-. ] ) ? " という正規表現を使うが、 0 ーの場合は、 ( . * [Aa-zA-Z] ) ? " になる れる前に メール・エージェントから発信された デーモンプロセスから発信された formail コマンドの一 s スイッチのあとにコマンドを書 くと、分割された各メールがコマンドに渡されるようにな ります。 重複メールの排除 formail コマンドを使って重複メールを省いてみます。 各メールには、全世界で一意に識別できることを目的とし たメッセージ ID が付与・されます。あるメールが複数の メーリングリストに発信され、なおかっ受信者がそれら複 数のメーリングリストに参加していると、同し内容のメー ルが別々のメーリングリストから重複して届きます。これ らのメールには同一のメッセージ ID が付いていますか ら、理言勺には削除可能です。次のレシピを使うと、重複 メールをある程度まて排除できます。 : 0 Wh: msgid. lock ー formail —D 8192 msgid. cache -D スイッチはメールのメッセージ ID を調べ、過去に 受信したメールと重複していないかを査します。過去の メッセージ ID は msgid. cache ファイルに 8 , 192 ノヾイ トぶん保存されています。 ループの回避 メールの自重丿処理で厄介なのがルーフ。の多をドです。ルー プを防ぐもっとも簡単な去は、すでに処理がすんだメー ルに印を付けておき、再度そのメールがきたら無視すると いうイ督目みを入れることでしよう。 * ! AX—Loop: shima@soft . sharp. co ・ jp ! formail —A "X—Loop: shima@soft . sharp ・ CO ・ JP ー $SENDMAIL -oi keiichi@my-provider.com このレシピは、受信したすべてのメールを別のアドレ スに転送する例です。お互いのアドレスで同様の処理を すれば、すべてのメールが両方のアカウントで受信できま すが、ループが発生するのでこれを防ぐ必要があります。 formail コマンドの一 A スイッチはヘッダを追加するスイ UNIX MÄGAZINE 1998.10 ッチです。変数 SENDMAIL には、各システムの send- mail コマンドのノヾスが設正されています。 keiichi@rny- provider.com でのレシピは次のようになります。 これまでの例て示したとおり、 procmail では処理対象 のメールを選別するために正規表現を使うことができま す。たとえば、 T 。 : 行に shima と書かれているメールを 条件として指定する場合は、 と表現します。厳密に shima という文字列だけを指定し たけれは、 ] *shima$ とします 9 、、 [ " と、、 ] " のなかは空白文字とタブ文字です。 それでは、宛先として shima という文字列が含まれ ているメールを指定したい場合はどうしたらよいでしょ うか。宛先か書かれているメールヘッダとしては、 To: 、 Cc: 、 Bcc: が考えられます。もっと広い意味で宛先を捉え れは、 Apparently-To: や Resent-To: もあるでしよう。 これらをいちいち手作業で指定しなくてもいいように procmail にはいくつかの定斉みイ E 規表現があります。 特定の文字列が宛先に含まれているメールを識別するに は、次の表現を使います。 * ATOshima TO " が定斉みの正規表現です。あとに続く文字列が 宛先を示すヘッダに含まれている場合に適合します。宛先 を示すヘッダとは、 To: や Cc: 、 Bcc : のほか、それらに Original- や Resent- 、 ApparentIy- などカ絲はみ合わされ : 0 c * !AX—Loop: shima@soft . sharp ・ co ・ jp ! formail —A "X—Loop: shima@soft . sharp ・ co ・ JP ー $SENDMAIL —oi shima@soft . sharp ・ co ・ jp 定義済み正規表現 43

6. UNIX MAGAZINE 1998年10月号

レシピに渡されます。ただし、レシピに適合したメールは 廃棄されてしまうので、フィルタとして使うレシピの次に 書くレシピでは通常 A フラグを指定します。フィルタと * Tontent—Type: . *App1ication/vnd\. ms¯excel ; して動作するように指定しない場合は、たとえコマンドを ! shima—pc@soft . sharp. CO ・ JP 使ってメールの内容を変更したとしても、次のレシピには 変更前のメールか渡されます。 f フラグによって材引こ 最初のレシピが Microsoft Word 文書が添付された 指定した mimencode コマンドがフィルタとして動作す メールを転送する例です。ほんとうは、この条件だけで るようになります。 b はメールの本文を動作行に渡すフラ Word 文書であると判断することはできないのですが、は 久 w は動作行で指定したコマンドの実行終了を侍つフラ かに参照すべき有効な情幸ゞありません。念のために、自 分自身にコピーを医しています。 2 番目のレシピは Mi- ネストプロック中の 2 番目に記述してあるレシピには crosoft ExceI 文書を転送します。 A フラグが付いています。よって、このレシピはネストプ メールを分割する ロックの最初のレシヒの条件に適合した場合にのみ実行さ れます。 2 番目のレシピには条件か書かれていないので、 メーリングリストのなかには、ダイジェスト版メーリン 無条件に動作行カ躾行されることになります。動作行では グリストを運用しているものがあります。ダイジェストと formail コマンドをフィルタとして起動して、、、 Content- は、過去数通から数一通のメールを 1 つのメールにまとめ Transfer-Encoding: 7bit" というへッダを挿入していま て送るサービスです。リアルタイムにメールの内容を石忍 す。 formail コマンドは、「 formail コマンド」の節で解 する必要がない場合や、一尉寺できるメールの最大数の関係 見します。 から各メールを 1 通すっ受信することに間題がある場合な どに利用されます。 、 Vindows テータを転送する f 。 rmail コマンドを使うと、ダイジェスト版のメールを パソコン関係の仕事をしていると、「ああ、世の中は 分割することができます。 Microsoft Windows を中心に動いているのだな」と感じ ることがあります 3 。私のメールポックスには Microsoft * To : . *pinball—fun—digest@pinball . com word や Microsoft Excel のデータを添付したメールが ー formail —ds > > pinball-fun 毎卓責み上げられます。ふだん Emacs と Mew でメール を読んでいるのですが、このときはかりは PC メーラーを formail コマンドの言田は「 formail コマンド」の節を 利用したほうか便利です。もっとも簡単なガ去は、自分自 参照してください。ー d スイッチはメールの区切りを推測 身に再送して再度 PC メーラーを使ってメールを読むこ するスイッチです。通常は、、 Fr 。 m [ スペース「 ([ スペー とですが、ちょっと面倒です。そこで、次の方法を使って ス ] は空白文字を表す ) て始まる行をメールの区切りとし みます。 て認識します。ー d スイッチを付けることで、 MIME の メッセージ・ダイジェストなどを分割できるようになりま 1. PC メーラー専用のアカウントを作る。 す。 -s スイッチはうリを示すスイッチです。分割された 2. Microsoft 製品のデータが忝付されているメールを PC メールは再度繋げられてオ剽售出力に出力されます。上の例 メーラー専用アカウントに転送する。 では pinball-fun というファイルに mbox 形式てオ褓内さ これを実現するレシピを以下に示します。 れることになります。 MH を使っている場合は以下のレシピを使います。 連載 / IJN Ⅸ知恵袋ーの ! shima—pc@soft . sharp ・ CO ・」 p 二二ロ : 0 * Tontent—Type : . *App1ication/Octet¯Stream; . *name= 3 丘、この感覚も麻痺してきましたが・・・ : 0 * To : . *pinball—fun—digest@pinball . com ー formail —ds rcvstore + pinball—fun 42 UNIX MAGAZINE 1998.10

7. UNIX MAGAZINE 1998年10月号

連載 / IJN Ⅸ知恵袋ー① 表 5 formail コマンドのオプション・スイッチ スイッチ —D m 佖工 / e れ idcache -x headerfield -X ん印 d e -a ん e 佖 de 震五 e -A ん der e -i headerfield -I ん der e -u ん印 der e -U ん d e -R 0 五 e newfield + s んゆ ー ot 佖 / ¯P ーⅡ [maxproc] -m m 乞れ五 e s ェスケープをおこなわない。たとえはメール本文に含まれている From て始まる行や、 -r スイッチて生 成する引用文がエスケープされなくなる 工スケープ文字を孑定する。デフォルトは、 > " 入力されたテキストが、 Fr 。 m [ スペース ] " で区切られたメールポックス形式であると仮定する。 Content-Length: 行は無視される 複数行・にわたるヘッダを 1 行にする。行単位での処理をおこなうフィルタに渡すときなどに使用 ヘッダ名と値のあいだに空白文字を入れる。ヘッダ名だけで中身がないへッダは削除される。また、 -x スイッチで値を取り出すときに、値の前後の空白文字を省く メールポックス形式でないメールをそのまま素通しする リプライへッダを生成する。もとになるメールのヘッダは、 X-Loop: を除いてすべて取り去られるので、 残したいへッダがある場合は一 i スイッチで指定する -r スイッチでリプライを生成する際、メール本文を引用する メールをう墻ける。かならす最後に扣疋。 -s スイッチよりあとの引数は分割したあとのメールを入力す るコマンドと角 ( される。コマンドカ甘旨定されなければ、うリしたメールを再隻繋ぎなおして標準出力に 出力する うリしたメールを処理する際に、各メールの処理カ鮗了するのを待たすに並行して処理する。 を指定することで、同最大処理数を制限できる メールの区切りを表す、、 Fr 。 rn [ スペース ] " の前に空行がなくても区切りと判断する。通常のメールポッ クス形式では、 2 通目以降のメールは、 [ 改行 ] Fr 。 m [ スペース ] " で区切られる メールポックスの形式に完全に適合していなくてもメールの区切りを擒則する minfields で指定した数だけへッダか L たら、そこをメールの区切りであると判断する 工ラー出力を抑制する。デフォルトて指定されているので、エラー出力が必要な場合は、一 q ースイッチ を指定 メールのメッセージ ID と、 idcache ファイルに保存されているメッセージ ID を上交する。同しメッ セージ ID が発見されたら、重複メールと判断して無守ル idcache の大きさは maxlen で指定する 指定されたヘッダの値を出力する 指定されたヘッダの値をへッダ名も含めて出力する 指定されたヘッダを追加する。ただし、すでに同しへッダがある場合は無視される。特例として、 Message-ID: と Resent-Message-ID: を値なして指定した場合、 formail が自重加勺にメッセージ ID を言 1 算して追加する 同一ヘッダの存にかかわらす、指定されたヘッダを追加する -a スイッチと同しただし、すでに同しへッダか有在した場合、もとのヘッダのツ朝頁に、 Old ー " カ咐く -i スイッチと同しただし、すでに同しへッダか存在した場合、もとのヘッダか削除される 最初に現れたん e 祠 e e のみを残し、あとに出てくる同しへッダを削除する 最後に現れたん e 祠 e e のみを残し、あとに出てくる同しへッダを削除する ヘッダ名を置換する メールを分割する際、最初の s んゆ通のメールを無視する メールをうリする際、最初の t 。 t 襯通のメールのみ出力する るのが一ヨ麺勺なようです。 procmail はメーラーと独立し て動作するため、あらゆるメーラーに対応できます。また、 リファイルだけでなくコマンドやフィルタの実行ができ るため、より柔軟に、必要であればフィルタコマンドを 自作することでニーズに合った処理をおこなうことができ ます。 UNIX MAGAZINE 1998 ユ 0 しかし、柔車欠性か高いということは、危険な操作ができ ることも未します。メールのループなどは自分だけでな く、周りの利用者にも迷惑をかけかねないので一ト分に注意 して使うよう心掛けましよう。 47 ( しま・けいいちシャーフつ

8. UNIX MAGAZINE 1998年10月号

連載 / IJN Ⅸ知恵袋ーの 表 3 レシピに指定できるフラグ メールヘッタ部に対して egrep をおこなう ( デフォルト ) メール本文に対して egrep をおこなう egrep の際に、大文字と小文字を区別する。指定しなけれは、大文字と小文字の違いを無視 A や a フラグが付いていない直前のレシピが条件に適合した場合にのみ、このフラグが付けられたレシピが実行される。 AND に相当 A フラグと同しだが、直前のレシピの重川 1 ミが正常終了している場合にのみ実行される 直前のレシピが実行されなかった場合にのみ、このレシピかま行される。 E フラグが付いたレシピが連続して現れた場合、 最初のレシピか実行された場合は 2 番目のレシピは実行されない。 ELSE IF に相当 直前のレシピの夫行が失敗した場合にのみ、このレシピかま行される 条件に適合した場合、メールヘッダを重川行 j ・に指定されているコマンドやメール中幻先に送る ( デフォルト ) 条件に適合した場合、メール本文を重川 1 三行・に指定されているコマンドやメール中幻先に送る ( デフォルト ) 重川 1 ミ行に書かれているコマンドをフィルタとして取り扱う 条件に適合したメーノレのコピーを作り、以後のレシピに渡す。ネストプロックてイ吏うと、 1 つはそのまま処理され続け、 フラグによって生成されたコピーはネストプロックの外べ度される 重岶三行・に指定したフィルタやコマンドカ鮗了するまで待っ w フラグと同じだが、フィルタやコマンドカ咄力するエラーメッセージを無視する 書込みェラーを無視する メールの翆毛か空行て終っていなくても、そのまま処理する。すなわち、毛の空行がない状態のまま、重三行・に渡される て始まります。このメールを印刷したい場合は次のレシピ たヘッダです。 TO か表す正規表現を展開するのはたいへ を使います。 んなので、誌面に書くのは控えます。 procmaiIrc(5) のオ ンライン・マニュアルを参照してください。 : 0 Bb また、デーモンプロセスが発信したメールを識別するた ー lpr めにが、メール・エージェントが発信し たメールを識別するために AFROM-MAILER がそれぞれ定 また、単語の前後を表す正規表現として、、、 \ く " と 義されています。定義済み正規表現の一覧を表 2 に示し 、 \ > " があります。これらは、、に a ー zA ー ZO ー 9 」 " と等価で ます。 す。正規表現に適合した部分文字列を取り出すには、、 \/ " を使います。たとえは・、 Subject : 行から文字列を取り出 し、取り出した文字列でファイルを作成するレシピは次の ようになります。 グ ラ •H k 拡張正規表現 procmail は、メールの処理に有用な独自の正規表現を 備えています。たとえは、複数行にまたがる文字列に正規 : 0 bw * -Subject: meeting \ / に 表現を適用したい場合は次のようにします。 ー cat > > $MATCH : 0 B \ よりもあとの正規表現に適合した文字列は、変数 * -title: . **author: . * MATCH にイ翻タされます。たとえは、次の内容のメール ー lpr が届いた場合、 today というファイルが作成されてメール このレシピは、 title: と author : か連続してメール本文 の本文かオ褓内されます。 に現れた場合に印刷する例です。 procmail では、正規表 To : shima 現中に出現する、、を改行とみなします。 $ も同様に SubJect : meeting today 改行を表します。 内容 : 例の件 正規表現の適用範用の頁や末尾を表すには を使 場所 : 例の場所 います。 PostScript か書かれたメールは、本文が、、 % ! " 時間 : 9 : 00 44 UNIX MAGAZINE 1998.10

9. UNIX MAGAZINE 1998年10月号

連載 / UN Ⅸ知恵袋 - ① 図 1 ロック機構をチェックするティレクトリの指定 ( 略 ) 1 3i11 temporarily use a testdirectory named locktest in the f0110wing directories : /tmp If you would like t0 add any , press return tO continue : please specify them below, す。 To : に自分のアドレスか書かれているメールは、ほか のメールよりも重要です。できるだげ早く目をとおし、必 要ならは返事を作成しなけ川まなりません。自分宛ではな いメールや、メーリングリスト宛のものはすこし優先度が 下がります。これらはいったん溜めておいて、時間ができ たときに読むことになります。こうすることで、流量の多 いメーリングリストに邪魔されることなく、緊急のメール に対応できるようになります。 グルーフ。の言算機や部門の言算機を管理している方も多 いと思います。私も数台の計算機を管理しています。通 常、共有される計算機では重要なサービスが運用されま す。共有ディレクトリを提供する NFS サーバー ノヾック アップ・サー メーノレサーノヾー ュースサーノヾー Web サーバーなどです。これらのサービスを提供するフ ログラムは、定期的、あるいは特別なイベントがプーする たびにログを残し、管理者へメールを送信します。言 1 ・算機 管理者の朝は、これらのログを見ることから始まるといっ ても過言ではありません。提信けるサービス、管理する計 機数か増えると、比例してログメッセージも増えていき ます。 procmail は、受信した電子メールを調 , ヾ、ルールに従 って処理するプログラムです。メーリングリストやログメ ッセージなどて膨れあがったメールの洪水を分岐させたり まとめることで、受信者を助けてくれます。 たとえは、特定のメーリングリスト宛のメールを自重加勺 にリファイルしたり、特定のサプジェクトのメールを自動 的に転送したりできます。また、 procmail は sendmail のローカルメーラーとして使うこともできます。さらに sendmail のルールを言当することで、メールフィルタと しても利用できます。ただし、今回はローカルメーラー メールフィルタの機能については触れません。メールの自 動処理に点を絞ります。 UNIX MAGAZINE 1998.10 さっそくインストールを始めましよう。 procmail のインストール procmail は、 ftp://ftp.informatik.rwth-aachen.de /pub/packages/procmail/ から引辭斤版が入手できます。 去斤バージョンは 3.11pre7 です。国内なら、 PC UNIX 関連の FTP サイトから入手するのがよいでしよう。た とえは、 ftp://ftp.jp.freebsd.org/FreeBSD/distfiles/ procmail-3.11pre7. tar. gz などです。 アーカイプを展開したら、 Makefile と config. h を環境 に合わせて修正します。通常は以下の項目を編集するだけ で一ト分なはすです。 編集カ鮗了したら make します。はとんどすべて自動 回はメールフィルタとしての使い方は解説しません。 リを指定します。初期値は /etc/procmailrcs です。今 イルタの内容を記したファイルを各内するディレクト procmail をメールフィルタとして利用する場合の、フ 未な設定ファイル イルを指定します。初期値は /etc/procmailrc です。 config. h の ETCRC マクロでシステム全体の成疋ファ ・システム全一本の設疋ファイル トールされます。 値は /usr で、 /usr/bin 以下に実行ファイルがインス ストールするべース・ディレクトリを指定します。初期 MakefiIe の BASENAME 変数で procmail をイン インストーノレ、ス fcntl() 、 loclf() などの方法を利用しますが、これらのファ procmail では、ファイルのロックのために flock() 、 を要求されるところがあります ( 図 1 ) 。 で作業か進みますが、 1 カ所だけ、ディレクトリ名の入力 37

10. UNIX MAGAZINE 1998年10月号

連載 / IJN Ⅸ知恵袋ーの イルロック機オ冓は、ファイルシステムの実装によっては正 しく動作しない場合があります。 procmail に刊属してい るインストール・スクリプトは、実際にファイルを生成し てロック機構が正しく働くかどうかを調べます。その際 チェックすべきファイルシステムを利用しているディレク トリを孑ぐする必要があります。デフォルトでは、 /tmp と、、 . " を調べます。 NFS などの特殊なファイルシステム を利用しており、かっメールなどを保管する場戸励甘未な ファイルシステム上にある場合は、該当するファイルシス テムに存する書込み可能なディレクトリを孑化てくだ さい。たとえは、ホーム・ディレクトリが共有されている 環境では、メールを一 *l するディレクトリが NFS ファイ ルシステム上にあることがあります。ホーム・ディレクト リが /home/shima で、メールを保管するディレクトリ が /home/shima/Mail なら、追加でチェックするディ レクトリとして /home/shima/Mail を指定します。 無事に make か終了したら、スーパーユーサーになっ す。 usr man/manö/procmailsc. 5 usr/man/man5//procmaiIrc.5 usr//man/man5/procmailex.5 usr/man/manl/lockfile. 1 ・ /usr man/manl/formail. 1 ・ /usr/man manl/procrnail. 1 /usr/bin/mailstat /usr/bin/formail /usr/bin/lockfile ・ /usr/bin/procrnail make install で以下のファイルがインストールされま (make install-suid の出力 ) # make install—suid (make install の出力 ) # make install てインストールしてください。 38 されます。 make install-suid を実行すると、次のコマンドか実行 の代わりに指定したディレクトリになります。 Makefile の BASENAME を変更した場合は、 /usr chown root /usr/bin/procmail chgrp mail /usr/bin/procmail /usr/bin/lockfile chmod 6755 /usr/bin/procmail chmod 2755 /usr/bin/lockfile make install のときと同様に、各ファイルのディレク トリは Makefile の BASENAME で指定したものにな ります。 以 - E でインストールは終了です。 procmail の起動 通常、 procmail は . forward で起動します。 に以下の内容を言当してください。 exec /usr/bin/procmail" . forward インストール・ディレクトリが上述の例と違う場合 は、適宜修正します。あとは処理するメールのルール を設定ファイルに記述するだけです。設定ファイル名 は . procmailrc となっています。ホーム・ディレクトリ に作成してください。以ード、設定ファイルの書き方を具体 例を示しながら解説していきます。 レシピの書式 procmail は、メールか到着すると成疋ファイルのルー ルを参照します。 procmail では、メールの処理ルールの ことを、、レシピ " と呼んでいます。以後、 procmail の 例に従って、このルールをレシピと呼びます。メールがレ シピに適合したら、対応する処理をおこないます。レシピ には、たとえは次のような条イ牛か、言できます。 特定のアドレスからのメール 特定の宛先へのメール 特定のサプジェクトのメール 特定の文字列を含むメール ・指定サイズより大きい ( 小さい ) メール これらの牛に適合したメールには、さまざまな処理を 施すことができます。たとえば以下のような処理です。 ・別のアドレスへの中幻医 ・リファイル 他のコマンドの起動 UNIX MAGAZINE 1998.10