電子メールの仕組み

共通科目情報処理(講義)、体育専門学群対象、2002年02月08日

                                       電子・情報工学系
                                       新城 靖
                                       <yas@is.tsukuba.ac.jp>

このページは、次の URL にあります。
http://www.hlla.is.tsukuba.ac.jp/~yas/ipe/taiiku-kougi-2001/2002-02-08
あるいは、次のページから手繰っていくこともできます。
http://www.hlla.is.tsukuba.ac.jp/~yas/ipe/
http://www.hlla.is.tsukuba.ac.jp/~yas/index-j.html
http://www.ipe.tsukuba.ac.jp/~yshinjo/

■復習

■今日の重要な話

教科書174-190ページ。、

■電子メール

電子メール は、電話や(普通の)手紙と同じように、個人と個人の間で情報を交換するた めの仕組み。

電子メールを読み書きするプログラムは、 メール・リーダ(mail reader) または、 メーラ(mailer) という。 「リーダ(reader)」といっても、書くこともできる。

種類

■電子メールで重要な考え方と操作

電子メールを使う上で重要な考え方

  1. 電子メールの形式、ヘッダ、本文
  2. 電子メール・アドレス
  3. メール・ボックス(フォルダ)
電子メールの基本的な操作
  1. メールを読む
  2. (新たに)メールを出す
  3. 受け取ったメールに返事を出す(reply)
  4. 受け取ったメールを削除する、整理する
  5. 環境を整える、カスタマイズする

◆電子メールの形式

1通の電子メールは、次のような形式を持っているテキスト(文字データ。


------------------------------------------------------------
From: Shiro Yagi <shiro@is.tsukuba.ac.jp>
To: kuro@cc.tsukuba.ac.jp
cc: shiro@is.tsukuba.ac.jp
Subject: Visit my WWW page
Date: Sun, 22 Mar 2002 23:16:30 +0900 (JST)
Message-Id: <200203221416.XAA04621@poplar.is.tsukuba.ac.jp>

こんにちは。白やぎです。

WWWページを作ったので見てください。URL は、
	http://www.is.tsukuba.ac.jp/~shiro/
です。

♪♪ 白やぎ
♪♪ http://www.is.tsukuba.ac.jp/~shiro/
------------------------------------------------------------

多くのメール・リーダでは、1通の電子メールのことを メッセージ(message) と呼んでいる。

電子メールのテキストは、大きくヘッダと本文に分かれる。

ヘッダ(header、頭)
電子メールの先頭から最初の空行まで
本文(body)
空行以降
重要なヘッダ From: には、差出人の、 To:Cc: には、受取人の電子メール・アドレスが置かれる。

電子メール・アドレス(e-mail address) とは、電子メールを届ける時に配送プログラムが使う記号。

現在よく使われている形式:


user@domain
@」より前の部分は、個人を特定するための情報。 「@」より後ろの部分は、 電子メールをどのコンピュータに届ければいいかを示している。 ドメイン形式のホスト名が使われる。

To:: とCc:: は、受取人の電子メール・アドレスが置かれる。どち らにアドレスを書いても同じように届けらるが、To: は、本来の宛先を 書き、Cc: にはついでに連絡したい宛先を書く習慣になっている。Cc は、 Carbon Copy に由来する。

Date: は、電子メールが出された日付と時刻。

Subject: は、題名(題目、表題)。

電子メールの本文は、普通のテキストですが、1行の長さがだいたい漢字で3 0文字〜35文字、英語のアルファベットで60文字〜70文字になるように、 折り返されている(改行が入っている)。このようにしておくと、引用という 機能を利用する時に便利。

電子メールで 引用 とは、返事などを書いたときに何に対する返事か分かりやすいように他の人の 書いた電子メールの一部を自分の電子メールに含めること。

本文の末尾には、 署名シグニチャ(signature) ) が現われることが多い(付けなくてよい)。

署名とは、普通の手紙の末尾に署名をするのと同じように、末 尾に自分の名前や自分独自の記号を書く。署名は、簡潔で短いものが好まれて いる。1つの目安としては、「4行以内」。

◆2種類のメール・ボックス

電子メールは、「 メール・ボックス 」と呼ばれている ファイル に保存される。メール・ボックスは、プログラムによっては、 フォルダ(folder) と呼ばれることもある。 メール・ボックスには、次の2種類がある。

配送プログラム用メール・ボックス
電子メールを配送するプログラムが、イ ンターネットから受け取ったメールを個人ごとに分類して保存しておく場所。 メールドロップ(mail drop)ということもある。 多くのシステムでは、 /var/spool/mail/user/var/mail/userという名前のファイル。 (icho では ~/Mailbox)
ユーザ用メール・ボックス
メール・リーダが電子メールを保存しておく場所。

メール・リーダが表示するのは、多くの場合、後者のメール・ボックスである。 新しく届いたメールを読む時には、前者から後者へメールを移す必要がある。 この作業を、 「 (電子メールを)取り込む(incorporate) 」とう。

配送プログラム用メール・ボックスは、1つのサーバで1人で1つだけだが、 ユーザ用メール・ボックスは、必要に応じていくつか作ることができる。

図? メール・リーダとメール・ボックス

図? メール・リーダとメール・ボックス

◆POPやIMAP4経由のメール・ボックスのアクセス

電子メールをため込んでいるコンピュータ(サーバ)にあるメールを、手元の コンピュータにコピーするには、 POP (Post Office Protocol)や、 IMAP(Internet Message Access Protocol) という TCP/IP 上に定義された通信プロトコルを使うことがある。

POP では、配送プログラム用メール・ボックスを読み書きする機能がある。 IMAP では、それに加えて、複数のユーザ用メール・ボックスを扱えるように なっている。

図? POP3、IMAP4サーバ経由のメール・ボックスのアクセス

POP、IMAPサーバ経由のメール・ボックスのアクセス

◆メール・リーダの操作

電子メールを出すには、基本的には、 電子メールの形式 で説明したようなテキストを作り、 電子メールを配送するプログラムに渡す。 本文は、自分の好みのテキスト・エディタ(テキストファイルを編集するプロ グラム)が使えることもある。

電子メールで仕事をしていると、単にメールを出すだけではなく、受け取った 電子メールに対して返事を出すことが多い。そのため、メール・リー ダでは、返事を出す作業を簡単に行うことができるようになっている。返事 を出すことを リプライ するともいう。返事を出す時には、To: が自動的に作られるだけで なく、Subject: も同じもの、あるいは、にRe: が付い たものが自動的に付けられる。

電子メールで返事を出す時には、相手のメールの内容を引用することがある。 この時、相手が書いた部分と自分が書いた部分を区別するために、相手 が書いた部分の行の先頭には、引用のための記号を付ける習慣がある。こ の記号には、「>」や 「>>」、 タブがよく使われる。

受け取ったメールを、別の人に送ることを、 転送(forward) という。 多くのメール・リーダでは、手作業で転送できるようになっている。

複数のメール・アドレスがある人は、あるアドレスに届いた「全て」のメールを、 別のメール・アドレスの所に自動的に転送できる場合がある。 については、

メールの数が増えてきたら

多くのメール・リーダは、長いアドレスや複数のアドレスを短い 別名(alias) で参照できるようになっている。 別名には、個人で付けるものの他に、システム全体で付けるものがある。

◆Re:について

Re: は、「〜に関して」という意味の単語で、英和辞書にも載っている。英語の 手紙、特にビジネスの分野では、日常的によく使われる。返事をする時に使 われるので、reply の略だと思っている人も多い。

電子メールでも普通の手紙でも、最初にメールを送る時には、 Re:がないSubject: で出し、それについて返事を出す時には、 元のサブジェクトの前に Re: を付けた形の Subject:を使う。 一般的な習慣では、返事に対する返事の場合でも、Re: の数は 増えない。

◆電子メールを有効に利用するための形式と内容に関するヒント

◆To: や Cc: を間違えないで書く

特に関係のない人に届いてしまう危険性に注意する。

間違えないようにするには、できるだけキーボードから手で打たないようにす る。メール・リーダの「返事を出す(reply)」機能を使うと便利な場合が多い。 ただし、メーリング・リストなどで、Reply-To: が付いていたりする時 には、注意が必要になる。

コピー&ペースト機能を使う方法もある。

◆Subject:をきちんと書く

電子メールを分類するための大事なキーワードになるので、忘れずに付ける。 内容を表わす簡潔なものにする。

◆署名は短く

署名は、簡潔で短いものが好まれている。「JUNETの手引き第1版」で既に 現われている目安としては、「4行以内」というものがある。

◆引用は簡潔に

返事を出す時には、最初は、相手のメールの内容がすべて引用された状態から 出発することが多いが、必要な部分だけを残して、不要な部分を 消すようにする。

◆大きなメール

電子メールの大きさは、「1通あたり数10kにすべし」という時代が あったが、今では、数10Mバイトのメールを送っても平気な環境もある。

大きな電子メールはトラブルの元になりることが多いので、送る時には慎重に する。

テキスト以外のデータを電子メールで送る時には、相手が読めるかどうかを確 認してから送る。

◆メディアの選択

ある事柄を他人に伝えるのに、本当に電子 メールが有効とは限らない。 電話などの記録に残らないメディアが便利な場合もある。

暗号を使っていない限り、電子メールは、葉書と同じで、 除かれる形で配送される。特にシステム管理者は、誰の電子メールを 読もうと思えば読める状態になっている。 途中で誰かに見られると非常に困るような内容は、電子メールで送るのには危 険がある。また、ディジタル署名が付いていない電子メールの場合、本当にそ の本人が出したものなのか、確認する方法はない。

◆文章の調子や挨拶

電子メールという媒体を使ったとしても、世の中とは無縁ではない。目 上の人、知らない人に電子メールを出す時には、注意する。紙の手紙のよ うに季節の話題を必ず入れる必要はないが、失礼のないような表現を 使う。電子メールでも挨拶をするのは、よい習慣である。

◆早く返事を出す

電子メールは、受け取ったらできるだけ早く返事を出すという習慣がある。 そうしないと、送った相手が読んだかどうかわからないからです。返事が来な いと、相手が読んだのかどうか、途中でエラーで失われたのかどうかと不安に なる。内容によっては、すぐに返事が出せない時には、 「受け取りました」ということだけでも先に出す。

◆電子メールのヘッダのまとめ

ヘッダには、次のような項目 ( フィールド(field) ) が含まている。

From:
その電子メールを書いた人( 差出人 )の電子メールのアドレス。
To:
その電子メールの 受取人 の電子メールのアドレス( 宛先 )。
Cc:
その電子メールを受取人の電子メールのアドレス。 To: には、本来の宛先を書き、Cc: にはつい でに連絡したい宛先を書くために書く。電子メールを送る時に、 Cc: に自分の電子メール・アドレスを書けば、自分が送った 電子メールを保存することができる。Cc は、Carbon Copy に由来する。
Subject:
サブジェクト。 電子メールの題名(題目、表題)。 大量の電子メールを受け取るようになると、題名は、電子メールを分類するた めの重要なキーワードになる。
Date:
電子メールが出された日付と時刻。
Message-Id:
メッセージ識別子 (メッセージID、Message-ID, Message identifier)。これは、その電子メー ルに対して世界中で重複がないように付けられた名前。IDというのは、 身分証などの意味のIDカードのIDと同じ意味。
Reply-To:
返事を出す時に使われるアドレス。電子メールを読むプログラムには、 返事を出す機能がある。その時、普通は、From: に書かれているア ドレスが使われる、Reply-To: がある場合には、それが優先される。
In-Reply-To:
返事を出した時に元のメールを差し示す情報。普通、返事を出す時に自 動的にMessage_Id:From:Date: から作られる。
ヘッダのフィールドは、それぞれ次のような形式になっている。

name: value
1行に収まらない時には、2行目以降の行の先頭 にタブや空白が置かれる。たとえば、次のような形式になる。

Subject: Long long long long long
	 long long long very long subject

◆Bcc: と Fcc:

Cc: とよく似たものにBcc:Fcc: がある。

Bcc: は、blind carbon copy という意味で、そこに電子メールのアドレスを書くと To:Cc: と同じように電子メールが送られるが、 Bcc: は、電子メールを送るプログラムによって 削られてしまうので、最終的なメールには残らない。 Bcc: は、コピーを送ったことをTo:Cc: に知られたくない時や自分用の控えのために使われる。

Fcc: は、file carbon copy という意味で、そこには電子メールのアドレスではな く、ファイル名を書く。メール・リーダは、メールの内容をそのファイル に保存し、配送プログラムに渡す前にFcc: を削除します。

Bcc: はほとんどのメール・リーダで使えるが、 Fcc: はメール・リーダによっては使えない。

◆電子メール・アドレスの形式

電子メールのアドレスが、From:To:Cc: に現われ る時には、次のような形で現われることもある。


From: shiro@is.tsukuba.ac.jp (Shiro Yagi)
ここで、括弧の中には、ユーザの本名を英語やローマ字で書いたものが現われ る。この部分は、人間が読むためのもので、電子メールを配送するプログラ ムは使わない。ユーザの本名は、次のような形式で付加されることもある。

From: Shiro Yagi <shiro@is.tsukuba.ac.jp>
この場合、電子メール・アドレスは、必ず <> で括る。

電子メールを出す時には、To:Cc: に 「,」で区切って複数のアドレスを書く こともでる。


To: shiro@is.tsukuba.ac.jp, kuro@is.tsukuba.ac.jp
もし、1行に入り切らない時には、次のように複数行に分けて書く。

To: shiro@is.tsukuba.ac.jp, kuro@is.tsukuba.ac.jp,
	aka@is.tsukuba.ac.jp, momo@is.tsukuba.ac.jp,
	midori@is.tsukuba.ac.jp
2行目以降は、行の先頭にタブや空白を置く。

◆漢字の扱い

電子メールの本文には、漢字を使ってもかまいません。 電子メールでは、漢字コードとしては、JIS を使うことになっている。

ヘッダ部分は、漢字を使うことにはいくつか問題がある。まず、 From:To:Cc:などの電子メールのアドレスを書くべき 所には、JISコードで直接漢字を入れることはできない。 MIMEという形式を使ってうまく符号化して漢字を 含める機能を持っているメール・リーダもある。

◆メールボックスのモード

メール・ボックスのモードには気を付けてる。 サーバ上で ls -l コマンドで調べて、 ファイルの場合は600 (rw-------) 、ディレクトリの場合 は700 (rwx------) になっているべきである。 これは、大事な電子メールが他の人に読まれないようにするためです。モード がそうなっていない時には、サーバ上でchmod コマンドで変更 する。

◆spamメール

現在の電子メールの技術では、基本的には、送られてきた電子メールは受け取 るしかない。この性質を悪用して、商品の広告などを、望んでいない大 勢の人に送り付ける行為を繰り返す会社が出てきた。そのようなメール を spamメールUCM(Unsolicited Commercial Mail) 、 または、 UBM(Unsolicited Bulk Mail) という。spamメールの内容は、あまりまともなものはなく、怪しげな商品の広告、 チェーン・レター、spamメールでの広告代行に関する広告であることが多い。

現在(2002年2月)、日本では、spamメールを取り締まる法律を作る検討をしている。 国や地域によっては、既に取り締まる法律を整備している。

■電子メールに関する中級者向けの知識

◆~/.forwardによる電子メールの転送

メール・リーダには、 受け取ったメールをユーザの操作で1つひとつ 転送(forward),てんそう する機能がある。 それとは別に、届いたメールをユーザの操作を介さずに自動的に他のアドレス (普通は他のホストにある別の自分の電子メール・アドレス)に転送する機能 がある。この機能を使うには、ホーム・ディレクトリの下の ~/.forward (z:\.forward) というファイルに、転送先のアドレスを書く。 たとえば、 shiro@himalaya.is.tsukuba.ac.jp に届いたメールを全て shiro@alps.is.tsukuba.ac.jp に転送したいとする。この時、 himalaya の方のホーム・ディレクトリの下の ~/.forward に次のように書く。

shiro@alps.is.tsukuba.ac.jp

単純に転送先のアドレスを書く方法では、~/.forwardが あるホストには、何も残らないが、コピーを残しながら、転送する方法もある。 それには、次のように自分のログイン名に\を付けたア ドレスを含める。


\shiro, shiro@alps.is.tsukuba.ac.jp
この例では、himalaya に届いた電子メールは、himalaya と いうホストの \shiroというユーザの 配送プログラム用メール・ボックスに入り、 さらに、shiro@alps.is.tsukuba.ac.jp にも送られる。

複数のメール・アドレスがある人は、どのホストにログインした時にも、全部 のホストに届いた電子メールが読める状態にしたいと思うかもしれない。 上の例では、 alps にログインした時にも、 alpshimalaya の両方のメールが読め、 また、himalaya にログインしてもやはり alpshimalaya の両方のメールが読める と便利に思えるかもしれない。しかし、こうすることは技術的に難しいので、 しばらくはあきらめて欲しい。

\loginnameの機能をつかっても、なかなかうまくいかない。 たとえば、次のよう な ~/.forward を作成したと考える。(実際に実行すると危険なので、 考えるだけする。)


(alps:~/.forward)
\shiro, shiro@himalaya.is.tsukuba.ac.jp

(himalaya:~/.forward)
\shiro, shiro@alps.is.tsukuba.ac.jp
この状態で、shiro@alps.is.tsukuba.ac.jp にメールが届いた 場合、次のようなことが起る。
  1. alps にコピーが残され、かつ、 shiro@himalaya.is.tsukuba.ac.jp に送らる。
  2. himalaya では、やはり、コピーが残され(ここまでは順調)、 さらに、shiro@alps.is.tsukuba.ac.jp に送られる(!)。
  3. alps では、コピーが残され(2回目)、himalaya に送られる。
  4. himalaya では、コピーが残され(2回目)、 さらに、shiro@alps.is.tsukuba.ac.jp に送られる。
  5. alps では、コピーが残され(3回目)、himalaya に送られる。
  6. himalaya では、コピーが残され(3回目)、 さらに、shiro@alps.is.tsukuba.ac.jp に送られる。
  7. alps では、コピーが残され(4回目)、himalaya に送られる。
  8. himalaya では、コピーが残され(4回目)、 さらに、shiro@alps.is.tsukuba.ac.jp に送られる。
  9. ...
このような電子メールのピンポンが、永遠に続く。実際には、電子メールの転 送には上限が設定されているので、その上限に達した段階でエラーになって止 る。

3ヵ所以上でこの設定をしたとすると、中継される度にメールが増殖する。

\loginname の機能を使っていなかったとすると、コピーは 残らないが、メールが行き来するだけで、どこにも届けられずにエラーになる。

~/.forward の設定をしたら、必ず自分で自分あてに電子メールを出 して届くかテストすること。~/.forward の設定を間違えると、エラー のメールも届かなくなるので、エラーが起こっていることさえわからなくなる。

◆電子メールをプログラムに転送する

~/.forward の応用として、他のアドレスに電子メールを転送するの ではなく、(サーバ上で実行される)プログラムに転送する機能がある。すな わち、(サーバ上で)プログラムを実行して標準入力に電子メールの内容を与 えるという機能がある。これには、次のように~/.forwardに書く。

"| /program/path/name arg1 arg2 arg3 ... argn" 
このように、| に続いて、プログラムのパス名と引数を書き、 全体を "" で括る。

この機能を使って、受け取った電子メールを自動的に分類したり、 spamメール を排除したりすることができる。たとえば、MH の slocalprocmail と呼ば れているプログラムがこの機能を使っている。

◆電子メールでテキスト以外のデータを扱う

電子メールの形式で説明したように、電 子メールで送ることができるのは、基本的にはテキストだけである。 テキストとは、 画面に文字として表示されるデータとタブや改行などの制御コードが並んでい るもの。また1行の長さ(改行のコードの間隔)には、制限がある。 電子メールを中継するプログラムによっては、 任意のバイト列を通過させることができず、7ビットで表わされる範囲(0〜 127)で表わされる範囲だけしか扱えないものが使われている。

このような状況で、電子メールで、テキスト以外のデータ、たとえば画像デー タや音声データ、ワードプロセッサの文書を送る時には、 任意のバイト列をよく使われる文字だけで表現することが必要になる。

文字だけで表現方法

◆uuencode

uuencode 形式 は、Unix でかなり古くから使われてきた、任意のバイト列を電子メールで送 るための形式。

特徴:

uuencode 形式で符号化されたファイルの例:
begin 644 name
M1G)O;2!S:&ER;R!3870@1F5B(#$T)#AU.C4S.C0Q(#$Y.3@*4F5C96EV960Z
M)"AF<F]M(A-H:7)O0&QO8V%L:&]S="D*"6(Y)&AJ:V=W-"YI<RYT<W5K=6;A
`
end

◆MIME

MIME (Multipurpose Internet Mail Extensions) では、次のようなことを表わすことができる。

MIME に対応したメール・リーダなら、メールを読む時には、MIME 形式のデー タを自動的に元の形にもどしたり、メールを送出す時には、自動的にMIME形式 を使ったりするので、日常的にMIMEと向き合う必要はない。

◆MIMEの仕組み

MIME に対応したメール・リーダでは、電子メールを送る時に、よく次のよう なヘッダを付る。


Mime-Version: 1.0
Content-Type: text/plain; charset=iso-2022-jp
Content-Transfer-Encoding: 7bit
これは、使っている MIME のバージョン、内容の型、ビット数を宣言している 。この例では、 内容の型は普通のテ キスト、符号化方式は iso-2022-jp (JIS)、内容のビット数は 7 ビットであ ることを示している

テキスト以外の型としては、 表? のようなものがよく使われる。text/plainの場合、 charset= で、文字の 符号化の方法の指定が続く。

表? MIMEでよく使われる型

----------------------------------------------------------------------
型				説明
----------------------------------------------------------------------
text/plain			普通のテキスト。ASCIIまたはISO-8859。
text/html			HTMLのテキスト
image/gif			GIF形式の画像
image/jpeg			JPEG形式の画像
image/tiff			TIFF形式の画像
video/mpeg			MPEG形式の動画像
video/quicktime			QuickTime形式の動画像
audio/basic			音声データ(8ビット、8000Hz、μ)
application/octet-stream	バイナリ(8ビットのデータの並び)
application/postscript		PostScript のデータ
message/rfc822			RFC822形式(電子メールの形式)
multipart/mixed			複数のMIME形式のデータのならび
				(マルチパート形式)
----------------------------------------------------------------------

また、1通のメールで複数のデータを混在させる時には、次のような行が現わ れる。


Mime-Version: 1.0
Content-Type: Multipart/Mixed;
	boundary="--Next_Part(Sat_Mar_14_23:05:09_2002_86)--"
Content-Transfer-Encoding: 7bit

このように、Content-Type:Multipart になっているものを、 マルチパート形式 という。この場合、boundary= で指定された 文字列で、データが区切られる。 各々の中味は、 RFC822形式(電子メールの形式) に似ていて、ヘッダと本文がある。ヘッダには、 同じように Content-Type: などが現われる。 

また、To:, Cc:, Subject: などに漢字を含める時にも、 MIME 形式の1つ、 MIMEヘッダ形式 が使われる。これは、たとえば、Subject:なら、次のような形式になっ ている。


Subject: =?charset>?encoding?string?=
ここで、charset は、 Content-Type: と同じ 文字の符号化の方法、 encodingは、 バイナリのテキストによる符号化方式( B(base64)か、Q(quoted printable)、普通は、B) 、string には、符号化された文字が来ます。 たとえば、

Subject: 漢字の題名
は、次のようになります。

Subject: =?iso-2022-jp?B?GyRCNEE7eiROQmpMPhsoQg==?=

MIME でよく使われている、バイナリのテキストによる符号化方式には、次の ようなものがある。

base64 (64進数)
アルファベットの大文字、小文字、数字、+、/ を使って、コード化する。
quoted printable
7ビット文字は、ほとんどそのままで、それ以外は、 =XX (XXは16進数)で表わす。
なお、7bit, 8bit, binary は、符号化しないという意味。 ただし、電子メールとして1行の最大文字数の制限は満たしていることは 確認されている。

■電子メールの転送の仕組み

メールリーダには、Netscape Messenger, OutlookExpress, mnews、Rmail、MH, Mew, など、いろいろなものがある。 これらのプログラムは、全て MUA (Mail User Agent) とよばれ、ユーザと対話のみを担当する。実際にメールを配送する時には、 MTA (Mail Transfer Agent) と呼ばれるプログラムを利用する。

MTA の種類

ユーザが書いた電子メールは、次のようにして送り届けられる。

  1. ユーザは、送信側の MUA を操作して、電子メールの本文を作成する。
  2. 送信側の MUA は、送信側の MTA に 転送を依頼する。
  3. 送信側の MTA は、設定ファイル (sendmail.cfなど)を参 照し、受信側の MTA を探して TCP/IP で接続する。この時、 TCP/IP 上で使われる通信プロトコルが SMTP である。 TCP/IP で接続する時には、DNS も参照され、A レコードと MX レコードが使われる。
  4. 受信側の MTA は、受信側の 設定ファイル(sendmail.cf, aliasesなど), ~/.forward を参照する。もし、 自分あてのものでなければ、再び他の MTA を探して転送する。自分自身 で受け取る場合には、 配送プログラム用メール・ボックスに保存する。 この時、/bin/mail ( /bin/mail ) というプログラムが使われることが多い。
  5. 受信側の MUA は、配送プログラム用メール・ボックスのファイ ルを開き、電子メールの内容を読み込む。MUA によっては、直接 配送プログラム用メール・ボックスのファイルを開くのではなく、POP サーバや IMAP サーバを通じて、アクセスすることもある。
このように電子メールを送るためには、さまざまなプログラムを使う。こ れらのプログラムがすべて動いて始めて電子メールが無事送り届けられる。

図? 電子メールの転送の仕組み

図? 電子メールの転送の仕組み

◆SMTP (Simple Mail Transfer Protocol)

SMTP (Simple Mail Transfer Protocol) は、電子メールの転送を行うためのプロトコル。 このプロトコルは、MTA 間で電子メールを配送したり、MUA が MTA に電子メールの配送を依頼する時に使われる。

SMTP で電子メールが出される様子。


----------------------------------------------------------------------
% mail -v yas@is.tsukuba.ac.jp [←]
Subject: hello[←]
body[←]
.[←]
EOT
yas@is.tsukuba.ac.jp... Connecting to host1.is.tsukuba.ac.jp. via smtp...
220 host1.is.tsukuba.ac.jp ESMTP Sendmail 8.8.8/3.7W; Wed, 26 Aug 2002 23:23:24 +0900 (JST)
>>> EHLO host2.cc.tsukuba.ac.jp
250-host1.is.tsukuba.ac.jp Hello host2.cc.tsukuba.ac.jp [XXX.XXX.XXX.XXX], pleased to meet you
250-EXPN
250-VERB
250-8BITMIME
250-SIZE
250-DSN
250-ONEX
250-ETRN
250-XUSR
250 HELP
>>> MAIL From:<user2@host2.cc.tsukuba.ac.jp> SIZE=46
250 ... Sender ok
>>> RCPT To:<yas@is.tsukuba.ac.jp>
250 <yas@is.tsukuba.ac.jp>... Recipient ok
>>> DATA
354 Enter mail, end with "." on a line by itself
>>> .
250 XAA16824 Message accepted for delivery
yas@is.tsukuba.ac.jp... Sent (XAA16824 Message accepted for delivery)
Closing connection to host1.is.tsukuba.ac.jp.
>>> QUIT
221 host1.is.tsukuba.ac.jp closing connection
%
----------------------------------------------------------------------
この例では、MUA である mail コマンドが、MTA であ る /usr/lib/sendmail を呼び出している。画面には、ロー カルの /usr/lib/sendmail と、別のホストの sendmail デーモンの間の、SMTP によるやり取りが表示されてい いる。(mail コマンドに与えた -v (verbose) オプションの効果。)

>>> の次に現われているものが、SMTP の要求で、送信側のホスト host2 の MTA の出力である。 数字で始まっている所が、受信側の host1 の MTA の応答である。このように、SMTP では、2つのプログラム が対話をして、電子メールを転送する。

上の対話には、現われていないが、DATA の後に 電子メールの本文が送られている。ここで本文には、 From:, To:, Subject: など のヘッダも含まれている。

本文の From:To: は、電子メールの転送には使われない。 転送には、 表?に出てくる MAIL FROM:RCPT TO: に続くアドレスが 使われる。この、SMTP のレベルの、配送に使われるデータ を、本文と区別して 封筒 (envelope) と呼ぶ。

SMTP で DATA の中に出てくるTo: と、 RCPT TO: は、多くの場合一致している。しかし、メーリン グ・リストのメールや、~/.forward で転送されたメールでは、一致して いない。すなわち、メーリング・リストや~/.forward がうまく働くのは、 封筒に書かれた宛先が使われていることによる。

表? よく使われるSMTPで定義されている手続き

--------------------------------------------------------------------
MAIL FROM:fromaddr
	新しいメールの転送を開始する。
	fromaddrは、エラーが起きた時の送り返し先のアドレスになる。

RCPT TO:toaddr
	メールの送り先として toaddr を指定する。

DATA
	メールの本文を送り始める。

VRFY	user
	ログイン名 user のユーザがメールの受け手として存在す
	るかを確認する。

EXPN	ST2_Var(mlname)
	メーリング・リストの受取人を表示する。

HELO domain
	最初に接続した時に自分自身を相手に知らせる。

EHLO domain
	最初に接続した時に自分自身を相手に知らせる。

QUIT
	接続を切る。
--------------------------------------------------------------------

表? よく使われるSMTPの応答コード

--------------------------------------------------------------------
コード	説明
--------------------------------------------------------------------
220	そのドメインで要求受け付け可能である。
250	そのアドレスへのメールは、受け付け可能である。
251	そのアドレスは、ローカルには受取人がいない。
354	メールの本文を受け付ける。
--------------------------------------------------------------------

■実習

◆サーバ上のメールボックスの観察

配送プログラム用メール・ボックス は、サーバ (icho) 上の ~/Mailbox にある。次のようにして観察する。
  1. telnet (Tera Term) でサーバ (icho) に接続してログインする。 ユーザ名とパスワードを打つ。 以下の一連の作業が終わったら、最後に、ログインを解除する(ログアウト) する。そのためには、exit コマンドかlogout コマンドを使う。
    
    % exit [←]
    
  2. cat コマンドを実行する。
    
    % cat ~/Mailbox [←]
    
    あるいは、nkf コマンドを実行する。
    
    % nkf -e ~/Mailbox [←]
    
  3. telnet (Tera Term) をマウスで操作して、表示を戻す。
  4. ipe.tsukuba.ac.jp の自分のアドレスにメールを送る。
  5. 普段使っているメールリーダで取り込む「前」にもう一度 cat コマンド か nkf コマンドで~/Mailbox を調べる。
  6. 取り込んだ後に調べる。

◆MTAの直接実行

MTA sendmail (実体は icho では qmail)を直接実行して、電子メールを送る。
  1. telnet (Tera Term) でサーバ (icho) に接続してログインする。 ユーザ名とパスワードを打つ。 以下の一連の作業が終わったら、最後に、ログインを解除する(ログアウト) する。そのためには、exit コマンドかlogout コマンドを使う。
    
    % exit [←]
    
  2. 次のように sendmail コマンドを実行する。 メールの最後には、^D キー (Controlキーを押しながら D キーを押す)。
    
    % /usr/lib/sendmail yshinjo@ipe.tsukuba.ac.jp [←]
    To: shinjo@ipe.tsukuba.ac.jp[←]
    Subject: hello[←]
    [←]
    body[←]
    % []
    
  3. cat コマンド、または、nkf コマンドで ~/Mailbox を調べる。
    
    % cat ~/Mailbox [←]
    
  4. 普段使っているメールリーダで取りこみ、2. で送ったメールを 見る。

◆From:の変更

MTAの直接実行で、自分でヘッダ From: を打ち込 んでみなさい。

◆SMTPによるメールの発信(やらなくてもよい)

次のセッションを参考にして、サーバ上で telnet コマンドを実行し、自分宛 てにメールを出してみなさい。yshinjo@icho.ipe.tsukuba.ac.jp は、 自分のアドレスで置き換えること。

----------------------------------------------------------------------
% telnet icho.ipe.tsukuba.ac.jp 25 [←]
Trying 130.158.65.1...
Connected to icho.ipe.tsukuba.ac.jp.
Escape character is '^]'.
EHLO icho.ipe.tsukuba.ac.jp[←]
250-icho.ipe.tsukuba.ac.jp)[←]
250-PIPELINING
250 8BITMIME
MAIL From:<yshinjo@icho.ipe.tsukuba.ac.jp>[←]
250 ok
RCPT To:<yshinjo@icho.ipe.tsukuba.ac.jp>[←]
250 ok
DATA[←]
354 go ahead
To: yshinjo@icho.ipe.tsukuba.ac.jp[←]
From: yshinjo@icho.ipe.tsukuba.ac.jp[←]
Subject: hello[←]
[←]
body[←]
.[←]
250 ok 1013108595 qp 7988
quit[←]
221 icho.ipe.tsukuba.ac.jp
Connection closed by foreign host.
% []
----------------------------------------------------------------------

◆添付ファイルの観察(やらなくてもよい)

自分宛て添付ファイルを含むメールを出してみなさい。それを、cat コマンド や nkf コマンドで~/Mailbox を表示して、文字が並んでいることを確認しな さい。
↑[もどる] ←[2月1日] ・[2月8日] →[2月15日]
Last updated: Date:
Yasushi Shinjo / <yas@is.tsukuba.ac.jp>