共通科目情報処理(講義)、体育専門学群対象、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/
電子メール は、電話や(普通の)手紙と同じように、個人と個人の間で情報を交換するた めの仕組み。
電子メールを読み書きするプログラムは、 メール・リーダ(mail reader) または、 メーラ(mailer) という。 「リーダ(reader)」といっても、書くこともできる。
種類
電子メールを使う上で重要な考え方
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) と呼んでいる。
電子メールのテキストは、大きくヘッダと本文に分かれる。
From:
To:
Cc:
Date:
Subject:
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行以内」。
電子メールは、「 メール・ボックス 」と呼ばれている ファイル に保存される。メール・ボックスは、プログラムによっては、 フォルダ(folder) と呼ばれることもある。 メール・ボックスには、次の2種類がある。
/var/spool/mail/user
や
/var/mail/user
という名前のファイル。
(icho では ~/Mailbox
)
メール・リーダが表示するのは、多くの場合、後者のメール・ボックスである。 新しく届いたメールを読む時には、前者から後者へメールを移す必要がある。 この作業を、 「 (電子メールを)取り込む(incorporate) 」とう。
配送プログラム用メール・ボックスは、1つのサーバで1人で1つだけだが、 ユーザ用メール・ボックスは、必要に応じていくつか作ることができる。
電子メールをため込んでいるコンピュータ(サーバ)にあるメールを、手元の コンピュータにコピーするには、 POP (Post Office Protocol)や、 IMAP(Internet Message Access Protocol) という TCP/IP 上に定義された通信プロトコルを使うことがある。
POP では、配送プログラム用メール・ボックスを読み書きする機能がある。 IMAP では、それに加えて、複数のユーザ用メール・ボックスを扱えるように なっている。
電子メールで仕事をしていると、単にメールを出すだけではなく、受け取った
電子メールに対して返事を出すことが多い。そのため、メール・リー
ダでは、返事を出す作業を簡単に行うことができるようになっている。返事
を出すことを
リプライ
するともいう。返事を出す時には、To:
が自動的に作られるだけで
なく、Subject:
も同じもの、あるいは、にRe:
が付い
たものが自動的に付けられる。
電子メールで返事を出す時には、相手のメールの内容を引用することがある。
この時、相手が書いた部分と自分が書いた部分を区別するために、相手
が書いた部分の行の先頭には、引用のための記号を付ける習慣がある。こ
の記号には、「>
」や 「>>
」、
タブがよく使われる。
受け取ったメールを、別の人に送ることを、 転送(forward) という。 多くのメール・リーダでは、手作業で転送できるようになっている。
複数のメール・アドレスがある人は、あるアドレスに届いた「全て」のメールを、 別のメール・アドレスの所に自動的に転送できる場合がある。 については、
メールの数が増えてきたら
多くのメール・リーダは、長いアドレスや複数のアドレスを短い 別名(alias) で参照できるようになっている。 別名には、個人で付けるものの他に、システム全体で付けるものがある。
Re:
は、「〜に関して」という意味の単語で、英和辞書にも載っている。英語の
手紙、特にビジネスの分野では、日常的によく使われる。返事をする時に使
われるので、reply の略だと思っている人も多い。
電子メールでも普通の手紙でも、最初にメールを送る時には、
Re:
がないSubject: で出し、それについて返事を出す時には、
元のサブジェクトの前に Re:
を付けた形の Subject:を使う。
一般的な習慣では、返事に対する返事の場合でも、Re:
の数は
増えない。
特に関係のない人に届いてしまう危険性に注意する。
間違えないようにするには、できるだけキーボードから手で打たないようにす
る。メール・リーダの「返事を出す(reply)」機能を使うと便利な場合が多い。
ただし、メーリング・リストなどで、Reply-To:
が付いていたりする時
には、注意が必要になる。
コピー&ペースト機能を使う方法もある。
電子メールを分類するための大事なキーワードになるので、忘れずに付ける。 内容を表わす簡潔なものにする。署名は、簡潔で短いものが好まれている。「JUNETの手引き第1版」で既に 現われている目安としては、「4行以内」というものがある。
返事を出す時には、最初は、相手のメールの内容がすべて引用された状態から 出発することが多いが、必要な部分だけを残して、不要な部分を 消すようにする。 電子メールの大きさは、「1通あたり数10kにすべし」という時代が あったが、今では、数10Mバイトのメールを送っても平気な環境もある。大きな電子メールはトラブルの元になりることが多いので、送る時には慎重に する。
テキスト以外のデータを電子メールで送る時には、相手が読めるかどうかを確 認してから送る。
ある事柄を他人に伝えるのに、本当に電子 メールが有効とは限らない。 電話などの記録に残らないメディアが便利な場合もある。暗号を使っていない限り、電子メールは、葉書と同じで、 除かれる形で配送される。特にシステム管理者は、誰の電子メールを 読もうと思えば読める状態になっている。 途中で誰かに見られると非常に困るような内容は、電子メールで送るのには危 険がある。また、ディジタル署名が付いていない電子メールの場合、本当にそ の本人が出したものなのか、確認する方法はない。
電子メールという媒体を使ったとしても、世の中とは無縁ではない。目 上の人、知らない人に電子メールを出す時には、注意する。紙の手紙のよ うに季節の話題を必ず入れる必要はないが、失礼のないような表現を 使う。電子メールでも挨拶をするのは、よい習慣である。 電子メールは、受け取ったらできるだけ早く返事を出すという習慣がある。 そうしないと、送った相手が読んだかどうかわからないからです。返事が来な いと、相手が読んだのかどうか、途中でエラーで失われたのかどうかと不安に なる。内容によっては、すぐに返事が出せない時には、 「受け取りました」ということだけでも先に出す。
ヘッダには、次のような項目 ( フィールド(field) ) が含まている。
From:
To:
Cc:
To:
には、本来の宛先を書き、Cc:
にはつい
でに連絡したい宛先を書くために書く。電子メールを送る時に、
Cc:
に自分の電子メール・アドレスを書けば、自分が送った
電子メールを保存することができる。Cc は、Carbon Copy に由来する。
Subject:
Date:
Message-Id:
Reply-To:
From:
に書かれているア
ドレスが使われる、Reply-To:
がある場合には、それが優先される。
In-Reply-To:
Message_Id:
やFrom:
、Date:
から作られる。
1行に収まらない時には、2行目以降の行の先頭 にタブや空白が置かれる。たとえば、次のような形式になる。name: value
Subject: Long long long long long long long long very long subject
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:
に
「,
」で区切って複数のアドレスを書く
こともでる。
もし、1行に入り切らない時には、次のように複数行に分けて書く。To: shiro@is.tsukuba.ac.jp, kuro@is.tsukuba.ac.jp
2行目以降は、行の先頭にタブや空白を置く。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
ヘッダ部分は、漢字を使うことにはいくつか問題がある。まず、
From:
、To:
、Cc:
などの電子メールのアドレスを書くべき
所には、JISコードで直接漢字を入れることはできない。
MIMEという形式を使ってうまく符号化して漢字を
含める機能を持っているメール・リーダもある。
メール・ボックスのモードには気を付けてる。
サーバ上で
ls -l
コマンドで調べて、
ファイルの場合は600 (rw-------
) 、ディレクトリの場合
は700 (rwx------
) になっているべきである。
これは、大事な電子メールが他の人に読まれないようにするためです。モード
がそうなっていない時には、サーバ上でchmod
コマンドで変更
する。
現在(2002年2月)、日本では、spamメールを取り締まる法律を作る検討をしている。 国や地域によっては、既に取り締まる法律を整備している。
~/.forward
(z:\.forward)
というファイルに、転送先のアドレスを書く。
たとえば、
shiro@himalaya.is.tsukuba.ac.jp
に届いたメールを全て
shiro@alps.is.tsukuba.ac.jp
に転送したいとする。この時、
himalaya
の方のホーム・ディレクトリの下の
~/.forward
に次のように書く。
shiro@alps.is.tsukuba.ac.jp
単純に転送先のアドレスを書く方法では、~/.forward
が
あるホストには、何も残らないが、コピーを残しながら、転送する方法もある。
それには、次のように自分のログイン名に\
を付けたア
ドレスを含める。
この例では、himalaya に届いた電子メールは、\shiro, shiro@alps.is.tsukuba.ac.jp
himalaya
と
いうホストの
\shiro
というユーザの
配送プログラム用メール・ボックスに入り、
さらに、shiro@alps.is.tsukuba.ac.jp
にも送られる。
複数のメール・アドレスがある人は、どのホストにログインした時にも、全部
のホストに届いた電子メールが読める状態にしたいと思うかもしれない。
上の例では、
alps
にログインした時にも、
alps
と himalaya
の両方のメールが読め、
また、himalaya
にログインしてもやはり
alps
と himalaya
の両方のメールが読める
と便利に思えるかもしれない。しかし、こうすることは技術的に難しいので、
しばらくはあきらめて欲しい。
\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
にメールが届いた
場合、次のようなことが起る。
alps
にコピーが残され、かつ、
shiro@himalaya.is.tsukuba.ac.jp
に送らる。
himalaya
では、やはり、コピーが残され(ここまでは順調)、
さらに、shiro@alps.is.tsukuba.ac.jp
に送られる(!)。
alps
では、コピーが残され(2回目)、himalaya
に送られる。
himalaya
では、コピーが残され(2回目)、
さらに、shiro@alps.is.tsukuba.ac.jp
に送られる。
alps
では、コピーが残され(3回目)、himalaya
に送られる。
himalaya
では、コピーが残され(3回目)、
さらに、shiro@alps.is.tsukuba.ac.jp
に送られる。
alps
では、コピーが残され(4回目)、himalaya
に送られる。
himalaya
では、コピーが残され(4回目)、
さらに、shiro@alps.is.tsukuba.ac.jp
に送られる。
3ヵ所以上でこの設定をしたとすると、中継される度にメールが増殖する。
\loginname
の機能を使っていなかったとすると、コピーは
残らないが、メールが行き来するだけで、どこにも届けられずにエラーになる。
~/.forward
の設定をしたら、必ず自分で自分あてに電子メールを出
して届くかテストすること。~/.forward
の設定を間違えると、エラー
のメールも届かなくなるので、エラーが起こっていることさえわからなくなる。
~/.forward
の応用として、他のアドレスに電子メールを転送するの
ではなく、(サーバ上で実行される)プログラムに転送する機能がある。すな
わち、(サーバ上で)プログラムを実行して標準入力に電子メールの内容を与
えるという機能がある。これには、次のように~/.forward
に書く。
このように、"| /program/path/name arg1 arg2 arg3 ... argn"
|
に続いて、プログラムのパス名と引数を書き、
全体を ""
で括る。
この機能を使って、受け取った電子メールを自動的に分類したり、
spamメール
を排除したりすることができる。たとえば、MH の
slocalやprocmail
と呼ば
れているプログラムがこの機能を使っている。
このような状況で、電子メールで、テキスト以外のデータ、たとえば画像デー タや音声データ、ワードプロセッサの文書を送る時には、 任意のバイト列をよく使われる文字だけで表現することが必要になる。
文字だけで表現方法
uuencode 形式 は、Unix でかなり古くから使われてきた、任意のバイト列を電子メールで送 るための形式。
特徴:
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 (Multipurpose Internet Mail Extensions) では、次のようなことを表わすことができる。
MIME に対応したメール・リーダなら、メールを読む時には、MIME 形式のデー タを自動的に元の形にもどしたり、メールを送出す時には、自動的にMIME形式 を使ったりするので、日常的にMIMEと向き合う必要はない。
MIME に対応したメール・リーダでは、電子メールを送る時に、よく次のよう なヘッダを付る。
これは、使っている MIME のバージョン、内容の型、ビット数を宣言している 。この例では、 内容の型は普通のテ キスト、符号化方式は iso-2022-jp (JIS)、内容のビット数は 7 ビットであ ることを示している。Mime-Version: 1.0 Content-Type: text/plain; charset=iso-2022-jp Content-Transfer-Encoding: 7bit
テキスト以外の型としては、
表?
のようなものがよく使われる。 表? MIMEでよく使われる型
text/plain
の場合、
charset=
で、文字の
符号化の方法の指定が続く。
----------------------------------------------------------------------
型 説明
----------------------------------------------------------------------
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 でよく使われている、バイナリのテキストによる符号化方式には、次の ようなものがある。
=XX
(XX
は16進数)で表わす。
MTA の種類
ユーザが書いた電子メールは、次のようにして送り届けられる。
sendmail.cf
など)を参
照し、受信側の MTA を探して TCP/IP で接続する。この時、
TCP/IP 上で使われる通信プロトコルが SMTP である。
TCP/IP で接続する時には、DNS も参照され、A レコードと MX
レコードが使われる。
sendmail.cf
, aliases
など),
~/.forward
を参照する。もし、
自分あてのものでなければ、再び他の MTA を探して転送する。自分自身
で受け取る場合には、
配送プログラム用メール・ボックスに保存する。
この時、/bin/mail
(
/bin/mail
)
というプログラムが使われることが多い。
図? 電子メールの転送の仕組み
SMTP で電子メールが出される様子。
この例では、MUA である mail コマンドが、MTA であ る---------------------------------------------------------------------- % 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 % ----------------------------------------------------------------------
/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の応答コード
-------------------------------------------------------------------- コード 説明 -------------------------------------------------------------------- 220 そのドメインで要求受け付け可能である。 250 そのアドレスへのメールは、受け付け可能である。 251 そのアドレスは、ローカルには受取人がいない。 354 メールの本文を受け付ける。 --------------------------------------------------------------------
~/Mailbox
にある。次のようにして観察する。
% exit
あるいは、nkf コマンドを実行する。% cat ~/Mailbox
% nkf -e ~/Mailbox
~/Mailbox
を調べる。
% exit
% /usr/lib/sendmail yshinjo@ipe.tsukuba.ac.jp To: shinjo@ipe.tsukuba.ac.jp Subject: hello body %
~/Mailbox
を調べる。
% cat ~/Mailbox
---------------------------------------------------------------------- % 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. % ----------------------------------------------------------------------
Date: