-ARAGOのInternetメイル機能を御使いになる前に
未校正です01 April 98 草稿1 rev.01
インターネットメイルについての本はたくさんありますが、Mailerソフトの使い方が多く、プログラムを書く方にはどうもすっきりとしないようです。ARAGOから簡単にInternet メールを送受信できるようになりました。 プログラムでメールを管理できます。 自動応答システム、複数の定型サンプルメールと相手先をプログラムで処理し業務効率を改善できます。 もちろんARAGOIとくみあわせWebとの連携した操作が出来ます。
ARAGOのメイルの送受信機能を使う前に簡単なInternet Mailのおさらいです。
ここではInternet Mailについての基本的な仕組みとメイルの転送に使う重要な部分であるmail headerと文字、コード化する話を解説します。
ご存知だと思いますがSMTP、POP3、NNTPという言葉が良く出てきます。
まずSMTPはSimple Mail Transfer Protocolです。これはクライアントのmailerがメイルサーバー(後で解説します)とメイルをやり取りする為のプロトコルです。 chat(おしゃべり)するわけです。このプロトコル(信号、手順、アメリカインディアンの煙による信号はSmoke Protocolです)によってクライアントのMailer(以下mailerとする)がどのmail serverとchatをし自分はだれでどこにメイルを送りたいと話をします。
規格では非常に単純なものですが、実際にはずいぶんといろいろ余計なことまでchatしています。 たとえばQUITを(終了)送るときSee U again in Cyber sapceなんてことまで送っています。 このchatで受取ったmailはMail ServerはDNSを使い相手のアドレスをとり、相手のDNSに指定されているmail serverをMXレコードを使い探します。 相手のmail Serverが見つかると再びSMTPでchatします。 どのホストからどのホストまでのメイルがあるがオタクにこの名前のホストはいるかとか始めメイルを送ります。 相手のmail serverは受信したメイルを最終の受信者が取りに来るまで保管します。
Mail Clent---(SMTP)---->Internal SMTP server---(SMTP)------>Destination SMTP Server
となります。
受信者は自分のPost Officeにメイルが来ているかを確認に行きあるとそれを自分のところにコピーします。
これで使うプロトコルが Post Office Protocolです。時々メイルがつかないのは世界のどこかへ行っちゃったとか、そのうち世界のどこかのサーバーが届けてくれるよどという人がいますが誤りです。 SMTPは指定されたサーバーとchatします。 それ以外のサーバーとはchatできません。 それはそうでしょう、でないと人のメイルが自分のサーバーにきたので見てやろうとか、おかしな話になります。 もちろんmail Serverの中には色々あります。 たとえばSendmailはスクリプトを書き、Send toにスクリプトを入れ込むことによっていろいろな処理が出来ます。 しかしこれも不特定のサーバーが介在するわけではありません。 前に出したメールが届かないのはSMTPが相手とchatできないからです。 メイルアドレスが間違えている、相手のmail serverが落ちている。 相手が引っ越した、などです。 とすると戻ってくる配達不能郵便物があったりなしのつぶてになったりするのはどうしてでしょう、 これはmail serverの設定によります。 非常に遅いメールサーバーでは数時間か刈るものもあるようです。 またserverが受信したメイルを送り出す間隔を極端な設定をして、数時間後に送信を始めるようなserverもあるようです。
Mail Serverと簡単に書いています、実際は内部的にはSMTPを処理するサービスプログラム(DaemonとUNIXではいいます。)とクライアントからメイルの確認がきたときメイルを渡すPOP3があります。
実際のインプリメントでは一つのパッケージになっているものもありますし、Mdaemon、SMTPのもとになったUNIXのSendmailとPOP3の組み合わせなどがあります。
どちらにしても基本的にまったく同じことをします。 Internet News Groupへの発言もSMTPを使いますがここでは解説しません。
IMAPもここの目的からはずれますので省力します。
Mail Server、Mail Daemonにはそれぞれの置かれたホスト名があります。DNSにはMXレコードでSMTP サーバーをホスト名として指定します。
POP3は当然外部からのアクセスが想定できませんのでDNSには含まれません。 MXレコードには複数のSMTPホストを指定できます。
外部からアクセスされたとき番号の小さいものから優先されます。 実際にこのインプリメントをしている例は少ないと思います。
このSMTP サーバーにはpasswordの概念がありません。 ですから多くのmailerは送信の前か後に受信するように設定するようにしています。
POP3はpasswordが必要だからです。 つまり悪意で他人のメイルサーバから送信することは可能です。 受信者は差出人が xxx.govなんて書いてあるとえ!と思いますよね。
真似しないで下さい。 相手のSMTP サーバーにログが残り犯罪として処断されると思います。
Mail Clent---POP3---->Internal Mail Server
です。
現在SPCではMdaemonを使っています、非常にコンパクトでGUIがわかりやすく設定出来る項目もも豊富です。 Mdaemonのユーザーでは4000人を一つのMdaemonで処理していて問題はないといっています。 複数のメールサーバーを使うときはだいたい部門サーバーにするようです。
もちろん概念としてmailに対するPROXY Serverもあります、 いろいろなインプリメントが考えられますが、 mail headerにホスト名を残さないとかでしょう。 でもmailアドレスは個人のものですからPROXYの概念とは真っ向から対立します。 ご自分でお調べください。
POP3サーバーにはPOP Accountがあります、 このアカウントとはこのPOP3サーバーにアクセスできる権利です。 ですからアカウント名はPOP3サーバーの管理者がくれます、自分でつけるのでしたら自由な名前に、またAlaice名をつけることもマルチプルアカウントも指定できます。
このアカウントはアカウント名、パスワード、そしてこのPOP3のアドレスの三つで構成されています。
SMTPにはSMTPサーバーのアドレスしかありません。 アカウントはありません。 一般的な名前はmailで始まるmail.domaninname.comとかになるでしょうか。
さてつぎは基本的なメイルの文字コードとコード化について解説します。InternetはもともとはUNIXシステムの上で始まりました。
このUNIXシステムは米国の文字コードとして7bit ASCIIでプログラムを組んでいました、ですから8bit目をtokenとして使ったりしていました。
このためInternetでは7bitで文字列を扱うのが最初標準になりました。 ですからSMTPでもESMTPとして文字は一オクタット(1
Byteですが ISOではオクタットと呼ぶ)または以上としてFranceから提案されています。 多分に日本語などのアジア諸語を意識したものと思われます。
現在のUNIXシステムはもちろんほとんどのInternet上のものは8bitに対応しています。日本語に関してはISO-2022-jisとしてRFCがでています、
なぜか7bitとして提案されています。 韓国では1980年代韓国語の取り扱いで標準化し右から読んでも左から読んでもハングルであることを認識できるコード体系を政府主導で決定しました。
日本はもちろん非常に民主主義的な国ですのでコード体系は実際はいくつあるのか不明です。 この辺はホストやオフコンからデータをPCに取り込んだ経験のある方は御分かりだと思います。ちなみに韓国語はISO-2022-kr、どちらかの中国語はISO-2022-chnです。
ということで日本語はRFCには二つあることになります、 一つはISO-2022-JIS 7bitとMIME(後で解説します)で規定するX-オプションタグによる表記です。
Micro Softの商品では x-shift-jisとし 8bitと定義しているものがあります。 これは二つの関係するagent間ではかまわないprivateの拡張である、しかしこの値を標準化はできない。
と規定しています。 ですから何もMicro Softの定義は間違えていません。 ただ他が理解するかです。 この辺になるとこのMultipurpose
Internet Mail Extensions (MIME)で色々と拡張が図られていますが、現実的にはこのInternetの世界の規格のかなりの部分はdefact標準が多すぎます。
8bitが通るのならなぜ無駄なコード化するのかの疑問が残ります。 どちらにしてもUNICODEになろうと、たとえ文字を表示できるようになったとして、知らない言語をどのように読み使うのか不明です。
一般的には日本語文字コードはこのISO-2022で使われていますが、一部のmailerなどではshift-jisが使われています。 それ以外に特殊なUNIXのEUCなどもあるそうです。 mailerどうしでのやり取りで文字化けしたりすることがありますがこの辺の問題とMIMEタイプを間違えて表記しておくりだすmailerがあるようです。ARAGOでは日本語はshift-jisからISO-2022-jisに変換します。 8bit文字はQuoted Printableとしてコード化されて送られます。ただし日本語のshift-jisをこれに書けると文字化けします。 コントロールコードをshift-jisが2バイト目に含んでいるからです。
そんな7bitの遺物のおかげで添付ファイルにバイナリーファイルなどを送るときは一般的にコード化されます。 コード化の種類はUNIX系のUUENCODE、MAC系のBinHex、そして一般的で一番問題が生じにくいのがBASE64です。
ARAGOではBASE64のみを添付ファイルに使用できます。
少し混乱されたかと思います。 メイルのHeader typeを解説しますので少し御分かりになるかと思います。
ここでメイルのサンプルで解説します。
Message-ID: <3521FFA6.DE1B05C7@whofoo.com>
----それぞれのメッセージ毎につけられるIDです。sendmail()がつけます。
Date: Wed, 01 Apr 1998 17:49:42 +0900
---- 差出人の時間です
From: sombody <somefoo@soupacific.com>
----somebodyさんでメイルアドレスは<>のなかです。 このsombodyの部分がshift-jisだとISO-2022に変換しB encoding(BASE64)でコード化します、 8bit文字ではQ encoding(Quoted Printable)
Subject、To:も同じ扱いをします。
X-Mailer: Mozilla 4.04 [ja] (WinNT; I)
----差出人のmailerはNetscapeです。
MIME-Version: 1.0
MIMEのバージョン番号です。
To: HaapyGuy<sunshine@heaven.com>,"
-----宛先、これは受信しているので、自分の名前
Subject: Re: (=?iso-2022-jp?B?GyRCTDVCahsoQg==?=)
shift-jisをISO-2022-jisにしてBase64でエンコードしてある。
Reply To:があると返信はFROMよりこれが優先されます。
Content-Type: multipart/mixed; boundary="------------B3EE3F41A7F9B1B96696AF41"
----添付ファイルがあるときです。""で括られているのがそれぞれの部分を区別する識別記号です。
This is a multi-part message in MIME format.
--------------B3EE3F41A7F9B1B96696AF41
-----最初の部分、本文です、 文字はiso-2022-jisです。
Content-Type: text/plain; charset=iso-2022-jp
Content-Transfer-Encoding: 7bit
>
> 内容省略 $B$+$($^$7$?!# (B
$B$$!# (B
>
--------------B3EE3F41A7F9B1B96696AF41
Content-Type: image/jpeg; name="sakura.JPG"
---添付ファイルの名前
Content-Transfer-Encoding: base64
-----encodingの方法
Content-Disposition: inline; filename="sakura.JPG"
----セーブされる名前
/9j/4AAQSkZJRgABAgEASABIAAD/7QE0UGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAA
AAEAAgBIAAAAAQACOEJJTQPzAAAAAAAIAAAAAAAAAAA4QklNJxAAAAAAAAoAAQAAAAAAAAAC
途中省略
3x6m+f0Wz/gFh/4x/tP7Kb9vj1t49OIjdJ3+nH8hLowTsy10Z4GH0nP6W3rORW59gLqvRa53
pVPEMa9v0bLrNNz/AHJLR6T6f7Fvn0vsv2euJ5na3+b2f4X1f53ckkyevx4X/9k=
--------------B3EE3F41A7F9B1B96696AF41--
-----次が来るかここで終わり。
少々説明が簡単すぎます、mailをSMTPサーバーのアカウントを持つものどうしでメイルをやり取りするときは@の左だけ書けば送れるとか色々あります。
この辺は下の参考書をどうぞ。
近いうちにARAGOでのmailの送受信をとおしてSMTPとPOP3の動作を解説します。
参考書 Senmaill Theory and Practice by Federick M. Avolio, Paul A. Vixie Digital Press ISBN 1-55558-127-7
Internet Mail Consortium http://www.imc.org/