■フォームメール(FormMail) 取り扱い説明書 v1.7

●動作環境と仕様

・PERLのバージョンは次のものに限ります。

    perl v5  ※ jperlは使えません. perlの日本語パッチなら大丈夫でしょう.

・次の外部ソフトが必要です。サーバにインストールされていることが必須です。
 いずれもパスがわからない場合は、サーバ管理者(プロバイダのサポートなど)に聞いてください。

    sendmail

    ※ jcode.pl cgi-lib217.pl はセットに含まれています.
  ※ sendmailのバージョンにより、このままでは正常に動作できない場合があります.
  ※ sendmailはmailやrmailで代用できる場合がありますが、コマンドラインの検討が必要です.
  ※ uuencode と nkf は v1.20より使わない仕様となりました.

・初期設定することにより、SJIS EUC のいずれの日本語コードでの設置にも対応します.

・送信者のリモートホスト名や記入した送信ページのURLやブラウザ名は、受信したメールの
 ヘッダ部分に記録されます。


●設置構成

 次のプログラムは、CGIが実行できる同じ場所に設置してください。

    form2mail.cgi <755>
    jcode.pl <644>
    cgi-lib217.pl <644>
    base64.pl <644>


●初期設定

 説明に従って設定してください。

 ※ 参照チェックとは、あなたが設置したform2mail.cgiを知らない場所から利用されて、
   不用意にあなた宛てにメールが来ないように、送信フォームを限定することができる機能です。

 ※ form2mailは汎用のプログラムです。一つ設置しておけば、複数の送信フォームで使えます。
   各送信フォーム用の命令文(コマンド設定)は、送信フォームの方に設定します。


●使い方(送信フォームの書き方)

 送信フォームは正しいHTML文法で記述してください。

 ◎設置したform2mail.cgiを呼び出します。通常は※1か※2に設定してください。

 ※1 ファイルアップロード可能 字数制限なし(実際は2^17=131072bytes以内)
 <form action="form2mail.cgi" method="POST" ENCTYPE="multipart/form-data">

 ※2 字数制限なし(実際は2^17=131072bytes以内) 内容確認機能が使える
 <form action="form2mail.cgi" method="POST">

 ※3 字数制限あり 内容確認機能が使える
 <form action="form2mail.cgi">

 マルチパート処理(※1)はブラウザに依存しますが、使えないブラウザでは※2と
 同等の処理になりますので、単にファイルアップロードが使えないだけとなります。

 ◎送信フォーム設定

 次の事項を設定することができます。

 基本形式 <INPUT TYPE="タイプ" NAME="コマンド名" VALUE="設定内容">

 ※ NAME=""に書く名称の頭文字がアンダースコア(_)の場合は、コマンド名として判断されて
   しまい、内容文として無視されたり、日本語が混じっているとエラーになる可能性があり
   ますので注意してください。

 ※ タイプには、hidden text checkbox radio password があります。checkboxとradioは、
   記述しても内容が空の場合は、その項目自体送信されませんのでご注意ください。例えば、
   TYPE=TEXTにしたフォームが空であっても、NAME="名前"で設定した名前は送信されて、
   その欄が空欄であることが分かりますが、TYPE=CHECKBOXでチェックされていない場合は、
   その項目自体、送信内容には記録されません。これは<SELECT>も同様です。これらは
   HTMLの知識ですので、各自参考書や文法書などで学習してください。


				コマンド名	設定内容			有効なタイプ
	----------------------------------------------------------------------------------
	メールのタイトル	_subject	メールの題名			hidden text radio(*1) select
	送信後のページ		_location	URL(httpから)		hidden
	送信後にリンク(*2)	_gourl		URL(httpから)		hidden
	送信後にリンク(*2)	_goname		名称				hidden
	Eメール欄設定		_emailset	Eメールとして扱う欄の名称(*3)	hidden
	Eメール再入力確認	_emailset2	Eメールの再度入力確認(*3)	hidden
	表記形式(*4)		_type		1または空欄			hidden
	必須入力設定(複数可)	_indispen	必須入力にする欄名(*5)		hidden
	ボディ設定(*6)		_body		<body>設定に準拠		hidden
	送信前確認表示		_check		1または空欄			hidden checkbox(*7)
	送信内容の写し		_ccopy		1または空欄			hidden checkbox(*8)
	CSV出力			_csv		1				hidden(*9)
	スパム送信防止		_spamkey	空欄				text(*10)


 *1 <input type=radio name="_subject" value="商品の注文" checked>商品の注文
   <input type=radio name="_subject" value="在庫の問い合わせ">在庫の問い合わせ

   たとえばこのようにすれば、メールのタイトルを送信者が選択できます。
   必ずどれかが選択されているように、CHECKED を必ず付けましょう。

 *2 2設定が1組となり、どちらも設定されていないと無視されます。また、_locationが
   設定されている場合も無視されます。

 *3 <input type=hidden name="_emailset" value="Eめーる">
   電子メールをご記入ください <input type=text name="Eめーる" size=30>

   このように、name="Eめーる"で記入される欄を、Eメールとして扱う場合に、その指定を
   行います。指定された欄は、Eメール構文チェックの対象となり、メールの From: 欄に
   対応します。設定なき場合や空欄の場合は、anonymous@on.the.net という匿Eメールで
   あることを意味するアドレスで送られてきます。(返信してはいけません) なお、カンマや
   スペースを含めることは、セキィリティ上できないようにしています。

    <input type=hidden name="_emailset2" value="Eめーる(再度)">
   再度、電子メールをご記入ください <input type=text name="Eめーる(再度)" size=30>

 *4 <input type=hidden name="_type" value="1">にすれば、

   [名前]
   レスキュー

   [Eめーる]
   sample@mail.host

   という形式で送られてきます。設定しない場合は、

   [名前] レスキュー
   [Eめーる] sample@mail.host

   となります。

 *5 <input type=hidden name="_indispen" value="名前">
   <input type=hidden name="_indispen" value="Eめーる">

   必ず入力をさせるために、空入力チェックを行う項目(欄)名を指定できます。
   _emailsetを組み合わせれば、Eメールとして扱う欄も必須入力にできます。
   type=TEXT または <TEXTAREA> で有効です。

 *6 <input type=hidden name="_body" value="bgcolor=#000000 text=black">

   <BODY ***>の***の部分を、"を使わずに設定します。送信フォームの画面と統一性を
   持たせたい場合に設定します。

 *7 <input type=checkbox name="_check" value="1">送信前に内容を確認する

   たとえばこのようにすれば、送信者が選択できます。
   この機能は、ENCTYPE="multipart/form-data" にしない場合に有効です。

 *8 <input type=checkbox name="_ccopy" value="1" checked>送信内容の写しを表示する

   たとえばこのようにすれば、送信者が選択できます。

 *9 <input type=hidden name="_csv" value="1">

   CSV出力を行う場合は、CGI側ではチェックできない次の点に注意してフォームを作成する必要があります。 

            チェックボックスは使ってはいけない. 
            ラジオボタンにはどこかに必ずあらかじめチェックを入れておく必要がある. 
            セレクトフォームにはどこかを必ずあらかじめを選択しておく必要がある. 
            セレクトフォームにはマルチプル(複数選択可能にする機能)は使ってはいけない. 

   なぜかといえば、CSVで扱うデータは同じ列に同じ項目のデータが来なければ意味がありません。
   checkbox等は、選択しないとその項目自体何も送られてきませんし、複数選択するとその分だけ
   項目が増えますので、ずれてしまうからです。

 *10 <input type=text name="_spamkey" value="">

	画面に表示した単語、文章、文字列を入力させたり、それを画像にしたものを入力させる(目の不自由な方には対応できないことに留意)、
	または質問の答えを書かせるなどして、このCGIの送信機能を悪用して自動で送信してくるスパムを、自動(ロボット)では処理できない段取りを
	挿入することにより防止する機能です。 

	入力した内容は、CGI(form2mail.cgi)内に設定したキーワードと「一致」(半角・全角・大文字・小文字などは区別される)しなければ送信しないという機能です。
	これを設定しても、CGI内にキーワードを設定しない場合は設定エラーになります。キーワードを設定しても、フォームに設定しない場合は無視されます。 

	例:スパム防止のため、次の文字を書き写してください。→ 本日は晴天なり
	例:スパム防止のため、次の答えを全角数字で記入してください。→ 2+3=?
	例:スパム防止のため、次の答えを全角ひらがなで記入してください。→ 日本の首都はどこ? 



 ※その他の注意

  複数のファイルアップロードの場合、その項目名は重複してはいけません。また、最大で99までとなります。

  <コラム> なぜメールの控えを自分宛にメール送信するようにする(自動返信)と何故危険なのか?

	Webからのメールはnobody(匿名みたいなもの)で処理されます。ホスト名などの送信者情報はメールに
	記録されますが、不適切な内容のメールを任意の相手に送りたい場合、自分のメールアドレスではなく、
	送付したい人のメールアドレスを記載してしまうと、控えと称して任意の相手に送信できてしまうため、
	敢えてそのような仕組みは用意しないようにしていましたが、自動返信機能のご要望もあり、
	その機能を使うかどうかは設置者の判断にゆだねることとしました。

以上