mailto: によるメール送信フォームは、HTML さえ書ければ誰でも簡単に設置することができます。
しかし、送られてくるメールは %82%A0 のように符号化(エンコード)されていますので、これを適切に解読(デコード)してやる必要があります。
また、送信時の動作はブラウザの種類やバージョン、設定状況によって異なったり、メール送信ソフトがインストールされていない場合は、せっかく入力項目に一生懸命入力したのに、送信ボタンを押したら送信失敗、入力した内容が水の泡・・・となるケースも多いようです。
可能であれば、次章のCGIを用いた方法にするか、それが無理なら、「この送信フォームは mailto: を用いています。mailto: による送信が不可能な場合は直接○○にメールを・・・」などのように、注意書きをしておくことをオススメします。
HTML文書中に次のような記述をしてください。method="POST" を忘れないで指定してください。mailto: の後ろのメールアドレスは自分のメールアドレスに書き換えてください。
<form method="POST" action="mailto:foo@xxx.yyy.zzz"> <div>名前: <input type=text name="NAME" size=20></div> <div>感想: <input type="text" name="MSG" size=20></div> <input type="submit" value=" 送信 "> <input type="reset" value=" 取消 "> </form>
(↑)これを表示するとこう(↓)なります。
<form>~</form> がひとつのフォームとなります。フォームについての詳細は「HTMLリファレンス」を参照してください。type="reset" のボタンを押すと、入力したデータがクリアされます。type="submit" のボタンを押すと、<input ...>で入力したデータが mailto:~ のメールアドレスに送信されます。
mailto:で送信されたメッセージは、通常、次のようにエンコードされた状態で送信されます。
TESTMSG=%82%A0%82%A2%82%A4
<form enctype="text/plain" ....> のように enctype 属性をつけておくとエンコードされないテキストのまま送信することができますが、メールの経路によっては文字化けしたり、別の形式にエンコードされてしまったりすることがあります。(この方法は「シフトJIS送信」という掟破りの方法になりますので、あまりお勧めできません。)
エンコードされた文字列をデコード(読めるように)するには、次のようなツールを用います。
あまり便利ではありませんが、次のような JavaScript を記述した簡単な自作Webページでデコードすることもできます。(ただし、最近のInternet Explorerでは、漢字コードにUnicodeを使用しているため、うまく動作しないようです。)
<form> <input type="text" name="t1"> <input type="button" value="変換→" onclick="this.form.t2.value=unescape(this.form.t1.value)"> <input type="text" name="t2"> </form>
メールのあて先を複数指定するには、メールアドレスをスペースで区切って複数記述します。
<form method="POST" action="mailto:foo1@xxx.yyy.zzz foo2@xxx.yyy.zzz"> : </form>
次のように指定する方法もあります。
<form method="POST" action="mailto:foo1@xxx.yyy.zzz?To=foo2@xxx.yyy.zzz"> : </form>
ただし、これらの記述は、そのページからメールを送信する人の環境に依存しますので、自分の環境でうまくいったとしても、送信者の環境ではうまくいかないケースがありますので、注意してください。
以下のようにすることで、メールのサブジェクトを指定することもできます。(対応していないブラウザもありあす。)
<form method="POST" action="mailto:foo@xxx.yyy.zzz?subject=TEST_MAIL"> : </form>
「TEST_MAIL」の部分には好きなサブジェクトを指定することができます。スペースを用いる場合はエンコードされた %20 を用いて「TEST%20MAIL」のように記述してください。英文を用いるのが無難ですが、直接日本語を用いてもうまくいくケースもあるようです。