想像がつくかとは思いますが、mailto: スキームはメイラーに対して指示を出すものです。ですから、あなたがWebブラウザを使っていたとして、mailto:を引っかけたなら、Webブラウザに内蔵されたメイラーが動きます。
逆に言うと、メイラーを内蔵していないWebブラウザは、これに対応できません。せいぜい、別のメイラーを起動するだけです。
かつてのMicrosoft Internet Explorerはメイラーを内蔵しておらず、mailto:に出くわしたときにはMicrosoft Exchangeを起動するだけでした。IE4以降はようやく対応するようになったようですね。Windowsなんて職場でしか使わないので、詳しくは知りませんが。
そういうわけで、どの環境の人からもFORM入力の結果を受け取りたければ、面倒でもCGIで受ける必要があります。mailto: スキームが使えるのは、利用者側の装置がメイラーを装備している場合だけです。このことは承知しておいてください。
mailto: スキームはEメールを受け取るためのものですから、メールアドレスと共に使います。基本的な書き方は、mailto:にメールアドレスを繋げます。例えば
mailto:poetlabo@cap.bekkoame.ne.jp
後は、これを必要な部分に入れてやるだけです。
mailto: の最も簡単な使い方は、A要素のHREF属性値に入れることです。例えば、このページの下端にある奥付では、次のようにマークアップしてあります。
<A HREF="mailto:poetlabo@cap.bekkoame.ne.jp">poetlabo@cap.bekkoame.ne.jp</A>
こうしておけば、錨になっている部分をポチるだけでメイラーが起動し、poetlabo@cap.bekkoame.ne.jp宛のEメールを出す用意が整います。
また、?subject= を付け加えておけば、Eメールのsubjectまで用意してやることができます。
<A HREF="mailto:poetlabo@cap.bekkoame.ne.jp?subject=mailto:の使い方">poetlabo@cap.bekkoame.ne.jp</A>
特定のsubjectが必要な場合には、これはなかなか便利です。
FORMのACTION属性にmailto: を使えば、CGIなしにEメールでFORMの入力結果を受け取ることができます。
この場合、METHOD=GETでも受け取れないことはないでしょうが、GETは一行文を受け取るための仕組なので、長い文章は途中で切れることもあります。METHOD=POSTの使用が薦められます。
<FORM METHOD="POST"
ACTION="mailto:poetlabo@cap.bekkoame.ne.jp"
ENCTYPE="multipart/form-data">
<DIV>
<TEXTAREA NAME="report" ROWS="10" COLS="40"></TEXTAREA>
</DIV>
</FORM>
上の例では、ENCTYPEという見慣れないものが出て来ました。この属性については、多くの参考書が説明をはしょっています(単に著者が知らないだけでしょう)。実は、FORMから送られるのは単なる文字列ではなく、何らかの形式で符号化されたものです。ENCTYPEは、その符号化形式を指定する属性です。
ENCTYPEの指定がない限り、送信内容はapplication/x-www-form-urlencoded
形式で送られることになっています。これだと全てURL符号化して送られるわけですが、URL符号はUS-ASCII文字セットで書かなくてはならないので、US-ASCII以外の文字セットは全て文字コードに変換されて送られます。
ですから、ENCTYPEの指定がないときは、日本語で書かれた内容をそのまま受け取って読むことはできず、URL符号から再変換しなければなりません。そのためのデコーダもVectorを始めとするWeb上で拾うことはできるものの、各種デコーダが完全に復号できるとは限りません。
日本語文字セットのままで送信内容を受け取ることができる形式の一つは、text/plainです。ENCTYPE="text/plain"
としておけば、これを理解するWebブラウザは日本語のままFORM内容を送信してくれるでしょう。また、charsetパラメタを追加して、ENCTYPE="text/plain;charset='ISO-2022-JP'"
などと受け入れる文字セットまで指定することもできます。複数の文字セットを指定するにはコンマで区切ってENCTYPE="text/plain;charset='ISO-2022-JP',text/plain;charset='Shift_JIS',text/plain;charset='EUC-JP'"
などとします。
ここで使っているmultipart/form-data
形式は、RFC1867で提案され、RFC2388で更新されたものです。そして、HTMLの国際化を規定したRFC2070では、このmultipart/form-data
形式の使用を薦めています。
この形式の特徴は、すべての項目についてContent-Type
ヘッダがついてくることで、これだと文書文字セットのparameterまで含めることができるのです。つまり、どんな文字セットを使って書いたかまで伝わります。文字化けを防ぐ方法としても有用であると言えます。
というわけで、ENCTYPE="multipart/form-data"
の使用をお薦めいたします。
なお、HTML 4.0 仕様書には、ENCTYPEが使えるのはMETHOD=POSTのときとされているのですが、DTD にはそんなこと書いてないですね。まあ、METHOD=POSTの方が無難ではあります。