
CGIからメールを送れない場合はどうしたら良いでしょうか。
実はNetscape NavigatorにフォームからCGIを通さず、メールサーバーに直接送る機能があります。これを使えばCGIは必要ないのですが、残念ながらNetscape Navigatorユーザー以外からはデータを受け取れません。
しかも、受け取れてもURLエンコードされた状態なので、デコードする必要があり、少々面倒です。
しかし、やり方自体は大変簡単です。
Mailtoを使う
<FORM Action="mailto:xx@xx.xxx.xx.xx" METHOD=POST>
と指定するだけです。CGIを使う時は、Action="./xxxxx.cgi"と指定しますが、ここを、CGIに送らず、mailto:xxx@xxx.xxx.or.jp のように、mailto:を利用してSMTPサーバー(メール送信サーバー)に直接送ってしまいます。
この場合、今言ったように、URL形式というエンコード(符号化)された状態で送られますので、これをデコードする必要があります。name=%24%2B%43%5A・・・といった感じです。デコードツールはNet上に出ていますので、それを使って復元します。
尚、僕の作成したCGI処理用のフォームのデータを利用する場合は、
<META HTTP-EQUIV="Content-type" CONTENT="text/html;charset=x-euc-jp">
の部分を、
<META HTTP-EQUIV="Content-type" CONTENT="text/html;charset=iso-2022-jp">
に変更して、JISコードで保存してください。
★URL形式のメールをデコードするツールは以下に有るようです。
multipart/form-dataを利用する
ところで、以下のようにENCTYPE="multipart/form-data"を付けると、デコードする必要もなくなります。
<FORM ENCTYPE="multipart/form-data" Action="mailto:xx@xx" METHOD=POST>
ただしこの場合は、幾つかの手順が必要です。
まず、フォームのHTMLドキュメントをJISコードに変換してください。そしてJISコードのまま、サーバーに送ります。
さらに以下の<META>タグを追加します。
<META HTTP-EQUIV="content-type" CONTENT="text/html;charset=iso-2022-jp">
(僕の作成したCGI処理用のフォームのHTMLドキュメントを利用する場合は、<META>タグのcharset=x-euc-jp の部分をcharset=iso-2022-jp に書き換えてください。
★ただしどちらの場合もInternetExplorerでは予想通りに動作しない事を念頭においておいてください。