使用方法詳解



基本的な使い方

最も基本的な使い方は、FORMタグを次のように記述します。

<FORM METHOD=POST ACTION="/formdecode/formdecode.cgi">
<INPUT TYPE="hidden" NAME="_to" VALUE="送信先メールアドレス">
お名前: <INPUT TYPE="text" NAME="name"><BR>
コメント: <INPUT TYPE="text" NAME="comment"><BR>
<INPUT TYPE="submit" VALUE=" 送信 ">
</FORM>

実際には、送信先メールアドレス(_to)にフォームに入力した内容を送信したいE-mailアドレスを入力します。ここは必ず指定する必要があります。


上記のFORMタグは、次のように表示されるので、

お名前:
コメント:

と入力して[送信ボタン]を押すと、

name = 切符太郎
comment = はじめまして

といったメールが送信先メールアドレス(_to)へ送られます。


なお、メールの題名(Subject:)は指定されていませんので、省略値「output from formdecode cgi」となります。



送信者、送信先、題名を指定する

送信者や送信先、題名を任意に指定することができます。
これらの指定には、決まったNAME属性名を付ける必要があります。


以下に送信者、送信先、題名に関する予約されたNAME属性名を示します。
(予約された名前は、全て先頭に"_"が付いています。)

送信者: _from
送信先: _to , _cc , _bcc
題 名: _subject
返信先: _reply


これらは、一般のメールソフトで使う場合と同じ名前ですが、先頭に"_"が付いています。
メールアドレスには、次のようなパターンを使うことができます。

kiptaro@kuwana.ne.jp
KIP Taro <kiptaro@kuwana.ne.jp>
"KIP Taro" <kiptaro@kuwana.ne.jp>
kiptaro@kuwana.ne.jp (KIP Taro)


HTMLにこれらのアドレスを埋め込む場合、<や>は記号のまま記述すると、HTMLタグとして誤認識されてしまいますので、実際には&lt;や&gt;で記述します。


また、_ccなどを複数指定する場合は、次のどちらかの方法を使います。

  1. 1. カンマで区切って複数指定
    • <INPUT TYPE="hidden" NAME="_cc" VALUE="sazae@kuwana.ne.jp,masuo@kuwana.ne.jp">
  2. 2. 同じNAME属性名で複数行を指定
    • <INPUT TYPE="hidden" NAME="_cc" VALUE="sazae@kuwana.ne.jp">
    • <INPUT TYPE="hidden" NAME="_cc" VALUE="masuo@kuwana.ne.jp">


また、これらメール送信に関わるアドレスについては、アドレス形式のチェックが行われます。



送信確認画面を指定する

フォームに入力されたデータをすぐに送信せずに、確認画面を表示してから送信することができます。
この確認画面は、別途HTMLで作成する必要があります。


具体的な例としては、動作サンプルのHTMLソースを見ていただくのが分かりやすいのですが、 ここでは、確認画面を作る上での必要最低限の決まりを示します。

送信確認を指定する
次のように、予約されたNAME属性名をHTMLに埋め込むことで、送信確認HTMLを表示してから送信することができます。
<INPUT TYPE="hidden" NAME="_confirm_html" VALUE="送信確認HTMLのファイル名">
ここで、送信確認HTMLファイルは、フォームと同じディレクトリに置いておく必要があります。
フォーム入力データを表示させる方法
次のような特殊変数をHTMLに埋め込むことで、対応するフォーム入力値を展開します。名前は、大文字・小文字を区別しますので、フォームで定義したままの名前を使ってください。
$FORM{NAME属性名}
全入力データを展開する特殊変数を必ず指定する
次のような特殊変数を送信確認HTMLの<FORM>タグの直後などに挿入してください。この変数が見つかると、フォームに入力されたデータ全てをhidden属性で確認画面に展開します。この行を忘れると、何も送信されなくなってしまいます(空データ送信チェックが有効ならエラーとなります)ので、必ず指定してください。
$FORM{_alldump}
なお、この特殊変数は、必ず一行にこれのみ記述してください。他に何かを記述しても、確認画面出力時には消滅します。

※送信確認HTMLには、この他にも後述する$ENV変数や$SYS変数及び$SELECT、$IF文を埋め込むことができます。
※送信確認用HTMLに何らかのリンクや画像を記述する場合は、リンクを完全なURL(http://ではじまるURL)で記述してください。
※送信確認画面は、文字コード「x-euc-jp」に変換されて出力されます。



送信完了画面を指定する

標準でも簡単な送信完了画面(送信完了後に表示される画面)が出力されますが、指定したページを表示させることもできます。送信完了画面は、HTMLで作成します。何ら変数展開されませんので、ご自由に記述してください。送信完了画面を出力するには、次の2通りの方法があります。

CGIから出力させる方法
<INPUT TYPE="hidden" NAME="_accept_html" VALUE="送信完了HTMLのファイル名">
ここで、送信完了HTMLファイルは、フォームと同じディレクトリに置いておく必要があります。
  • この場合、HTMLに記述されるリンクは、完全なURLで記述してください。
  • 送信確認画面は、文字コード「x-euc-jp」に変換されて出力されます。
Locationヘッダを使う方法
<INPUT TYPE="hidden" NAME="_accept_url" VALUE="送信完了HTMLの完全なURL">
  • 送信完了HTMLのURLは、完全なURL(http://ではじまるURL)で記述してください。
  • こちらの方法の場合、Locationヘッダに対応していない古いブラウザでは、表示できない場合があります。


メール用テンプレートを指定する

テンプレートを使用して、整形されたメールを送ることができます。
テンプレートには、Plain Text 形式(通常のテキストメール)とHTML形式を用いることができます。


HTML のテンプレートでは、メール自体はマルチパートになっていません。よって、Content-Type にtext/html と指定しただけで表示できるメールソフトでしかHTML形式で表示できません。特別な理由がない限り、Plain Text形式を使用した方が無難でしょう。


1. テンプレートを指定するには

次のような予約されたNAME属性名をHTMLに埋め込むことで、テンプレートが使用できます。

Plain Text形式の場合
<INPUT TYPE="hidden" NAME="_template" VALUE="テンプレートのファイル名">
HTMLの場合
<INPUT TYPE="hidden" NAME="_template_html" VALUE="テンプレートのファイル名">

ここで、テンプレートのファイルは、フォームと同じディレクトリに置いておく必要があります。


2. フォーム入力データを表示させる方法

次のような特殊変数をHTMLに埋め込むことで、対応するフォーム入力値を展開します。
名前は、大文字、小文字を区別しますので、フォームで定義したままの名前を使ってください。


$FORM{NAME属性名}


※テンプレートには、この他にも後述する$ENV変数や$SYS変数及び$SELECT、$IF文を埋め込むことができます。
※HTMLテンプレートで何らかのリンクや画像を記述する場合は、リンクを完全なURL(http://ではじまるURL)で記述してください。



送信確認画面で指定できる変数と式

テンプレート及び送信確認画面で使用できる特殊変数や式について説明します。
特殊変数は、一行に複数の異なるものを指定することができます。


$FORM変数

$FORM{NAME属性名}


フォームで定義したINPUTフィールドに1対1で対応する変数です。
定義されていない名前を指定すると、NULL文字(空文字)に置き換えられます。


$ENV変数

$ENV{環境変数名}


http環境変数として利用可能な全てのものを指定することができます。
CGIがこれを実際の値に置き換えます。環境変数としては、次のようなものが指定できます。

  • GATEWAY_INTERFACE
  • DOCUMENT_ROOT
  • REMOTE_ADDR
  • SERVER_PROTOCOL
  • REQUEST_METHOD
  • REMOTE_HOST
  • QUERY_STRING
  • HTTP_USER_AGENT
  • HTTP_REFERER
  • PATH
  • TZ
  • HTTP_ACCEPT
  • HTTP_CONNECTION
  • REMOTE_PORT
  • HTTP_ACCEPT_LANGUAGE
  • SCRIPT_NAME
  • HTTP_ACCEPT_ENCODING
  • SCRIPT_FILENAME
  • SERVER_NAME
  • REQUEST_URI
  • SERVER_PORT
  • HTTP_HOST
  • SERVER_ADMIN

$SYS変数

$SYS{定義名}


日付と時刻に関する以下のような定義名を指定できます。以下は置換例です。

定義名 置換例
DATE 1998/07/30
TIME 10:25:40
YEAR 1998
MONTH 07
DAY 30
HOUR 10
MIN 25
SEC 40
GMTIME Thu, 30 Jul 1998 10:25:40 +0900

$SELECT文

$SELECT{NAME,評価値(1)=置換値(1), 評価値(2)=置換値(2),..,評価値(n)=置換値(n)}


1対1の選択置換です。NAMEはフォームで定義したNAME属性名です。
フォーム入力値のみに対応する規則なので、$ENVや$SYSの特殊変数は使えません。


以下に例を挙げます。


性別:<INPUT TYPE="radio" NAME="sex" VALUE="1">男 <INPUT TYPE="radio" NAME="sex" VALUE="2">女


というフォームで


性別:


と入力された場合に、


$SELECT{sex, 1=男, 2=女}


と指定すると、この$SELECT文全体が「女」に置換されます。


$IF文

$IF{NAME > 評価値, 値(真), 値(偽)}


書式中の">"は一例です。評価式に使える記号などは、以下のとおりです。NAMEは、フォームで定義したNAME属性名です。この$IF文も暗黙でフォーム入力値のみに対応しますので、$ENVや$SYSの特殊変数は使えません。評価式は空白で区切り、値はカンマで区切ります。

数値比較 文字比較 意味
== eq 等しい
!= ne 等しくない
< lt 小さい
<= le 以下
> gt 大きい
>= ge 以上

以下に例を挙げます。


年齢:<INPUT TYPE="text" NAME="age">


というフォームで、


年齢:


と入力された場合に、


$IF{age < 18, まだ未成年ですね , もう立派な大人ですね }


と指定すると、この$IF文全体が「まだ未成年ですね」に置換されます。


$IF文を記述する場合には、HTMLの中であっても"<"や">"などの記号をそのまま記述できます。
表示する前に、CGIが変数展開しますので、HTML構文的にエラーではなくなるからです。


ちなみに、置換値(結果です)が文字列のとき、途中に空白を含んでも構いません。"や"で囲んでも構いません(内部処理的には危険なので一旦削除しますが)。


また、評価値に数字以外が含まれる場合に、数値比較用の"="や">"が指定されていれば、文字列比較用のeqやgtに自動補正します。


※全ての変数や式は、行をまたがって定義できません。しかし、一行の中ならいくつでも種類に関わらず指定できます。
※全ての変数や式に無効な定義(NAME定義がなかったり、書式が間違っていたりした場合)は、NULL文字(何もない)に置換されます。



完成したフォームをテストする

作成した送信確認画面やメール送信用のテンプレートなどをブラウザからテストできます。
このテストで、事前に変数展開がうまくいくことを確認してから実際に使うようにしましょう。


フォームのテストを行うためには、フォームHTMLに次の予約されたNAME属性名を指定します。

<INPUT TYPE="hidden" NAME="_testmode" VALUE="1">


この定義が入っていると、SMTPへの送信処理を行わずに、生成されたメールデータをブラウザに表示します。この結果を確認して、変数定義の誤りなどを事前に修正することが可能です。PLAIN TEXTでテストすれば、送信先や送信元の確認もできます。



予約されているNAME属性(変数)名一覧

名前の先頭が"_"ではじまるNAME属性名は使えません。
また、以下のNAME属性名は予約されている特別なものですので、他の用途には使用できません。

  • _testmode
  • _check_empty
  • _confirm_html
  • _template
  • _template_html
  • _accept_html
  • _accept_url
  • _referer_url
  • _from
  • _to
  • _cc
  • _bcc
  • _subject
  • _reply
  • _image_url
  • _attach_file
  • _attach_name
  • _attach_size
  • _require_item

以下は特殊変数です。書式は、上述の説明を参照してください。

  • $FORM{...}
  • $FORM{_alldump}
  • $ENV{...}
  • $SYS{...}
  • $SELECT{...}
  • $IF{...}
  • ${ImageURL}