<!--
     The FreeBSD Documentation Project
     The FreeBSD Japanese Documentation Project

     Original revision: 1.28
     $FreeBSD$
-->

<chapter id="mail">
  <chapterinfo>
    <authorgroup>
      <author>
       <firstname>Bill</firstname>
       <surname>Lloyd</surname>
       <contrib>原作: </contrib>
      </author>
    </authorgroup>
    <authorgroup>
      <author>
       <firstname>Jim</firstname>
       <surname>Mock</surname>
       <contrib>改訂: </contrib>
       <!-- 2 Dec 1999 -->
      </author>
    </authorgroup>
  </chapterinfo>

  <title>電子メール</title>

  <para><emphasis>訳: &a.jp.mihoko;. 14 January 1997.</emphasis></para>

  <sect1>
    <title>この章では</title>
    <indexterm><primary>email</primary></indexterm>
    <indexterm><primary>電子メール</primary></indexterm>

    <para>電子メール、email としてのほうが知られているでしょう、
      は現代で最も広く利用されているコミュニケーション手段の一つです。
      何百万人という人が毎日 email を使っており、
      この文章を偶然にもオンラインで読んでいるという人はこのカテゴリーに入るでしょうし、
      複数の email アドレスを持っていたりもするかもしれません。</para>

    <para>電子メールの設定は多くの<link linkend="bibliography">システム管理</link>書籍のテーマになっています。
      もし自分のネットワーク用に一つメールホストを設定することよりもさらに高度なことをしようとするなら、
      しっかりとしたヘルプが必要でしょう。</para>
    <indexterm><primary>DNS</primary></indexterm>

    <para>email の設定におけるいくつかの部分は Domain Name System (DNS)
      の管理下にあります。自分の DNS サーバーを立ち上げようと思っているなら、
      必ず <filename>/etc/namedb</filename> と
      <command>man -k named</command> を一通り読むようにしてください。</para>
  </sect1>

  <sect1 id="mail-using">
    <title>電子メールを使う</title>
    <indexterm><primary>POP</primary></indexterm>
    <indexterm><primary>IMAP</primary></indexterm>
    
    <para>email の交換には 5 つの主要な部分があります。
      それらは <link linkend="mail-mua">ユーザープログラム</link>、
      <link linkend="mail-mta">サーバーデーモン</link>、
      <link linkend="mail-dns">DNS</link>、
      <link linkend="mail-receive">POP もしくは IMAP のデーモン</link>、
      そしてもちろん <link linkend="mail-host">メールホスト</link>です。</para>

    <sect2 id="mail-mua">
      <title>ユーザープログラム</title>

      <para>いくつか名前を挙げれば、
        <application>mutt</application>、<application>pine</application>、
	<application>elm</application>、そして
	<application>mail</application>、
	といったコマンドラインプログラムや
	<application>balsa</application>、
	<application>xfmail</application> のような
	GUI プログラム、WWW ブラウザーのようにさらに<quote>洗練された</quote>ものまであります。
	これらのプログラムは、email の処理を
	<link linkend="mail-mta">server daemons</link> を呼び出したり
	TCP 経由で渡したり、といった手段でローカルの
	<link linkend="mail-host"><quote>メールホスト</quote></link>に任せるだけです。</para>
    </sect2>

    <sect2 id="mail-mta">
      <title>メールホストサーバデーモン</title>
      <indexterm>
        <primary>メールサーバデーモン</primary>
        <secondary><application>sendmail</application></secondary>
      </indexterm>
      <indexterm>
        <primary>メールサーバデーモン</primary>
        <secondary><application>postfix</application></secondary>
      </indexterm>
      <indexterm>
        <primary>メールサーバデーモン</primary>
        <secondary><application>qmail</application></secondary>
      </indexterm>
      <indexterm>
        <primary>メールサーバデーモン</primary>
        <secondary><application>exim</application></secondary>
      </indexterm>

      <para>通常、これは <application>sendmail</application>
        (FreeBSD のデフォルト) や <application>qmail</application>、
	<application>postfix</application>、もしくは
	<application>exim</application>
	といった他のメールサーバーデーモンの一つです。
	他にもあるのですが、以上のものが広く使われています。</para>

      <para>サーバーデーモンは通常 2 つの機能 &mdash;
        やってくるメールを受け取るのと出ていくメールを配送する、
	を持っています。メールを読むために POP や IMAP で接続する、
	ということはできません。
	そのためにはもう一つ<link linkend="mail-receive">デーモン</link>が必要なのです。</para>

      <para>いくつかの古いバージョンの <application>sendmail</application>
        には深刻なセキュリティ問題がありますが、
	現在のバージョンを使っているおれば特に問題ないことに注意してください。
	例のごとく、
	どんなソフトウェアを利用する時にも最新の状態にしておくのが大事なのです。</para>
    </sect2>

    <sect2 id="mail-dns">
      <title>Email and DNS</title>

      <para>Domain Name System (DNS) とそのデーモンである
        <command>named</command> は email の配送において大変重要な役割を担ってます。
	あなたのサイトからもう一つのサイトへメールを配送するためには、
	サーバーデーモンは DNS からそのサイトを探し、
	メールの受け取り先のホストを決定します。</para>

      <para>メールがあなたに送られた場合にも同じような仕組みになっています。
        DNS にはホスト名と IP アドレス、ホスト名とメールホストをマッピングするデータベースがあります。
	IP アドレスは A レコードで指定されます。
	MX (Mail eXchanger) レコードはあなた宛のメールを受け取るホストを指定します。
	あなたのホスト名に対する MX レコードがない場合には、
	メールは直接あなたのホストに配送されます。</para>
    </sect2>

    <sect2 id="mail-receive">
      <title>メールの受け取り</title>
      <indexterm>
        <primary>email</primary>
        <secondary>受け取り</secondary>
      </indexterm>

      <para>メールはメールホストが受け取ります。
        このホストは送られてきたメールを集め、
	(ユーザーが) 読んだりピックアップしたりするために保存します。
	保存されているメールをピックアップするにはメールホストに接続する必要があります。
	これは POP や IMAP を用いて行なわれます。
	メールホスト上で直接メールを読みたい時は POP や IMAP のサーバーは必要ありません。</para>

      <indexterm><primary>POP</primary></indexterm>
      <indexterm><primary>IMAP</primary></indexterm>
      <para>POP や IMAP のサーバーを走らせるためには 2 つのことをやらなければいけません。</para>

      <procedure>
        <step>
<!-- XXX: kuriyama: English version points as /ports/mail.html. -->
<!-- XXX: kuriyama: This should be related path. -->
	  <para>POP や IMAP のデーモンを<ulink url="../ports/mail.html">ports コレクション</ulink>からインストールします。</para>
	</step>

	<step>
	  <para><filename>/etc/inetd.conf</filename> を修正して POP や IMAP のサーバーが起動されるように設定します。</para>
	</step>
      </procedure>
    </sect2>

    <sect2 id="mail-host">
      <title>メールホスト</title>
      <indexterm><primary>メールホスト</primary></indexterm>

      <para>メールホストとは責任をもってメールを配送したり、
        あなたのホストや、もしかするネットワークも、に宛てたメールを受け取ったりするホストに与えられる名前です。</para>
    </sect2>
  </sect1>

  <sect1 id="mail-trouble">
    <title>トラブルシュート</title>
    <indexterm>
      <primary>email</primary>
      <secondary>トラブルシューティング</secondary>
    </indexterm>

    <para>ここには、いくつかのよく聞かれる質問とその答があります。
      それらは <ulink url="../FAQ/">FAQ</ulink> からこちらに移りました。</para>

    <qandaset>
      <qandaentry>
        <question>
	<para>どうして自分のサイトのホストなのに FQDN を使わなければいけないのですか?</para>
	</question>

	<answer>
	<para>恐らく、そのホストは実際には別のドメインにあるのでしょう。
	  例えば <hostid role="fqdn">foo.bar.edu</hostid> ドメインにいて、
	  <hostid role="domainname">bar.edu</hostid> というドメイン内の
	  <hostid>mumble</hostid> というホストにアクセスしたいとします。
	  この時は単に <hostid>mumble</hostid> ではなく
	  <hostid role="fqdn">mumble.bar.edu</hostid> と FQDN で参照しなければなりません。</para>

	<indexterm><primary>BIND</primary></indexterm>
	<para>そもそも、BSD BIND のリゾルバー (resolver) ではこのようなことが可能でしたが、
	  FreeBSD に入っている最新版の <application>BIND</application>
	  では自分のドメイン以外に対する FQDN でない省略形は許されません。
	  従ってホストを <hostid>mumble</hostid> と曖昧に指定した場合は
	  <hostid role="fqdn">mumble.foo.bar.edu</hostid> という名前があればそれになり、
	  そうでなければ root ドメインから検索されます。</para>
          
        <para>これは、
	  <hostid>mumble.bar.edu</hostid> と
	  <hostid>mumble.edu</hostid>
	  ということなったドメイン名に対してホスト名のサーチがおこなわれていた以前の振る舞いとは異なったものです。
	  このような事が悪い例もしくはセキュリティホールとみなされる理由については
          RFC 1535 を見てください。</para>
	  
        <para><filename>/etc/resolv.conf</filename> で

          <programlisting>domain foo.bar.edu</programlisting>

          と書いてある行を

          <programlisting>search foo.bar.edu bar.edu</programlisting>
          
          と書き換えることで上のようなことができます。
	  しかし、RFC 1535 にあるように検索順序が<quote>内部 (local)
	  と外部 (public) の管理の境界</quote>をまたがないようにしてください。</para>
	</answer>
      </qandaentry>

      <qandaentry>
	<question>
	<para>sendmail が <errorname>mail loops back to
	  myself</errorname> というメッセージを出すのですが。</para>
	</question>

	<answer>
	<para>sendmail FAQ に次のように書いてあります。</para>
      
        <programlisting>* <quote>Local configuration error</quote> というメッセージが出ます。例えば、

553 relay.domain.net config error: mail loops back to myself
554 &lt;user@domain.net&gt;... Local configuration error

のような感じですが、どうしたら解決できますか?

これは、例えば domain.net のようなドメイン宛てのメールを 
<literal>MX</literal> レコードで特定のホスト(ここでは
relay.domain.net) に送ろうとしたのに、
そのホストでは domain.net
宛てのメールを受け取れるような設定になっていない場合です。
設定の際に 
FEATURE(use_cw_file) を指定してある場合には
/etc/sendmail.cw の中に domain.net を追加してください。
もしくは、/etc/sendmail.cf の中に <quote>Cw domain.net</quote>
を追加してください。</programlisting>
          
        <para>sendmail FAQ は
	  <filename>/usr/src/usr.sbin/sendmail</filename> にありますので、
	  メールの設定に<quote>おかしなこと</quote>があれば常に読んでください。</para>
	</answer>
      </qandaentry>

      <qandaentry>
	<indexterm><primary>PPP</primary></indexterm>      
        <question>
	<para>ダイアルアップ PPP ホストで電子メールを使うにはどうしたらいいの?</para>
	</question>

	<answer>
	<para>LAN 上にある FreeBSD マシンを、
	  インターネットに接続したいとします。FreeBSD マシンは、その
	LAN でのメールゲートウェイになります。FreeBSD
	マシンは専用線接続ではありません
	(訳注: ダイアルアップ接続など)。</para>

        <para>これには、少なくとも二つの方法があります。</para>

	<indexterm><primary>UUCP</primary></indexterm>      
        <para>一つは UUCP を使うことです。</para>

        <para>このとき鍵になるのは、あなたのドメインに対するセカンダリ
	  MX サービスを提供してくれるインターネットサイトをみつけることです。
	  例えば以下のように。</para>

        <programlisting>bigco.com.	      MX	10	bigco.com.
                      MX        20      smalliap.com.</programlisting>

        <para>最終的なメール受信先としては、
	  一つのホストだけが定義されるべきです (bigco.com 上の
	  <filename>/etc/sendmail.cf</filename> ファイルに、<literal>Cw
	  bigco.com</literal> を追加します)。</para>

        <para>送信側の <command>sendmail</command> が、
	  メールを配送しようとしている時、モデムの接続を
	  介してあなたのところに接続しようとします。大抵の場合、
	  あなたのマシンがオンラインでないために、接続はタイムアウト
	  してしまうでしょう。<command>sendmail</command> は自動的に、
	  メールをセカンダリの MX サイト に
	  (あなたのインターネットプロバイダ) に配送します。セカンダリ MX
	  サイトは、(<filename>/etc/rc.conf</filename> ファイル に
	  <literal>sendmail_flag = "-bd
	  -q15m"</literal>と書かれている場合) 15 分ごとに、
	  プライマリ MX サイトにメールを配送しようと、
	  あなたのホストに接続しに いきます。</para>

        <para>ログインスクリプトとして、
	  このようなものを使うとよいでしょう。</para>

        <programlisting>#!/bin/sh
# Put me in /usr/local/bin/pppbigco
( sleep 60 ; /usr/sbin/sendmail -q ) &amp;
/usr/sbin/ppp -direct pppbigco</programlisting>

        <para>ユーザごとにログインスクリプトを作りたい場合には、上記
	  のスクリプトの代わりに、<command>sendmail
	  -qRbigco.com</command> を使用する こともできます。
	  このようにすると、キューの中の bigco.com に対する
	  すべてのメールは、すぐに強制的に処理されます。</para>

        <para>さらに、次のような改良もできます。</para>

        <para>以下は、&a.isp;
	  メイリングリストから抜粋してきたメッセージです。</para>

        <programlisting>&gt; 私たちはお客様に対して、セカンダリ MX を提供しています。
&gt; お客様は一日に何回か私たちのサービスに接続し、メールを彼らのプライマリ MX
&gt; に受け取ります (彼らのドメインに対するメールが到着した時には、
&gt; 私たちは彼らのサイトを呼び出しません)。
&gt; 私たちの sendmail は、30 分ごとにメールキューに溜っているメールを配送します。
&gt; ちょうどその時に、すべてのメールがプライマリ MX に送られたかどうかを確かめるためには、
&gt; 彼らは 30 分は オンラインでいなければなりません。
&gt;
&gt; すべてのメールを今すぐ送るために sendmail を初期化するコマンドはあるでしょうか?
&gt; もちろん私たちのマシン上には、ユーザはルート (root) 権限を持っていません。

sendmail.cf の <quote>privacy flags</quote> セクションに、
Opgoaway,restrictqrun の定義があります。

root 以外のユーザがキューを処理できるようにするには、
restrictqrun を削除してください。また、MX の再調整が必要かもしれません。
あなたがたは、顧客のサイトに対する一番優先度の高い MX なので、
次のように定義します:

# If we are the best MX for a host, try directly instead of generating
# local config error.
OwTrue

このようにすると、リモートサイトからのメールが、
顧客のマシンと接続しようとせず、直接あなたがたのホストマシンに配送されるようになります。
ホストマシンに配送されたメールは、続いて顧客のマシンに送られます。
これはホスト名にのみ有効なので、顧客のメールマシンに、
<quote>host.customer.com</quote> とは別に、<quote>customer.com</quote>も定義する必要があります。
DNS 上で、<quote>customer.com</quote>に対する A レコードを定義してください。</programlisting>
        </answer>
      </qandaentry>
    </qandaset>
  </sect1>

  <sect1 id="mail-advanced">
    <title>先進的なトピックス</title>

    <para>これからのセクションでは、
      メールの設定やドメイン全体のためのメールの設定といったさらに突込んだ話題について触れます。</para>

    <sect2 id="mail-config">
      <title>基本事項</title>
      <indexterm>
        <primary>email</primary>
        <secondary>設定</secondary>
      </indexterm>

      <para>あなたのマシンに FreeBSD を普通にインストールして、
	<filename>/etc/resolv.conf</filename> ファイルを設定するか、
	またはネームサーバを走らせれば、
	他のホストへ電子メールを送ることができるようになります。
	あなたのホスト宛のメールを特定のホストに配送するようにしたい場合には、
	次の二つの方法があります。</para>

      <itemizedlist>
	<listitem>
          <para>自身でネームサーバーを実行し、
	    自分のドメインを持つ。例えば
	    <hostid role="domainname">FreeBSD.org</hostid>。</para>
	</listitem>

	<listitem>
	  <para>あなたのホストへ直接メールが配送されるようにする。
	    これはメールがあなたのマシンの現在の
	    DNS 名に直接配送されるようにすることにより実現できます。
	    たとえば <hostid role="fqdn">example.FreeBSD.org</hostid>。</para>
	</listitem>
      </itemizedlist>

      <indexterm><primary>SMTP</primary></indexterm>
      <para>上のどちらを選ぶ場合でも、自分のホストに直接メールが配送されるようにするには恒久的
        (静的) な IP アドレス (動的な PPP ダイアルアップではない) を持っていなければなりません。
	もしファイアウォールの中にいるならば、SMTP トラフィックが通過してくれないといけません。
	もし自分のホストでメールを受け取りたいならば、
	次の二つのうちの一つができていることを確認してください。</para>

      <itemizedlist>
        <indexterm><primary>MX レコード</primary></indexterm>
        <listitem>
          <para>自分のドメインでの MX レコードが自分のホストの
	    IP アドレスを差していることを確認する。</para>
        </listitem>

        <listitem>
          <para>自分のドメインの中に自分のホスト用の MX がないことを確認する。</para>
        </listitem>
      </itemizedlist>

      <para>上のどちらかが設定されていれば、
        自分のホストでメールを受け取ることができるでしょう。</para>

      <para>次のコマンドを実行してみてください。</para>

      <screen>&prompt.root; <userinput>hostname</userinput>
example.FreeBSD.org
&prompt.root; <userinput>host example.FreeBSD.org</userinput>
example.FreeBSD.org has address 204.216.27.XX</screen>


      <para>もしあなたのマシンが上記のメッセージだけを出力したならば、
	<email>yourlogin@example.FreeBSD.org</email>
	へのメールは問題なく配送されるでしょう。</para>

      <para>上記のメッセージの代わりに、</para>

      <screen>&prompt.root; <userinput>host example.FreeBSD.org</userinput>
example.FreeBSD.org has address 204.216.27.XX
example.FreeBSD.org mail is handled (pri=10) by hub.FreeBSD.org</screen>

      <para>というメッセージが出力された場合は、
	あなたのホスト (<hostid role="fqdn">example.FreeBSD.org</hostid>)
	に宛てたメールは全て直接配送されずに <hostid>hub</hostid>
	上の同じユーザー名に配送されます。</para>

      <para>上の情報は DNS サーバーが扱います。
        メールルーティング情報をもつ DNS レコードは、
	<emphasis>M</emphasis>ail e<emphasis>X</emphasis>change エントリーです。
	MX エントリが存在しない場合には、IP アドレスにしたがって、
	直接宛先ホストに配送されます。</para>

      <para><hostid role="fqdn">freefall.FreeBSD.org</hostid>
	の現時点での MX エントリは、次のようになっています。</para>

      <programlisting>freefall		MX	30	mail.crl.net
freefall		MX	40	agora.rdrop.com
freefall		MX	10	freefall.FreeBSD.org
freefall		MX	20	who.cdrom.com</programlisting>

      <para><hostid>freefall</hostid> は多くの MX
	エントリを持っています。もっとも MX の値が小さいホストが最終的にメールを受け取ります。
	もし <hostid>freefall</hostid>
	が他の処理で忙しかったり、ダウンしているような場合には、
	他のホストが一時的にメールをキューにいれます。</para>

      <para>使い勝手をよくするためには、代替の MX サイトは、それぞれ
	別の経路でインターネットへ接続しているとよいでしょう。
	インターネットプロバイダまたは他の関連サイトが、このサービスを
	提供することができます。</para>
    </sect2>

    <sect2 id="mail-domain">
      <title>あなたのドメインに対するメール設定</title>

      <para><quote>メールホスト</quote> (メールサーバーとしても知られています)
        をセットアップするためには、
	いろいろなワークステーションに宛てた全てのメールを受ける必要があります。
	基本的には、あなたのドメイン (この場合だと
	<hostid role="fqdn">*.FreeBSD.org</hostid>)
	宛ての全てのメールを<quote>ハイジャック</quote>し、
	そのメールをあなたのメールサーバーに配送し、
	ユーザーが POP を通じてあるいはサーバー上で直接、メールをチェックできるようにします。</para>

      <indexterm><primary>DNS</primary></indexterm>
      <para>話を簡単にするために、あるユーザーのアカウントはどのマシンでも同じ<emphasis>ユーザー名</emphasis>にすべきです。
        そのためには <command>adduser</command> を使ってください。</para>

      <para>使用する予定のメールホストは、
	各ワークステーションごとにメール交換が
	できるように設定されていなければなりません。これは、DNS
	(すなわち  BIND や named) の設定で次のように行なうことができます。</para>

      <programlisting>example.FreeBSD.org	A	204.216.27.XX		; ワークステーション
			MX	10 hub.FreeBSD.org	; メールホスト</programlisting>

      <para>これは、ワークステーションの A レコードがどこを指していようとも
        そのワークステーション宛てのメールをメールホストに転送する、というものです。</para>

      <para>自前で DNS サーバを運用しているのでなければ、
        この作業は自分では行なえおこなえません。自分で DNS
	サーバを運用しないとかできないという場合は、
	インターネットプロバイダ等に依頼して作業をおこなってもらってください。</para>

      <para>この作業により、このワークステーション宛のメールは、MX
	(メールエクスチェンジャ) ホストに送られるようになります。A
	レコードがどのマシンを指しているかどいうことには関係なく、
	メールは MX ホストに送られます。</para>

      <para>もしバーチャル電子メールホストを運用するなら次の情報が役に立つでしょう。
        例として、あなたには自分のドメイン、ここでは
	<hostid role="domainname">customer1.org</hostid>、
	を持っている顧客がいるとしましょう。
	あなたは <hostid role="domainname">customer1.org</hostid> 宛ての全てのメールを
	<hostid role="fqdn">mail.myhost.com</hostid> という名前のメールホストに集めたいとします。
	DNS エントリーは次のようになるでしょう。</para>

      <programlisting>customer1.org		MX	10	mail.myhost.com</programlisting>

      <para>そのドメインに対して電子メールを送りたいだけなら、A
	レコードは必要ありません。</para>

      <note>
        <para>これは、<hostid role="domainname">customer1.org</hostid>
	に対して ping を実行しても、
	A レコードが存在しない限りうまくいかないことに留意しておいてください。</para>
      </note>

      <para>やらなければいけない最後のことは、
        メールホスト上の <application>sendmail</application>
	に対してどんあドメインやホスト宛のメールを受け取るのか、
	を教えることです。いくつかの方法がありますが次のどちらかでいいでしょう。</para>

      <itemizedlist>
        <listitem>
	  <para><literal>FEATURE(use_cw_file)</literal> を使っているなら、
	    <filename>/etc/sendmail.cw</filename> ファイルにホストを加えます。
	    もし sendmail 8.10 かそれ以降のものであれば該当ファイルは
	    <filename>/etc/mail/local-host-names</filename> です。</para>
	</listitem>

	<listitem>
	  <para><filename>/etc/sendmail.cf</filename> もしくは
	    sendmail 8.10 以降なら <filename>/etc/mail/sendmail.cf</filename>
	    といったファイルに <literal>Cwyour.host.com</literal> という行を加えます。</para>
	</listitem>
      </itemizedlist>
    </sect2>
  </sect1>
</chapter>

<!--
     Local Variables:
     mode: sgml
     sgml-declaration: "../chapter.decl"
     sgml-indent-data: t
     sgml-omittag: nil
     sgml-always-quote-attributes: t
     sgml-parent-document: ("../book.sgml" "part" "chapter")
     End:
-->
