Form-to-Mail CGI

By Morikawa

ここでは Form-to-Mail CGI の使い方を説明します。

Last modified at: 04/04/98 ; 16:15:20 (JST)

Form-to-Mail とは

Form-to-Mail は WWWページのフォームに入力された情報を電子メールで 受け取るための CGIプログラムです。FORMタグの ACTIONに指定するだけで、 簡単に利用できます。


フォームの作り方

ここではフォームから Form-to-Mail CGI を利用する方法のみを説明し、 フォームの作り方の一般論は省略します。

アンケートなどのフォームを作成したら、FORMタグの METHODオプションに POSTを、ACTIONオプションに/cgi-bin/formmailを、 それぞれ指定します(ただしフォームのあるサーバが http://www.med.teikyo-u.ac.jp である場合)。

<FORM METHOD="POST" ACTION="/cgi-bin/formmail">

またメールの受取人を指定するため、mailto という NAMEを指定した INPUTタグを追加します。この INPUTタグは HIDDENタイプにしておくと良いでしょう。

<INPUT TYPE="hidden" NAME="mailto" VALUE="morikawa@med.teikyo-u.ac.jp">
VALUEオプションの値には自分のメールアドレスを指定します。 メールが外部に流出することを避けるため、メールアドレスは med.teikyo-u.ac.jpドメインでなければなりません。 あるいはドメイン名を省略する(上の例なら morikawaのみにする)ことも可能です。

基本的にはこれで準備は完了です。フォームを submitして メールが届くか確認してみて下さい。

Form-to-Mail を使ったサンプル


うまくいかないときは

送信しようとすると、 'referer URL (...) is not authorized' と表示され、うまくいかない
fomrmail を呼び出しているページ(フォームのあるページ)が 不正です。
呼び出すページは http://www.med.teikyo-u.ac.jp というサーバ上になければなりません。 これは外部からの濫用を避けるための処置です。
また、サーバ名を省略して www だけにしたり、 ローカルのファイルを file://...などとして指定することも できません。きちんとサーバにアップロードして、 http://www.med.teikyo-u.ac.jp/....と指定して下さい。

送信しようとすると、 'mailto entry (...) is not valid' と表示され、うまくいかない
前にも書いたとおり、受取人(mailto)は med.teikyo-u.ac.jp ドメインしか許可されていません。外部のアドレスを指定したり、 アドレス表記が間違っていないか確認して下さい。
また(当然ですが)mailtoというフォームデータが存在しないと 送り先がわからないのでエラーを出します。 mailto を追加しわすれていないか確認して下さい。

なぜかうまくいかないが、何が悪いのかわからない
一般論としては、後述のデバッグ機能を使うと、 なにか解決の糸口がつかめるかもしれません。
日本語コードの不具合は、 フォーム送信側のブラウザの問題が原因であることが多いです。 たとえば Microsoft Internet Explorer (3.0x)を使っている場合、 SELECTタグなどで返されるフォームデータの値が日本語を含むと おかしな漢字コードで送り返してくることがあります。 日本語の使用を避ける(とくに NAMEの方)のが得策です。

追加機能

値を隠す

メールの宛先 (mailto) や後述するデバッグオプション (debug)などのフォームデータは、 送信後の画面やメールで表示される必要のないものです。 このようなフォームデータは名前の前にignore:をつけることで 隠すことができます。

例:
<INPUT TYPE="hidden" NAME="ignore:mailto" VALUE=".....">

余計なスペースなどが入るとうまくいきませんので、気を付けて下さい。

デバッグ

NAME="debug" というフォームデータに適当な値が含まれていると、 デバッグ用のいくつかの機能が働きます。

フォームデータの表示順

メールで戻ってくるフォームデータは名前の ASCII順に並んでいます。 この順序が気に入らない方もいらっしゃると思いますが、 汎用の CGIなため仕方がありません。

それでも順序よく並べるには、名前の頭に 00, 01, ... などの番号をつけて ASCII順に並ぶのを利用します。たとえば

名: <INPUT NAME="01first-name" ... > 姓: <INPUT NAME="02family-name" ... > 年齢: <INPUT NAME="03age" ... >
などとすれば、この順番でメールにも表示されます。


For UNIX users / 研コン室 / 相談員 森川
< morikawa@med.teikyo-u.ac.jp >