レンタルサーバ + Webシステム開発 = E-business

■レンタルサーバご利用参考資料
サーバご利用の参考にJF Project によるJF (Japanese FAQ)を掲載しています。

Linux JF(Japanese FAQ)Project.
JF は, Linux に関する解説文書・FAQ などを作成・収集・配布するプロジェクトです.

グリーンネット・トップページへ戻る


一覧に戻る
  Linux off-line mailing method(offline mailaddr with
  1account)
  Gunther Voet, freaker@xsrv.org - Belgium (CompuMed/TuCSRV)
  v1.3.2, Sat 7 february 1997 (CET)
  伊佐治  哲, isaji@mxu.meshnet.or.jp

  Linuxのメーリングシステムをオフラインで使い、ひとつのメールアドレスだ
  けで複数のユーザーメールを受信します。ネットに24時間接続させっぱなしに
  する必要はありません。 24時間オンライン接続する料金が払えないけれど(プ
  ロバイダ(ISP)に人数分の料金を払えないけれど)、メールをLinuxマシンに取
  り込みたいのであればひとつのメールアドレスを使ってこのアドレスを分割し
  てしまうことができます。あなたのアカウントがあるサーバがメールを受け取
  るのですから24時間使えることになります。 ``This howto is Copyright
  (c)1997-98 by Gunther Voet.''
  ______________________________________________________________________

  目次

  1. 著者からの注意
     1.1 Legal stuff
     1.2 著作権
     1.3 フィードバック
     1.4 ディストリビューション
     1.5 更新履歴
     1.6 何を使っているか?
     1.7 謝辞

  2. 前置き
     2.1 序文と叙述
     2.2 興味深い点
     2.3 知っておくべきこと
     2.4 2つの異なる方法

  3. 必要なもの
     3.1 Linuxマシン
     3.2 Linuxマシン用の特別なアカウント
     3.3 Fetchmail
     3.4 Procmail
     3.5 メールアカウント
        3.5.1 DNS レコード (MX)
        3.5.2 あなたのアカウントへのフォワード :)

  4. メールを全て受け取った、次は?
     4.1 ".fetchmailrc"ファイルを作る
     4.2 ".procmailrc"ファイルを作る
        4.2.1 "ヘッダ(to:)"による配送
        4.2.2 "subject: touser"による配送
     4.3 "nosuchuserfile"
     4.4 crontabファイル
        4.4.1 checkformail
        4.4.2 crontab
     4.5 管理者側での設定
        4.5.1 (古いsendmail)sendmail.cfへの行追加
        4.5.2 (新しいsendmail)sendmail.cfへの行追加
        4.5.3 (新しいsendmail)/etc/sendmail.cwあるいは/yourdir/sendmail.cwファイルの編集
        4.5.4 /etc/maildomainsファイルを作る
        4.5.5 動作させてみましょう!

  5. 自動化
     5.1 骨組み("skeleton")
        5.1.1 ".procmailrc-header"について
        5.1.2 ".procmailrc-footer"ファイル
     5.2 addmail スクリプト

  6. ヘルプ!(ため息)
     6.1 自動スクリプトが動作しません:
     6.2 "anonymous mailserver"は何を意味していますか?
     6.3 catが死にました
     6.4 dogが死にました
     6.5 Linuxって?
     6.6 メールアカウントの見つけ方について教えて下さい。
     6.7 なぜ「あとで情報を追加します」が削除されたのですか?
     6.8 「ドメイン名」はどうやってわかるのですか?
     6.9 なぜこんなもん(f*cking lame)をつかうんだ?
     6.10 Nosuchuserfileって?
     6.11 ユーザーもメールの読み書きができますか?
     6.12 ユーザー全員用のシェルアカウントが必要ですか?
     6.13 skeletionって?
     6.14 Addmailって?
     6.15 なぜ不親切なんですか?
     6.16 あなたのおおげさな言葉に周りから不満がでません?
     6.17 このHOWTOが他よりも変わっているのはなぜ?
     6.18 ローカルではドメインは動作するのですがリモートで受信できない
     6.19 dogが死にました
  7. 最後に

  ______________________________________________________________________

  1.  著者からの注意

  損害およびお怒りに関しては著者は保証していません。私には責任はないので
  す...もし質問や提案をこのFAQに付け加えたいなら、また間違った箇所を見つ
  けたという場合でもフィードバックをご覧下さい。

  この文書を読む前に知っておくべきことは、ファイル名とファイルタイプを以
  下のように表示しているということです。

       (*** < file > *** text ***)     .procmailrc

  これは".procmailrc"というテキストファイルを意味しています。上
  で"text"と表示している箇所は"code"となっている場合もあります。また使用
  するファイル名を示していることもあります。パスが書かれていない場合は適
  当に補って下さい(多くの場合このファイルはホームディレクトリに指定され
  ます。例えば/home/mailerディレクトリのメール"user" といった具合です)。

  1.1.  Legal stuff

  この文書における提案や例によって生じた物理的、商業的、道徳的損害につい
  て、作者およびこのHOWTOへ寄与してくれた人達には責任はありません。この
  ドキュメントの情報は著者の知っていることや経験から構成されていますが、
  どちらも何かミスがあるかもしれません。商標はそれぞれの保有者に所有権が
  あります(著者は商用的使用には関与しません。このドキュメントに文章を追
  加をしてもこの免責事項は変更されません)。もしcatが死んでもこのドキュメ
  ントは重要です。責任は持ちません。

  1.2.  著作権

  This document and contents are Copyright (c)1997-98 by Gunther Voet.
  Unauthorized (re)production in any form is explicitly allowed and even
  strongly encouraged as long you don't change the contents of it
  without contacting the author (Gunther Voet). If you quote the
  document as whole or a part of it, there needs to be a Copyright
  "hint" or link to the derived work. "The HOWTO documents are
  copyrighted by their respective authors". The "HOWTO copyright" will
  discuss what can be done and what cannot be done with this document.
  If it is used in a commercial way, the author should been noticed for
  such distributions. Exceptions on this copyright may be granted under
  certain conditions with a written letter or e-mail to the author. For
  more info about the standard HOWTO disclaimer, please contact
  gregh@sunsite.unc.edu.

  *PLEASE* *IF* you are going to make a system based on this HOWTO, then
  PLEASE give me the copyright :) heh ... - i am not that cruel :)). I
  mean by a system "a package" - NOT the mailsystem itself - altough it
  is some appreciative thingy i would be included :)) i can always use
  one email address more for more flaming :)) (just kiddin').

  日本語訳:(内容は原文が優先されます)

  このドキュメント/文章はGunther Voetに著作権があります。許可していない
  任意の形式での改変は明白に認めます。また著作権を変更しない限り著
  者(Gunther Voet)に連絡せずに改変してもかまいません。この文書の全文、一
  部を引用する場合はCopyright 付けるかオリジナル文書へのリンクを付けて下
  さい。"HOWTOドキュメントは各作者に著作権があります"。"HOWTO copyright"
  はこのドキュメントでできることとできないことについて書かれています。も
  し商用的な目的で使われる場合は、そのような配布について著者に知らせて下
  さい。この著作権の例外は手紙や電子メールで連絡した特定の条件のみ許可さ
  れます。 HOWTO免責事項についての詳細はgregh@sunsite.unc.eduに連絡して
  下さい。

  ***お願い***このHOWTOに基づいたシステムを立ち上げたならコピーライトを
  私に下さい。私は厳しい人間ではありません :))。システムパッケージを意味
  していてメールシステムそのものについてではありません(これらのシステム
  には感謝していますが:))。私は文句のメール用アドレスも用意しています
  :)) 。

  1.3.  フィードバック

  このドキュメントを読んでいる方およびユーザーの方にこのHOWTOが役立つこ
  とを期待します。提案、訂正。コメント(お怒りのメールは除きます :))があ
  れば freaker@xsrv.org まで連絡下さい。次回のバージョンで反映させたいと
  思います。このドキュメントを商業的な目的で出版する場合は献本をお願いし
  ます。まず手紙を送って下さい。お怒りについも著者まで送っていただけます
  が/dev/nullへ行くことになるでしょう... メールサーバ上のバンド幅の浪費
  は気にしないでいいですよ :)。私は受信メールからあるユーザーを締め出す
  ようにしています(このドキュメントで説明しています)。著者のエイリアス名
  はfreaker btwです:))。サーバがダウンしていたら"freaker@ibm.net"の方で
  試して下さい。

  1.4.  ディストリビューション

  このドキュメントの最新版は
  http://sunsite.unc.edu/pub/Linux/docs/HOWTO/mini/Offline-Mailing

  -および-

  http://tuc.ml.org/om/

  (http://tuc.ml.orgもチェックして下さい)

  1.5.  更新履歴

      v1.0.0       - 初期リリース。テスト。出す前に試してみました。
                     便利で使う必要があったからです。:)
      v1.1.0       - 文書の多くの間違いを修正。章の追加。タイプミスや小さなミス
                     などの修正。
      v1.2.0       - 文法的なエラーを修正。
                   - "what-are-we-using"章の追加。
                   - Sunsiteのアドレスを追加。
      v1.3.0       - 管理用の"仮想メールサポート"を追加。
                   - 新しいサイト、メールアドレス
                   - Thanks go to ...
      v1.3.1       - SGMLに変換、細部をいくつか修正。
      v1.3.2       - 主なエラーの訂正(.fetchmailrcを.procmailrcに)
                     など(thx to Tetsu Isaji)
                   - 新しいsendmail v8.8.0+ のサポートを追加
                   - 小さなエラーの訂正
                   - システムをアップグレードしました。YAY!
                   - 日本語版が間もなく出ます。サイトなどはわかり次第お知らせ
                     します...(thx to Tetsu Isaji)。

  1.6.  何を使っているか?

  Linux 2.0.30, Pentium-166, ATI PCI-Mach64カード、Accelerated-X(Metro)
  そしてプロバイダ(現在はibmnet)にZyXEL 28k8 モデムを使ってPPP接続してい
  ます。たまにBausch 28k8モデムを使うこともあります。

  現在Linux 2.0.33にアップグレードしてUSRoboticsモデムを使っています。こ
  れでちゃんと動作しています。

  1.7.  謝辞

  o  Fred, durban.hebel.net (for allowing the pages & bot)

  o  Lifesaver, parkside.net (新しいページを作っていただいた。メールでこ
     のFAQを手伝ってくれました。そこかしこで働いているので...彼のサイバ
     ーカフェに訪れる...  おいしいコーヒーを煎れているように聞こえる :))

  o  lodus.netのサーバ管理者の方。このプロジェクトを継続してくれていま
     す。

  2.  前置き

  このシステムはどのように動作するのか、これで何ができるか、何なのか?な
  ど...これらの全ての質問にお答えします。

  2.1.  序文と叙述

  このHOWTOをオフラインLinuxユーザー/サーバに捧げます。グループや組織に
  入って全メンバーにメールアドレスを割り振りたい、しかも 24時間ずっと接
  続したままにしたりメールアカウントの料金を払わない(払えない) で...。あ
  るいはマスカレードサーバの内部ネットワークで全員にメールアドレスを割り
  振りたいという時にここで述べる方法が使えます。著者はこの方法を使ってデ
  モグループのユーザーやメンバーにメールアカウントを割り振っています(そ
  れも 24時間接続させずに)。このグループは業務用のものではなく、メールア
  クセス (また異なるIPアドレス)を入手するだけのお金はないからです。全員
  ともインターネットにアクセスしないときでもメールアドレスを使っていま
  す。以下述べる方法を使って各自のアドレスでメールを受信しています。また
  ユーザーからのメールをメールキューに蓄えておいて、メールを送ることもで
  きます。ユーザーについて変更されることはメールアドレスの追加だけで、メ
  ールヘッダの "subject"の行や"to"の行を判別する方法でメールアドレスを判
  別します。

  2.2.  興味深い点

  o  組織のメンバー全員のメールアドレス。必要に応じて接続できます。

  o  anonymousメールサービス:ユーザはメール設定ファイルをよむことはでき
     ません。そうやってメールがどこにフォワード/再ルート(rerouted)された
     かわからないようにします。

  o  お金のない(笑わないで..)グループやお金を使いたくないといった人でメ
     ンバーにメールアドレスを割り振りたい場合。

  o  マスカレードネットワーク:インターネットに接続されたサーバ。マスカ
     レードネットワークを使うユーザーはメールアカウントが必要です。

  o  「自動返信」ドキュメントを作りたい -
     "info@yourmail.dom"や"document1@yourmail.dom "といったアドレスにメ
     ールを送ると著者のHOWTO、統計値、ドキュメントといったファイルを取り
     寄せられる。

  o  必要なのはメールを取り込むためのメインサーバ用のアカウント一つで
     す。サーバに200強のメールアカウントを作れます。

  o  著者は"B"方法を使って300前後のメールアカウントを使っています。パブ
     リックサーバ(CPU:80486DX4-100MHz)で1分程度の処理です。

  2.3.  知っておくべきこと

  o  メールをユーザーに配布したり、anonymousメールサーバを作りたいといっ
     た場合全ての(フリーの)メールサービスで幸せになれるとは限りません。
     この文書に書かれていることを実行するまえに、メールサーバの管理者に
     連絡をとってみましょう。

  o  24時間接続されているシステムよりも遅いかもしれません。メールを配達
     する前にオンラインに接続する必要があるからです。

  o  メール経路(mailrouting)の管理とユーザーの追加を管理する必要がありま
     す。自動的に管理することはできません(著者は自分のサーバを「準自動
     化」しています :)。同じように試みて下さい)。

  o  多くのユーザーが対象となる場合は作業するメールサーバ上のバンド
     幅(Bandwidth)とスペースが必要です。ファイルを送る時十分なスペースが
     必要です!

  o  全てのメールは1ステップ転送されます。サーバで受け取った最後のメー
     ルは一番最後に受信者に送られます。FIFO(first in - first out)です。

  o  第1の方法(to:を判別する方法)ではユーザー名を判定しません(メールサ
     ーバの管理者によって管理されます)。第2の(簡単な)方法では受信者にメ
     ールを送るのに subject行が使われるのでユーザーはsubject行を使えませ
     ん。多くのユーザーは "subject"を忘れます...知らせておく必要がありま
     す。

  o  メールを6時間ごと(日に4回)に受信者から配送するだけで十分な場合は
     プロセスはスムーズに行われます。

  o  数分ごとにメールを送ることもできるのでオンラインのメールサーバを使
     うこともできます。しかしオンラインならこの方法を使う必要はありませ
     ん。

  2.4.  2つの異なる方法

     方法A(以下"(m(A))"とします)
        "mailsystem"はヘッダ特に"to:"行を調べます(通常の方法です)。これ
        は実際のメールアドレスです。複数のサーバアカウントやDNS(MX)エン
        トリ(例えばあなたのマシンのドメイン名など) が必要です。システム
        管理者が協力してくれるなら何の問題もありません!管理者が全てのメ
        ールを(あなたのアカウントがある)(MX)のメールドメインに再
        送(reroute)する必要があります。これは管理者の手間をかけます :)。
        管理者が親切な人なら大丈夫です :))。著者の"フリー"デモグループの
        ユーザーサービスシステムを作ってくれた管理者の方(Fred)に感謝しま
        す。 DNSへのエントリをする面倒さがあります。

     方法B(以下"(m(B))"とします)
        "mailsystem"は"subject"行を調べ、subjectで指示されているユーザー
        にフォワードします。ユーザーが見つからない場合はメールを送信者に
        返します。1つのユーザーアカウントがあるPOPサーバが必要です。
        DNSはいりません。またメールアドレスを整理するシステム管理者もい
        りません :)。メールサーバやプライベートサーバと同じようにパブ
        リックメールサーバが使えます。あなたのメールアドレスをサーバに捧
        げることもできます :)。著者は一年以上このアプローチを続けてきま
        した ... いい加減だと思いますがこの方法を使う必要についてはお話
        しません。だから著者を攻撃しないように。「メール問題」のある解決
        方法を提供しているだけなのですから :) 面倒でないなら方
        法A"(m(A))"を使いましょう。

  3.  必要なもの

  当然Linuxマシンが必要です。またインターネットに接続するものも必要です
  (i am smart - i am smart :))。モデムもありますね?電話回線や使っている
  サーバで接続する方法もわかっていますね?Fetchmail, Procmailといったソ
  フトや外部アカウント、メールアドレス、メールアカウントに対応したDNSも
  必要です。

  3.1.  Linuxマシン

  8086マシンでも動かないことはありませんが、マシン上にいくつか読み込まな
  いといけないものがあるのでできれば少なくとも80386は欲しいです :)。マシ
  ンやソフトを速く走らせたいでしょ? :)

  3.2.  Linuxマシン用の特別なアカウント

  Linuxマシン用のアカウントを作る必要があります。このHOWTOではそのアカウ
  ントを "mailservice"としておきます。"mailserver"や" mailtousers"などわ
  かるものならなんでもよいです。

             !root権限は必要ありません!

  このメールアカウントで全てのメールをシステム上のユーザーに転送します。
  またシステム外のユーザーにも転送します。通常のユーザーアカウントも作っ
  ておいて下さい。これはテスト用で"管理者"はこのアカウントを使ってメール
  アカウントの管理をします。rootになる必要はありません(これで安全!)。

  3.3.  Fetchmail

  v1.9 patch level 9 を使っています。sunsite.unc.eduから入手でき、メール
  取り込み専用に使っています。もし他のものが使いたければ読者自身でやって
  下さい!著者はこれで十分幸せです :)。詳しい使い方について
  はFetchmailのman ページを読みましょう。これはルートでインストールしま
  す。ユーザーでもできますがrootで行うのが一番よいでしょう。そのほうが確
  実です :)))。

  3.4.  Procmail

  v3.10を使っています。sunsite.unc.eduから入手できるでしょう。MDA(mail
  delivery agent)として重宝しています。配送の具合もよくオリジナルのMDAを
  使うよりもよいです。「ユーザー毎のユーザー(user-per-user)」で配送でき
  ます。root としてもユーザーとしてもインストールできます(一番いいの
  はrootでインストールすることです)。そのほうが確実です :)。どれだけ繰り
  返したことか....

  (訳注:procmailを使ったバーチャルメールについて

  http://www.first.tsukuba.ac.jp/docs/install/procmail.html

  も参照)

  3.5.  メールアカウント

  メールを出すためのメールアカウントはかならず必要です。またサーバ
  はPOPサーバであることも必要です(メールを取り込むことができ、ユーザー
  が24時間メールを送ることができるようなサーバです)。商用のものと同様に
  フリーのメールサービスが提供できます。 "subject"行を使う方法B(m(B))で
  は、これ以上は必要ありませんが、 "to:"行を使う方法Bではもう少し必要な
  ものがあります。以下それについて書きます。

  3.5.1.  DNS レコード (MX)

  あなた用のドメイン(メールドメイン)を立ち上げる必要があります。サーバの
  管理者はユーザー用にドメインを使うことはできないのでこれは必要です。サ
  ーバに接続する必要があるユーザーもいます。メールヘッダはドメインでフィ
  ルタに通されなければいけません。そこで(ドメインを除いて)サーバへのポイ
  ントをします。これはさらにコストがかかります。あるいはシステム管理者に
  「認証化されていないアドレス」(サーバへのポイント) を追加してもらうよ
  うに言うこともできます。しかし他のドメインも必要になってしまいます。

  3.5.2.  あなたのアカウントへのフォワード :)

  システム管理者はアカウントがあるドメインに全てのメールをフォワードしな
  ければなりません。その方法を知っていればこれは簡単です :) ..  あるい
  はsendmailマニュアルを読まなければならないでしょう(qmailでもなんで
  も)。あなたのアカウントのメールを送ります。あなたのメールドメインの
  フィルターを送ります。

  4.  メールを全て受け取った、次は?

  外部アカウントを作り、メールアドレスも入手しました。さらにDNSエントリ
  ーとあなたのアカウントへのフォワードも済みまし
  た。ProcmailとFetchmailもインストールしました。さあいきましょう。

  1. ここで.procmailrcファイルを作る必要があります。これにはユーザーへの
     "配送"情報が含まれています。

  2. "nosuchuserfile"を作る必要があります。メールがちゃんと配達されない
     時に送信者に知らせるためのものです。

  3. うまく動作させるため :) にメールチェック用にcrontabを使います。イン
     ターネット上に接続されている時、数分ごとにメールをチェックするため
     の簡単な方法です。

  4.1.  ".fetchmailrc"ファイルを作る

  ここで.fetchmailrcを作ります。これにはユーザー名、パスワード、MDA
  (Mail Delivery Agent)の情報が含まれています。以下はサンプルファイルで
  す。

       (*** < file > *** text ***)     .fetchmailrc

  ______________________________________________________________________
  server my.mail.server.com
  proto pop3
  user myaccountthere
  pass deepestsecrets
  flush
  mda /usr/bin/procmail
  ______________________________________________________________________

  このファイルはメールを集めるために使われます。fetchmailプログラム
  "fetchmail -vv"(訳注:fetchmailのコントロールメッセージとメールサーバ
  のエコーを表示します)を使ってテストしてみて下さい。メールが正しく配送
  されるかどうかも見てみて下さい。いくつかエラーがあるかもしれません。と
  いうのもprocmailコントロールファイルがまだ作られていないからで
  す。procmailrcファイルを作るまでテストをしなくてもよいのですが、逆にこ
  こでテストしておけば原因がprocmailrcファイルではないことはわかります。
  またprocmailrcファイルはユーザーがオーナーとなるようにしておきましょ
  う。著者の"mailservice"の場合は、ユーザー読み込み可にしてグループ/外部
  に読み込みは許可しないようにしています。(訳注:メールをプロバイダから
  受信するための)メインパスワードが書かれているからです(だからchmod 600
  .fetchmailrcとしています)。

  4.2.  ".procmailrc"ファイルを作る

  これはシステム上のユーザーにメールを転送するためのコントロールファイル
  です。上記したように2つの方法があります。メールヘッダの"to:"を使う方
  法と、"subject"を使う方法です。ファイルには配送するユーザーが含まれて
  います。"#"はコメント文で必要ないならいりません。同様にchmodコマンドで
  パーミッションを600にします (訳注:chmod 600 .procmailrc)。その他のグ
  ループついてはこれらのプライベートアドレスは必要ありません :)
  ...。"nosuchuserfile"は、procmailrc ファイルにないユーザー宛ての場合、
  送信者に戻すメールに添付されます。これにより送信者にメールが配送できな
  い旨を知らせます。

  4.2.1.  "ヘッダ(to:)"による配送

       (*** < file > *** text ***)     .procmailrc

  ______________________________________________________________________
  # (この行はデバッグのためのものです!メールサーバを通った全てのメール
  # を読めるようにするために削除しておいて下さい。
  # 全てのメールはユーザーに送る前に"passtrough"ファイルにコピーされます。
  # このファイルを読んで何が悪いのかわかります)
  :0 c
         passtrough

  # (ヘッダが"to: freaker@mydom.com"のメールは直接私のところまでフォワード
  # されます。他のメールはこのオプションにはかかりません)
  :0
  * ^To:.*freaker@mydom.com
  ! freaker

  # root@mydom.com宛てのメールはrootにフォワードされます。postmasterも同様。
  :0
  * ^To:.*root@mydom.com
  ! root

  :0
  * ^To:.*postmaster@mydom.com
  ! postmaster

  # barbara@mydom.com宛てのメールはbarbaraにフォワードされ、プライベート
  # メールアドレスにフォワードされます。
  :0 c
  * ^To:.*barbara@mydom.com
  ! barbara@her.private.one

  :0
  * ^To:.*barbara@mydom.com
  ! barbara

  #
  # この行では上記のユーザー宛てのメールがない場合、センダーにメールを戻します。
  # またリプライ用に"nosuchuser"ファイルをメールの本文に追加します。
  # 注意!"nosuchuser"ファイルを作る必要があります。- 以下のようなテキスト
  # を作っておいて下さい。
  # 「あなたがメールを届けたいユーザーはこのサーバ上にはいません。もう一度
  # やり直して下さい。どこにもいないユーザーかもしれません」
  :0
    |(/usr/bin/formail -r -k \
       -A"X-loop: mailservice@mydomain.dom "| \
         /usr/bin/gawk '{print }\
         /^/ && !HEADER \
           { system("/bin/cat nosuchuser"); \
           print"--" ;\
           HEADER=1 }' ) |\
           /usr/bin/sendmail -t

  exit
  ______________________________________________________________________

  訳注1:formail:メールをmailboxフォーマットに変換するフィルタコマン
  ド。 X-loop:の箇所は適当に変更します。またnosuchuserファイル
  は.procmailrc ファイルと同じディレクトリにおきます。また* ^To:. 行にコ
  メントを付けるとちゃんと振り分けられないことがあります)。

  訳注2:このフッタ処理の簡単な解説。

  o   |(/usr/bin/formail -r -k -A"X-loop: mailservice@mydomain.dom"

     formailコマンドで

             -r:自動返信用のヘッダを作る。Errors-To: あるいは From: のアドレス
                 を To: に指定します。
             -k:自動返信用のヘッダを作る時、引用符を付けて本文をキープします。
             -A:指定したヘッダフィールドをヘッダに追加します。
                 この場合"X-loop: mailservice@mydomain.dom "を追加します。

  としています。これを以下のawk処理にパイプします。

  o  |/usr/bin/gawk '{print }/^/ && !HEADER { system("/bin/cat
     nosuchuser");print"--" ;HEADER=1 }')

     awkコマンドによるメール処理。nosuchuserファイルの挿入。

     {print }/^/ &&
     !HEADER {
                 system("/bin/cat nosuchuser");
                 print"--" ;
                 HEADER=1
     }

  まず頭の一行を表示。HEADER=0(デフォルト値)の時はnosuchuserファイルを挿
  入してHEADER=1とします(以下この{..}内の処理は実行されず、メールファイ
  ルをprintしていくだけです)。

  以上の処理をまとめるとリプライメールは以下のようになります:

  ______________________________________________________________________
  To: MAIL_ERR@hoge.ac.jp                 <== このアドレスは Errors-To: のもの
  メールエラー                            <== ここからnosuchuserファイル
  (連絡を取りたいユーザーはこのシステムにはいません。
  受け取り人をsubjectに書いてください。
  例えば"subject: freaker"とすればfreakerにメールが届きます) <== ここまでがnosuchuser
  --                                      <== awk処理の print"--" ; の箇所。
  Subject: Re: hello
  References: <199710141701.CAA06199@dokoka.co.jp>
  In-Reply-To: <199710142352.IAA27235@dokoka.co.jp>
  X-loop: mailservice@mydomain.dom

  >こんにちは。このアドレスでいいのかな?
  >
  ______________________________________________________________________

  となります。

  o   | /usr/bin/sendmail -t

     以上の処理をしたメールを送ります。 -tオプションは、To:, Cc:, Bcc:行
     を受取人アドレスにスキャンします。つまりメッセージヘッダにリストさ
     れていてもコピーは受信しません。

  4.2.2.  "subject: touser"による配送

       (*** < file > *** text ***)     .procmailrc

  ______________________________________________________________________
  # (この行はデバッグのためのものです!メールサーバを通った全てのメール
  # を読めるようにするために削除しておいて下さい。
  # 全てのメールはユーザーに送る前に"passtrough"ファイルにコピーされます。
  # このファイルを読んで何が悪いのかわかります)
  :0 c
          passtrough

  # ヘッダが"to: freaker@ibm.net"のメールは直接私に転送されます。
  # その他のメールはこのオプションをパスします。
  # "dedicated"メールアドレスを"mailservice thingy's"で受信する
  # 時はこの行を使う必要はありません :)
  :0
  * ^To:.*freaker@ibm.net
  ! freaker

  # subject "root"のメールは全てrootに転送。
  :0
  * ^Subject:.root
  ! root

  # "subject: barbara"のメールは全てbarbaraに転送。
  :0
  * ^Subject:.barbara
  ! barbara

  # "subject: paul"のメールは全てpaulの外部メールアドレスへ転送。
  :0
  * ^Subject:.paul
  ! paul@his.personal.emailaddress

  # "subject: john"のメールは全てサーバ上の彼のアカウントに転送され
  # コピーがプライベートメールアドレスに行く。
  :0 c
  * ^Subject:.john
  ! john@his.personal.emailaddress

  :0
  * ^Subject:.john
  ! john

  # IBMからのメール(updateや情報など)は全てfreakerに。メールサービスを管理する
  # 人です。IBMはメールが戻ってくることを望んでいません!! もしあなたの
  # メールプロバイダが"newsletters"等を送ってくる場合に必要です。
  :0
  * ^From:.*newsletter@ibm.net
  ! freaker

  # デーモンからの全メッセージは捨てられました。わたしの場合はファイルに保存され
  # ます。(奈落の底に捨てるには/dev/nullを使う)

  :0
  * ^FROM_DAEMON
  throwaway

  # この行では上記のユーザー宛てのメールがない場合、センダーにメールを戻します。
  # またリプライ用に"nosuchuser"ファイルをメールの本文に追加します。
  # 注意!そのようなファイルを作る必要があります。- mine に以下のようなテキスト
  # 「subject行にユーザー名が書かれていません。ユーザー宛てにメールを送る時は
  # "Subject: user" とヘッダに書いて送って下さい。例えば"subject: freaker"では
  # freakerにメールが送られます」。ファイルは長くも短くもできます  :) ...
  # "mailservice@mydomain.dom"はあなたのサーバと他のサーバのあいだをループして
  # います。正しいメールアドレスを使って下さい!
  # "don't spend 500$ at your ..."といったようなsubjectではエンドレスループ
  # を作ってしまいます。

  :0
    |(/usr/bin/formail -r -k \
       -A"X-loop: mailservice@mydomain.dom "| \
         /usr/bin/gawk '{print }\
         /^/ && !HEADER \
           { system("/bin/cat nosuchuser"); \
           print"--" ;\
           HEADER=1 }' ) |\
           /usr/bin/sendmail -t

  exit
  ______________________________________________________________________

  4.3.  "nosuchuserfile"

       (*** < file > *** text ***)     nosuchuser

       ______________________________________________________________________
       The user you wanted to contact is not present at this system.

       Please use the subject line as recipient - example "subject: freaker" would
       send mail to freaker on this system.

        ------------------------------------------------------------------
       (日本語例)
       連絡を取りたいユーザーはこのシステムにはいません。
       受け取り人をsubjectに書いてください。
       例えば"subject: freaker"とすればfreakerにメールが届きます。
       ______________________________________________________________________

  4.4.  crontabファイル

  もしcrontabの動かし方を知らないなら :)適当なマニュアルを読んで下さい
  :) ...。ここで"checkmail"ファイルを作る必要があります。接続されたとき
  に設定ファイルと同じように調べるものです。著者はPPP接続をしていますの
  で PPP接続がつながったときの見方について例を挙げています。そして10分毎
  にcronを使って送りだしています。これはなんだかいい加減なものに思われる
  かもしれませんが決してそんなことはありません!

  4.4.1.  checkformail

  ここで.checkformailファイル(実行属性にしておきます)が呼ばれ、PPP接続さ
  れている時は探します。接続されればメールを受信することができま
  す。crontabは以下のcronエントリーを使った時にこのファイルを使います。

       (*** < file > *** code ***)     .checkformail

  ______________________________________________________________________
  #!/bin/sh
  #

          cd /home/mailservice

          if [ -f /var/run/ppp0.pid ]; then
          /usr/local/bin/fetchmail -s > /dev/null 2>&1
  fi
  ______________________________________________________________________

  [訳注:/home/mailserviceに移動して、 /var/run/ppp0.pidがある場合(PPP接
  続されている場合)fetchmailを実行します。ロックファイルは/var/lockディ
  レクトリにあり、例えば PPP接続が確立されていると:

          /var/lock/LCK..ttyS0:
          中身    0000019881

          /var/run/ppp0.pid:
          中身    19881

  となります。"2>&1" はエラー(出力ストリーム番号2)を通常の出力(出力スト
  リーム番号1)に送ることを意味しています。fetchmail の -s オプションは
  サイレントモードです]

  4.4.2.  crontab

  cronエントリーファイルはcrontabにロードされる必要があり、ここでは 10分
  ごとに.checkformailを呼び出すようにします。コンソール上には何の情報も
  表示しません(/dev/nullにリダイレクトしているからです)。

       (*** < file > *** text ***)     cronentry

       ______________________________________________________________________
       0,10,20,30,40,50 * * * *  /home/mailservice/.checkformail 1> /dev/null 2> /dev/null
       ______________________________________________________________________

  4.5.  管理者側での設定

  "方法A"を使う時は管理者側のサイトで設定しなければいけません。電子メー
  ルはちゃんとしたドメインから出ていきます。とてもシンプルです。いったん
  こうしてしまえばこの方法で猛烈に動いてくれるでしょう。またシステム管理
  者がもっと他の方法をつかっているなら"方法A"などいらないし、あなた側で
  設定する必要もありません!!!!

  sendmailの新しいバージョンを使う時は"古いsendmail"トリックは多分動作し
  ないでしょう。メールルーティングを動作させるために "新しいsendmail"を
  参照して下さい。

  4.5.1.  (古いsendmail)sendmail.cfへの行追加

  以下の行を/etc/sendmail.cfに追加して下さい。ドメインファイルが読まれま
  す。下では"ruleset 98"とコメントが書かれています。というのもいったんエ
  ラーが出たら何が悪いのか見つけるのに一苦労するからです(そしてそれを著
  者は知っています :) DuH)。

       (*** < file > *** add ***)    /etc/sendmail.cf

       ______________________________________________________________________
       # 操作ドメインのデータベース

       Kmaildomains btree /etc/maildomains.db

       # これらの行を追加 *IN* Ruleset 98 ! (under Ruleset 98).

       R$+ < @ $+  . >         $: $1 < @ $2 > .
       R$+ < @ $+ > $*         $: $(maildomains $1@$2 $: $1 < @ $2 > $3 $)
       R$+ < @ $+ > $*         $: $(maildomains $2 $: $1 < # $2 > $3 $)
       R$+ < @ $* > .          $: $1 < @ $2 . >
       ______________________________________________________________________

  4.5.2.  (新しいsendmail)sendmail.cfへの行追加

  新しいsendmailリリース(sendmail v8.8.7, 8.8.8でテストしました)では、方
  法Aは無視して以下の行を追加します...

       (*** < file > *** add ***)    /etc/sendmail.cf

       ______________________________________________________________________
       # Database of handled domains

       Fw/etc/sendmail.cw
       Kvirtuser btree /etc/maildomains.db

       あるいは(上のディレクトリ以外の場所に置いている時は):

       Fw/yourhomedir/sendmail.cw
       Kvirtuser btree /yourhomedir/maildomains.db
       ______________________________________________________________________

  4.5.3.  (新しいsendmail)/etc/sendmail.cwあるい
  は/yourdir/sendmail.cwファイルの編集

  sendmail.cwファイルを他の場所に置いてつかっている時
  は"/etc/sendmail.cw" を"/yourhomedirectory/sendmail.cw"に置き換えて読
  んでいって下さい。
  このファイルは常に存在していて作る必要はありません。もしすでにあれば古
  いデータを上書きしないようにして下さい。

  はじめに/etc/sendmail.cwファイルを作ります。

       (*** < file > *** text ***) /etc/sendmail.cw

       ______________________________________________________________________
       mydomain.dom            mailservice
       ______________________________________________________________________

  4.5.4.  /etc/maildomainsファイルを作る

  はじめに/etc/maildomainsファイルを作ります。特定のユーザーに送る。例と
  して、 [もうご存知のように"mailservice"の箇所は好きなものにして下さ
  い。ここにあなたのログイン名を書いてもかまいません(著者の場合はfreaker
  (フリーク)]としています。

  古いsendmailバージョン:

       (*** < file > *** text ***)     /etc/maildomains

       ______________________________________________________________________
       mydomain.dom            mailservice
       ______________________________________________________________________

  新しいsendmailバージョン:

       (*** < file > *** text ***)     /etc/maildomains

       ______________________________________________________________________
       @mydomain.dom           mailservice
       ______________________________________________________________________

  4.5.5.  動作させてみましょう!

  sendmailの古い/新しいバージョンいずれにおいてもbtree(データベース)ファ
  イルを作る必要があります。以下のようにして下さい。

  cd /etc    (or /yourhomedir)
  makemap btree maildomains < maildomains

  (訳注:makemapはsendmail用のデータベースマップを作るコマンドです。その
  他オプションについてはmakemap(8)を参照)

  この後、sendmailデーモンをkillして再度開始します。これで動作しました。
  good luck :)

  5.  自動化

  さて全て動作しました。もし動作しなかったらちゃんと動作するまで自動化は
  しなようにして下さい。ここでスクリプトが必要です。 procmailrcファイル
  にユーザーを追加するために"メール管理者"やrootユーザーに我慢する必要は
  ありません。以下の例は経験のあるユーザー用のものです。いくつか変更する
  必要があります。方法BのSubject行を使った例ですが、簡単に方法Aのものに
  変更することができます。方法Bは方法Aよりも(安く)実現できるので著者は方
  法Bを使いました。何回となく聞いてきましたが...。あなたをいらつかせ
  る(bug) :))) 方法について :)) 書いています...。

  5.1.  骨組み("skeleton")

  フッタはフッタであることが必要なので(返信するので以下は全て処理されま
  せん)、ヘッダファイルとフッタファイルが必要です。

  5.1.1.  ".procmailrc-header"について

  このファイルは「"ヘッダ"と"ユーザー"」ファイルです。ここでユーザーが追
  加されたり削除されたりします。とても重要なファイルです。ユーザーを追加
  するときはバックアップをとるようにしましょう。システムエラーを引き起こ
  す何か悪いところがあるかもしれません.....。

       (*** < file > *** text ***)    .procmailrc-header

  ______________________________________________________________________
  :0 c
          passtrough

  :0
  * ^To:.*freaker@ibm.net
  ! freaker

  :0
  * ^Subject:.root
  ! root

  :0
  * ^Subject:.barbara
  ! barbara

  :0
  * ^Subject:.paul
  ! paul@his.personal.emailaddress

  :0 c
  * ^Subject:.john
  ! john@his.personal.emailaddress

  :0
  * ^Subject:.john
  ! john

  :0
  * ^From:.*newsletter@ibm.net
  ! freaker

  :0
  * ^FROM_DAEMON
  throwaway
  ______________________________________________________________________

  5.1.2.  ".procmailrc-footer"ファイル

  上述したように.procmailrcファイルにはフッタが必要です。以下のコードは
  ユーザーに配送するメール以外のヘッダの処理をします。このフッタは上記し
  た.procmailrc-headerに載っていないユーザー宛てのメールを返信するコード
  が含まれています。ただのファイルの終りというわけではありません!

       (*** < file > *** text ***)     .procmailrc-footer

  ______________________________________________________________________

  :0
    |(/usr/bin/formail -r -k \
       -A"X-loop: mailservice@mydomain.dom "| \
         /usr/bin/gawk '{print }\
         /^/ && !HEADER \
           { system("/bin/cat nosuchuser"); \
           print"--" ;\
           HEADER=1 }' ) |\
           /usr/bin/sendmail -t

  exit
  ______________________________________________________________________

  5.2.  addmail スクリプト

  このスクリプトはヘッダファイルにユーザーを追加するものです。ヘッダと
  フッタが結ばれています。これで完全な.procmailrcファイルになります。
  "#"(コメント)は特に必要ではありません。あなた自身が情報を書き込んで下
  さい。

       (*** < file > *** code ***)     addmail   (* chmod 500 *)

  ______________________________________________________________________
  #/bin/sh
  #
  # Copyright (c)1997 by Gunther Voet. rev 1.0.1
  # please leave the Copyright in it when it is distributed with any
  # system using this thingy ..

  echo ""
  echo "Addmail v1.0.1 by Gunther Voet, Freaker / TuC'97-98 (21/04/97)"
  echo ""

  if [ $1 ]; then

          if [ $2 ]; then

  # バックアップファイルの作成!

          cp /home/mailserv/.procmailrc-header /home/mailserv/.procmailrc-backup

  # (>>)  ヘッダファイルに情報を追加。

          echo ":0" >> /home/mailserv/.procmailrc-header
          echo "* ^Subject:.$1" >> /home/mailserv/.procmailrc-header
          echo "! $2" >> /home/mailserv/.procmailrc-header
          echo "" >> /home/mailserv/.procmailrc-header

  # ヘッダファイルを.procmailrcにコピーしてフッタファイルを追加する。

          cat /home/mailserv/.procmailrc-header > /home/mailserv/.procmailrc
          cat /home/mailserv/.procmailrc-footer >> /home/mailserv/.procmailrc

  # "mailserv"の所有権を確認する。読み書きの権限は"mailserv"ユーザー
  # のみにあるようにする。

          chown mailserv /home/mailserv/.procmailrc
          chgrp users /home/mailserv/.procmailrc
          chmod 600 /home/mailserv/.procmailrc
  else
          echo "No DESTINATION mail address has been given ..."
  fi

  else
          echo "usage:"
          echo ""
          echo "syntax:  addmail from_user to_user(domain)"
          echo ""
          echo "example: addmail freaker freaker@myemail.dom"
          echo ""
  fi
  ______________________________________________________________________

  このスクリプトはヘッダファイルにメールアドレスとユーザー情報を追加しま
  す。 .procmailrcに情報をコピーしてフッタを追加します。これでメールを処
  理するための .procmailrc が完成します。ユーザーを削除したいとき
  は.procmailrc-headerファイルを編集するだけです。次からはユーザーを追加
  する時に.procmailrcから削除されます(訳注:つまりこの方法ではユーザーを
  削除する時は.procmailrcではなく.procmailrc-headerで削除しておきます)。
  すぐに削除する必要がある時は.procmailrc-header と.procmailrcの両方の
  ファイルからユーザーを消しておいて下さい。

  [訳注:まとめると、

  o  ".procmailrc"        : procmail用ファイル

  o  ".procmailrc-header" : ユーザーの追加/削除

  o  ".procmailrc-footer" : ユーザー以外の処理

     となります。]

  6.  ヘルプ!(ため息)

  ええと、ヘルプが必要じゃないですか :)? やっかいなものに対してはいやみ
  をいうこともできるし「出直しといで」とだけ言うこともできます。でも手助
  けしましょう...。以下よくある問題を書きました。このHOWTOでリストしてい
  ない問題が生じたらメールを送って下さい。名前/メールアドレスを書いてこ
  のHOWTOに載せましょう :)。メールを送る前に何か忘れてないか確認しましょ
  う。さらに何かアドバイスが欲しいなら詳細な情報(スクリプト、何をしたか
  など)を送りましょう。バイナリファイルを送らないように!送っても実行し
  ません。

  6.1.  自動スクリプトが動作しません:

  o  属性を実行可能にしてますか?

  o  シェルは/bin/shにありますか?

  6.2.  "anonymous mailserver"は何を意味していますか?

  o  "anon0001@yourdom.dom"といったアカウントを作ったり、他のメールアド
     レスにそれを転送したりします。だれも.procmailrcファイルを見る必要は
     なく、アドレスだけ知っていればいいのです。

  6.3.  catが死にました

  o  ええと、次回は200グラムもの印刷用紙にこのHOWTOを印刷しないように。
     このHOWTOは10数ページはあります。重すぎます!

  6.4.  dogが死にました

  o  うーむ。処置なし。そんなこと私に聞いてどうするの? 却下します。

  6.5.  Linuxって?

  o  フリーUNIX、POSIX互換、Linus Torvalds氏によって開発された...
     Linuxが何か知らないならどうしてこのHOWTOを読んでいるのですか?

  6.6.  メールアカウントの見つけ方について教えて下さい。

  o  だめです!これはあなたを対象としたHOWTOで、あなたのプロバイダについ
     ては面倒をみきれません。あなたのメールアドレスの入手方法もしかり。

  6.7.  なぜ「あとで情報を追加します」が削除されたのですか?

  o  5.5 を注意して読んで下さい :) そこに理由が書かれています。「あとで
     情報を追加します」を追加する必要があると思います  :)。
  6.8.  「ドメイン名」はどうやってわかるのですか?

  o  ローカルISP/プロバイダに聞いて下さい。きっと助けてくれます。
     Internicに聞けば数日/数週間かかるでしょう。

  6.9.  なぜこんなもん(f*cking lame)をつかうんだ?

  o  お金を使いたくなく、「こんなもん」を使いたいからです。なぜそんなに
     かまう?

  6.10.  Nosuchuserfileって?

  o  必要な情報なら何でも書きたいことを書いて下さい。配達されなかったメ
     ールに何が起こったのか送信者にわかるように。

  6.11.  ユーザーもメールの読み書きができますか?

  o  私が説明しているシステムとは関係ありません。sendmailマニュアルを読
     んで下さい。これはメールの受信と、ひとつのメールアドレスを使うこと
     についてですが。

  6.12.  ユーザー全員用のシェルアカウントが必要ですか?

  o  いいえ。でもインターネットアクセスができないというのはユーザーに
     とって大変でしょう :) ...マスカレードネットワークを構築することもで
     きるし、それに接続されたコンピュータを使うこともできます。そしてユ
     ーザーはメールを取り込んだり掲示板やメールのあいだのリンクを作った
     りできます。 fidnetゲート :)にフォワードすることだってできます。
     シェルアカウントを与えるのに十分な理由はありません!

  6.13.  skeletionって?

  o  入力ミス(typo)です。でもこの文字の方が好きです。

  6.14.  Addmailって?

  o  自動化に関する質問は受け付けません。あなたがしていることを確認した
     方がよいでしょう... というのはそれは「トロイの木馬」になりうるから
     です :)))。 (知る必要があるのは質問するまえにスクリプトが何をしてい
     るか調べることでしょう)。解釈するのに十分易しいものです。これがこの
     コメントをした理由です。このスクリプトを配布する場合は必
     ずCopyrightを残して下さい。thanks :)

  6.15.  なぜ不親切なんですか?

  o  私は不親切にはしてません:)親切ですよ:)。さあ出てった出てった! (こ
     のHOWTOを完全なものにしたく、ドキュメントの本来の目的からはずれてし
     まっています。それだけです:))。

  6.16.  あなたのおおげさな言葉に周りから不満がでません?

  o  いいええ。でも過激なフィルタと言葉を使うかもしれません :))。知りま
     せん  :))。

  6.17.  このHOWTOが他よりも変わっているのはなぜ?

  o  プレーンテキストのHOWTOを読んでいると面倒になるからだと思います。次
     は何か追加したいと思います...。

  6.18.  ローカルではドメインは動作するのですがリモートで受信できない

  o  "sendmail.cw"ファイルをチェックして下さい。ドメインを追加する必要が
     あります!

  6.19.  dogが死にました

  o  ルールセットが動作していません。メールが受信できずsendmailが死にま
     した。 ``(新しいsendmail)sendmail.cfへの行追加''章を参照して下さい
     - 古いsendmailトリックは無視しましょう。新しいsendmailは仮想ドメイ
     ンで使いやすくなっています。

  7.  最後に

  これは最後のようだ。予期せぬバグがあったらフィードバックを残して下さ
  い。またコメント、提案はメールで送って下さい。これを読んでうんざりした
  んだったら http://tuc.ml.org/ に行きなさい、 hehehe。

  My thanks go out to:

   Hannes van de Vel: サポートしてくれました。
   Tetsu Isaji: 日本語版「offline-mailing」とエラーの指摘 :)。
   Greg Hankins:sgmlバージョンのエラーについて指摘。
   Linus torvalds: もちろん彼がいなければこのHOWTOもありません!

  [ 日本語訳: 伊佐冶  哲, isaji@mxu.meshnet.or.jp

  訳文について間違い、不明な点があればご連絡下さい。]

一覧に戻る
グリーンネット・トップページへ戻る

http://www.green.ne.jp/