確認+受付番号付きメールゲートウェイCGI+CSV形式保存 - csvmail+no.cgi

★はじめに
★ファイルリスト
★カスタマイズ
★メールの例
★CSVの例
★インストール
★テスト

★はじめに

このスクリプトは、FORMに書いてもらった結果を一度内容をユーザーに開示し、
内容を確認の上、指定されたE-mailアドレスにメールを送るCGIです。
必須項目の指定も可能です。
さらに受付番号を自動採番して表示します。受付番号はメールとファイルにも
出力されます。
さらに指定されたファイルにCSV形式で書き出すものです。
(CSV形式とは、各データがカンマ区切りで構成されるデータ形式のことです。)
これにより、WebのFORMから入力されたデータをExcel等で編集/加工を行うことができます。
アンケートページ、資料請求ページなどへの利用が考えられます。

  1. 資料請求ページにて、FORMに記入してもらう
  2. 書いてもらった内容を表示する
    (必ず記入しなければならない項目に記入されていなければ、書いてもらうよう表示する)
  3. OKならば、その内容を指定したメールアドレスにメールを送信し、次のページに飛ぶ
という利用を想定しています。

★ファイルリスト

    このCGIは以下の場所にあります。
        /cgi-bin/csvmail+no/confirm.html       記入内容確認時のサンプルページ
                          csvmail+no.html      アンケート等のサンプルページ
                          csvmail+no.cgi       CGI本体
                          ng.html            必須項目への記入が無かった場合のサンプルページ
                          number.html        受付番号表示のサンプルページ
                          Readme.html        本マニュアル
    

★カスタマイズ

ファイルを、カスタマイズしましょう。
ここでは各ファイル毎に説明します。
  1. csvmail+no.html
    これは記入してもらいたいFORMの入ったHTMLファイルです。
    以下のように表示されます。

    ■ アンケート(Mail) サンプル

    以下の項目にお答えください。
    お名前(漢字)(必須):
    E-mailアドレス(必須):
    質問A(必須):
    質問B:
    質問C:
    質問D:どこでみました?
    テレビで 雑誌で

    このファイルの中身は以下のようになっています。

    <HTML>
    <BODY>
    <H3>■ アンケート(Mail) サンプル</H3>
    <HR>
    以下の項目にお答えください。<BR>
    <FORM ACTION="./csvmail+no.cgi" METHOD="POST"> ……… (1)
    <INPUT TYPE="HIDDEN" NAME="ng_file" VALUE="ng.html"> ……… (2)
    <INPUT TYPE="HIDDEN" NAME="confirm_file" VALUE="confirm.html"> ……… (3)
    <INPUT TYPE="HIDDEN" NAME="number_file" VALUE="number.html"> ……… (4)
    <INPUT TYPE="HIDDEN" NAME="file" VALUE="csvmail+no.csv"> ……… (5)
    <INPUT TYPE="HIDDEN" NAME="seqfile" VALUE="csvmail+no.seq"> ……… (6)
    <INPUT TYPE="HIDDEN" NAME="html_kanji" VALUE="euc"> ……… (7)
    <INPUT TYPE="HIDDEN" NAME="mail_address" VALUE="postmaster@vf.ksi.ne.jp"> ……… (8)
    <INPUT TYPE="HIDDEN" NAME="subject" VALUE="Enquate Mail CSV TEST"> ……… (9)
    お名前(漢字)(必須):<INPUT TYPE="TEXT" SIZE="15" NAME="CHECK:名前(漢字)"><BR> ……… (10)
    E-mailアドレス(必須):<INPUT TYPE="TEXT" SIZE="30" NAME="CSVCHECK:E-Mailアドレス"><BR> ……… (11)
    質問A(必須):<INPUT TYPE="TEXT" SIZE="12" NAME="CSVCHECK:質問A"><BR> ……… (11)
    質問B:<INPUT TYPE="TEXT" SIZE="12" NAME="CSV:質問B"><BR> ……… (12)
    質問C:<INPUT TYPE="TEXT" SIZE="12" NAME="質問C"><BR> ……… (13)
    質問D:どこでみました?<BR>
    <INPUT TYPE="RADIO" NAME="どこでみた?" VALUE="テレビ">テレビで
    <INPUT TYPE="RADIO" NAME="どこでみた?" VALUE="雑誌">雑誌で<BR>
    <INPUT TYPE="reset" VALUE="Reset message"> ……… (14)
    <INPUT TYPE="submit" VALUE="Send message"> ……… (15)
    </FORM> ……… (16)
    <HR>
    </BODY>
    </HTML>

    では、上から順番に見ていきましょう。

    1. <FORM ACTION="./csvmail+no.cgi" METHOD="POST">

      これは、FORM文の始まりを表すHTMLタグです。
      サブミットボタンが押されたときに、
      FORMに入力した内容を、どのCGIに渡すかをここで記述してあります。
      これは変更しないでください。

    2. <INPUT TYPE="HIDDEN" NAME="ng_file" VALUE="ng.html">

      ここでは、必須項目に指定したFORMに入力されていない個所があった場合に表示する
      ページのファイル名を指定します。
      VALUE="ng.html" という個所で指定します。
      (※URLの指定はできません。ファイル名を指定して下さい。)
      例では、ng.htmlというファイルを指定していますね。
      違う名前のファイル名を指定したい場合は、ng.htmlの部分を変更しましょう。
      なお、必須項目の指定方法は、このあと説明します。
      [HIDDEN属性(画面上には表示せずに、固定した値を送る)]

    3. <INPUT TYPE="HIDDEN" NAME="confirm_file" VALUE="confirm.html">

      ここでは、FORMに記入した内容を表示して、確認を促すページのファイル名を指定しています。
      VALUE="confirm.html"という個所で指定します。
      (※URLの指定はできません。ファイル名を指定して下さい。)
      例では、confirm.htmlというファイルを指定しています。

    4. <INPUT TYPE="HIDDEN" NAME="number_file" VALUE="number.html">

      ここでは入力も確認もOKだったときに登録番号を表示するファイル名を指定しています。
      この例では、number.htmlというファイルを指定しています。

    5. <INPUT TYPE="HIDDEN" NAME="file" VALUE="csvmail+no.csv">

      ここでは、アンケート結果をCSV出力する先のファイル名を指定しています。
      ファイルは ~/logs/以下に作成されます。
      VALUE="csvmail+no.csv"という個所で指定します。
      例では、csvmail+no.csvというファイルを指定しています。

    6. <INPUT TYPE="HIDDEN" NAME="seqfile" VALUE="csvmail+no.seq">

      ここでは、登録番号を保存するファイル名を指定しています。
      ファイルは ~/logs/以下に作成されます。
      VALUE="csvmail+no.seq"という個所で指定します。
      例では、csvmail+no.seqというファイルを指定しています。

    7. <INPUT TYPE="HIDDEN" NAME="html_kanji" VALUE="euc">

      ここでは、ng_fileとconfirm_fileで指定されたHTML文書の漢字コードを指定しています。
      指定は "euc" (EUC-JP)と "sjis" (Shift_JIS、MS漢字)の2種類です。
      VALUE="euc"という個所で指定します。
      例では、EUC-JPコードを指定しています。

    8. <INPUT TYPE="HIDDEN" NAME="mail_address" VALUE="postmaster@vf.ksi.ne.jp">

      ここでは、メールの送信先のメールアドレスを指定します。
      VALUE="postmaster@vf.ksi.ne.jp"の個所で指定します。
      例では、postmaster@vf.ksi.ne.jp宛てにメールが届くように指定してあります。
      ここを変更しないと、KSIのサーバ管理者宛てにメールが届いてしまいます(^^;
      必ず変更しましょう。

    9. <INPUT TYPE="HIDDEN" NAME="subject" VALUE="Enquate Mail CSV TEST">

      ここでは、送付するメールのサブジェクトを指定します。
      VALUE="Enquate Mail CSV TEST"の個所で指定します。
      例では Enquate Mail CSV TEST というサブジェクトでメールを送る設定になっています。
      もちろん日本語も使えますので、ご自由に指定して下さい。

    10. <INPUT TYPE="TEXT" SIZE="15" NAME="CHECK:名前(漢字)"><BR>

      ここでは、必須項目の指定をしています。
      NAME="CHECK:〜" という設定がされていますが、
      この例のように必須項目に指定したいNAMEの頭に、CHECK: を足しておけば、
      その項目は必須項目として扱われます。
      送付されるメールは、CHECK: という文字が外されて届くようになっています。

    11. <INPUT TYPE="TEXT" SIZE="30" NAME="CSVCHECK:E-Mailアドレス"><BR>
      <INPUT TYPE="TEXT" SIZE="12" NAME="CSVCHECK:質問A"><BR>

      ここでは、必須項目でかつCSV形式で出力する指定をしています。
      NAME="CSVCHECK:〜" という設定がされていますが、
      この例のように必須かつCSV出力の項目に指定したいNAMEの頭に、CSVCHECK: を足しておけば、
      その項目は必須かつCSV出力項目として扱われます。
      送付されるメールは、CSVCHECK: という文字が外されて届くようになっています。

    12. <INPUT TYPE="TEXT" SIZE="12" NAME="CSV:質問B"><BR>

      ここでは、CSV形式で出力する指定をしています。
      NAME="CSV:〜" という設定がされていますが、
      この例のように必須項目に指定したいNAMEの頭に、CSV: を足しておけば、
      その項目はCSV形式で出力する項目として扱われます。
      送付されるメールは、CSV: という文字が外されて届くようになっています。

    13. <INPUT TYPE="TEXT" SIZE="12" NAME="質問C"><BR>

      上のものとは違い、CHECK: の記述がないですね?
      ここでは、必須項目でないFORMの設定しています。
      このような感じで、好きなようにFORMを作ってください。

    14. <INPUT TYPE="reset" VALUE="Reset message">

      これはリセットボタンの指定です。
      押すとFORMに書かれた内容がクリアされます。

    15. <INPUT TYPE="submit" VALUE="Send message">

      これはサブミットボタンの指定です。
      これを押すことにより、CGIにFORMに入力された値を渡すことになります。

    16. </FORM>

      これは、FORM文の終わりを指定するHTMLタグです。



    FORMのNAME属性について、このCGIで予約されているNAMEは、以下にかかげるものがあります。
    予約されているNAMEは、FORM文で自由に使えませんのでご注意ください。

    confirm_file記入内容を確認するページのファイル名の指定(必須)
    number_file登録番号を表示するページの指定(必須)
    fileCSV形式で出力するファイル名の指定(必須)
    seqfile登録番号を保存するファイル名の指定(必須)
    html_kanjiHTML文書の漢字コードの指定(必須) [euc, sjis]
    ng_file必須項目に記入洩れがあった時に表示するファイルの指定(必須)
    mail_address送付先のE-mailアドレスを指定する(必須)
    subjectメールのサブジェクトを指定する
    ccメールを同報する宛先のE-mailアドレスを指定する
    bccメールを匿名で同報する宛先のE-mailアドレスを指定する
    fromこのメールの差出人(From:)の欄に書かれるE-mailアドレス
    必須と書かれたものについては必ず設定するようにしてください。
    以上で csvmail+no.htmlの説明は終わりです。


  2. confirm.html, number.html, ng.html
    confirm.htmlは、記入内容を確認するときに表示するページ、
    number.htmlは、登録番号を表示するページ、
    ng.htmlは、必須項目への記入漏れがあった場合に表示するページを
    それぞれ表しています。
    これらは、上で説明した csvmail+no.html内にて、
    <INPUT TYPE="HIDDEN" NAME="ng_file" VALUE="ng.html">
    <INPUT TYPE="HIDDEN" NAME="confirm_file" VALUE="confirm.html">
    <INPUT TYPE="HIDDEN" NAME="number_file" VALUE="number.html">
    というふうに指定されたものです。
    このファイル名にこだわる必要はないです。
    HTML文書の漢字コードはhtml_kanjiで指定したコードで作成してください。
    以下が confirm.htmlの内容です。

    <HTML>
    <HEAD>
    <TITLE>確認</TITLE>
    </HEAD>
    <BODY>
    <H1>確認</H1>
    以下の内容でよろしければ、OKボタンを押してください。<BR>
    修正される場合は、ブラウザのBACKボタンにて戻り、修正をお願いします。<BR>
    <!--insert here-->
    </BODY>
    </HTML>

    <!--insert here-->
    という記述に注目してください。
    これは、実際にはFORMに入力された内容がこの<!--insert here-->と置き換わって出力されます。
    実際の出力は以下のようになります。

    確認

    以下の内容でよろしければ、OKボタンを押してください。
    修正される場合は、ブラウザのBACKボタンにて戻り、修正をお願いします。

    必須名前(漢字)山田太郎
    必須E-Mailアドレスtyama@ksi.ne.jp
    必須質問Aレモン50個分

    質問B肉の勝負

    質問C焼きソバ飯

    どこでみた?雑誌

    ng.htmlファイルも同様、 <!--insert here-->の部分に記入された内容が置き換わって出力されます。
    confirm.htmlと同じようにカスタマイズしてください。

    number.htmlファイルも同様ですが、 <!--insert here-->の部分に自動採番した登録番号が置き換わって出力されます。
    実際の出力は以下のようになります。

    登録を受付ました

    あなたの登録番号は123です。
    またのご利用をお待ちしております。
    ホーム

    ※注意※
    <!--insert here--> は必ず行の先頭に書き、その行には他に何も書かないようにしてください。
    空白が入ってもいけません


    csvmail+no.html内にて違うファイル名が指定されている場合は、
    そのファイル名のものを用意する必要があります。


★メールの例

サンプルより出されたメールは以下のようになります。
(ヘッダは一部省略)

Subject: Enquate Mail CSV TEST
To: postmaster@vf.ksi.ne.jp
Date: Fri, 11 Sep 1998 15:05:40 +0900
Content-Type: text/plain; charset=ISO-2022-JP
Content-Transfer-Encoding: 7bit
X-Mailer: [KSI-csvmail+no] 164.46.224.130(164.46.224.130:)

名前(漢字)=山田太郎
E-Mailアドレス=tyama@ksi.ne.jp
質問A=レモン50個分
質問B=肉の勝負
質問C=焼きソバ飯
どこでみた?=雑誌

登録番号 : 123

★CSVの例

サンプルより出されたCSVファイルは以下のようになります。
サンプルでは CSVファイルは ~/logs/csvmail+no.csv で保存されます。
データの最後に登録番号が出力されます。

"tyama@ksi.ne.jp","レモン50個分","肉の勝負","123"

漢字コードはShift_JISで、改行コードはLF(UNIX標準)で出力されます。

★インストール

カスタマイズが終わりましたら、あなたのWebサイトのcgi-binの下に、
FTPにて~/www/cgi-bin/csvmail+noディレクトリに転送してください。
サンプルと同じファイル名での構成の場合、以下のようになります。
    /cgi-bin/csvmail+no/confirm.html
                      csvmail+no.html
                      csvmail+no.cgi
                      ng.html
                      number.html
                      Readme.html
無事に転送できましたら、テストしてみましょう。


★テスト

では、テストしてみましょう。

http://www.あなたのドメイン/cgi-bin/csvmail+no/csvmail+no.html
に、アクセスしてみてください。

無事に動きましたか?
動きがおかしいと感じた場合は、もう一度このマニュアルを見て、
各ファイルを調べてみてください。

$Id: Readme.html,v 1.1 1999/08/05 01:31:48 morikawa Exp morikawa $