メールリーダの作り方

POPを用いたインターネットメールのリーダを作る方法を解説する。例によって(?)完全なものではないし、面倒くさい部分は端折っているのだが、メールチェックソフトを作るのに必要な要素くらいは入っている。

随分前に欠いたままのものなので、HTML文法が間違っていたり、リンクが切れていたりするかもしれない。ご勘弁ください。

メール転送の概要
POP受信
ヘッダ情報
MIME
JIS文字変換
ヘッダのデコード
BASE64デコード
テキストエンリッチド
セキュリティ関連(補足)



メールの仕組み
メール自体は、SMTP(Sinple Mail Transfer Protocol)を用いて転送され、ユーザ登録されている(メールボックスがある)宛先のマシンに到着した時点でテキスト文書として保存される。ユーザがPCなどからメールを見る場合は、このマシンに対して、POP(Post Office Protocol)を用いてアクセスすることになる。メールソフトとして、送信と受信の双方を実装するためには、SMTPとPOPの双方をサポートする必要があるが、本稿で考えている「メールリーダ」の機能としては、POP受信さえ可能であれば充分である。
この場合注意しなければならないこととしては、クライアント側から定期的にチェックするようにしなければ、メールの到着がわからないという点である。サーバ側から信号を送る方法も存在するが、一般的ではなく、クライアント側の待受け処理が必要なため、良い方法とは言い難い。

POP機能
クライアントマシンから見た場合は、サーバマシンに対しての接続を行い、必要なコマンドを送ることにより、メール本文を取り寄せたり、削除することができる。この処理については、一連の流れとして考えれば良い。接続→ユーザ認識→到着メール確認→メール本文の取得→取得済メールの削除→切断、である。それぞれのステップにおいては、クライアントからの要求送信と、サーバからの結果送信が行われる。

ヘッダのチェックとデコード
ヘッダについては、メールに関する様々な情報が盛り込まれているので、これを確認しつつ、適切な処理を行う。添付書類がある場合や、本文の文字種変換が行われてる場合は、ヘッダで確認することになる。ヘッダを無視してメールリーダを作成することは事実上不可能である。
ヘッダに日本語文字を用いたメール。表題や送信者名が日本語(漢字)になっているものがある。これの復元機能を有さないメールソフトも存在するほどであり、もともと推奨されていない。それでもきちんとした表示を行いたい場合は、ヘッダをデコードすることが必要となる。ヘッダのデコードは、本文のデコードと同様、いくつかのステップを踏むことになる。

添付書類対応
メールにファイルが添付されている場合は、注意すべきことが多くなる。第1に、メール自体の規模(容量)が大きくなるため、正しく受信できるような設定が必要である。第2に、添付ファイル自体はMIME(Multipurpose Internet Mail Extentions)という方式を取ってメール本文中にコード化された文字列として記載されるので、これを切り分けつつ、正しい復元が必要になる。

本文の文字種変換
本文は大抵、ASCIIかJISで書かれる。ASCIIはそのままで何も問題は無いが、JISの場合は、使っているマシンがS-JISであれば変換が必要となる。どういうコードで書かれているかはヘッダで確認ができるので、適宜変換を加える。

本文テキストの変換
最近のメールソフトでは、文字に修飾をつけることが可能である。これらは、RichTextあるいはTextEnrichedと呼ばれる方式で、WWW用のHTMLと似た方法で付けられる。無視してしまっても読めないものではないが、PlainTextへの変換か、HTML(Hyper Text Marl-up Language)への変換を行うと良い。

その他
実際には、Windows上で、メールを読み取り、WEB(HTML)形式に変換するプログラムを作成した経験があるため、この際に得たノウハウを紹介する。プログラミングに際しては、VB(Visual Basic)で、Winsockコントロールを使用している。なお、UNIX上であればPerlなどで比較的簡単に同じ機能を持つことができる(筈)。


なお、各ページには、下記のように関連するRFC(Request for comments)を掲載している。このRFCにあたることにより、正しい情報が得られるので、参照頂きたい、というわけである。なお、RFCを見るためには、各種の検索エンジンを使用すると良いだろう。(ここで載せているRFCは、この文書と同じく「古い」ものである可能性があるので、注意していただきたい)

ProtocolNameRFC
----Internet Official Protocol Standards2200