フォームメールのカスタマイズと設置

作成された、enquete.htmlと、formail.cgiを各々の環境に合わせてカスタマイズし、サーバーに送ります。

enquete.htmlのカスタマイズ

enquete.htmlで必ずカスタマイズが必要なのは、

<FORM ACTION="/cgi-bin/formail.cgi" METHOD="POST">
の部分です。
formail.cgiをどこに置くかによって違いますし、場合によってはスクリプトエイリアスを利用して、/UsetID-bin/formail.cgiなどになる場合もあります。
適切なパスをここに書き込んでください。
http://www.xxx.or.jp/~xxxx/cgi-bin.formail.cgiのようなフルURLでもかまいません。
<META HTTP-EQUIV="Content-type" CONTENT="text/html;charset=x-euc-jp>
これは必ず、<HEAD>...</HEAD>の中に入れておいてください。文字コードをEUCで送信するために必要です。
後は、自由に作成してください。しかしながら、CGIとの連携がありますので、それなりにスクリプトを書き直さなければなりません。書き直しはエラーの原因になりますので、慎重に行ってください。
特に、NAME="xxxxx" の部分は重要です。この変数名で値が渡されるため、ここが正しく連携されていないと動作しません。
checkboxやSELECTをMULTIPLEで使用した場合、値が複数になるため、CGIの方では配列として扱わなければなりません。これは大変重要です

formail.cgiのカスタマイズ

formail.cgiでカスタマイズが必要なのは、

#!/usr/local/bin/perl
   $sendmail = '/usr/lib/sendmail';
   $myaddress = 'yyy@xxx.xxx.or.jp';
の3行です。
最初の行は、perlのパスです。プロバイダーに確認してください。
Telnetで接続できる場合は、which perl で探してください。
2行目は、sendmailのパスです。プロバイダーに確認してください。
which sendmailでは見つからない時は、概ね/usr/lib/において有る場合が多いので、cd usr/lib で移動して ls としてみてください。出てくる可能性は高いです。
あんがいこのままで動いたりします。

3行目は、メールで送ってもらうアドレスを記入してください。

新しい項目を追加する

さて、アンケート内容をHTMLの方で変えた場合は、当然CGIの方も変更しなければなりません。

1)変数の追加

  1)単数選択項目欄の場合

$where = $in{'where'};
新たな項目を設けた場合は、上記のようなフォーマットで変数設定を追加します。
(;をつけ忘れないように)


  2)複数選択項目欄の場合

$where = $in{'where'};
変数設定を追加します。さらに、
@good = &SplitParam($good);
上記のような一行が必要です。

2)メール送信の部分の項目追加

  1)単数選択項目欄の場合

■このWebを見つけたきっかけ
$where
このフォーマットで追加します。
  2)複数選択項目欄の場合
■面白かったページ
$good[0]
$good[1]
$good[2]
$good[3]
$good[4]
このフォーマットで追加します。

3)書き込みのお礼の部分の項目追加

  1)単数選択項目欄の場合

きっかけ:$where<BR> 
というフォーマットで書き
print <<END_OF_HTML;
Content-type: text/html

<HTML>
        <HEAD><TITLE>TANKS</TITLE>
        </HEAD>
<BODY>
<H1>以下のように書き込みました。</H1><BR>
年月日:$year/$mon/$mday<BR>
お名前:$name<BR>
性別  :$sex<BR>
E-Mail:$email<BR>
HOMEPAGE:$homepage<BR>
きっかけ:$where<BR>
END_OF_HTML
赤い行の間に入れてください。
  2)複数選択項目欄の場合

print "<B>面白かったページ</B>:\n";
foreach $goods(@good){
print "${goods}<BR>\n";
}
というフォーマットで、


きっかけ:$where<BR>
END_OF_HTML

print "<B>面白かったページ</B>:<BR>\n";
  foreach $goods(@good){
    print "${goods}<BR>\n";
    }

print "<B>ためになったページ</B>:<BR>\n";
  foreach $studys(@study){
    print "${studys}<BR>\n";
    }

print <<END_OF_HTML;
<B>コメント</B>:$comment<P>
赤い行の間に入れてください。


カスタマイズの注意

★カスタマイズは、慎重に行って下さい。たとえば、$good$goodsは違いますし、"とは違います。; が抜けるだけで動作しません。もちろんアルファベット違いも動きません。
本当は、HTML部分だけのカスタマイズの方が良いのですが、まあ、理屈が解れば挑戦してみてもいいかもしれませんね。

アップ後は、サーバーにTelnetで接続が許されているなら(シェルが解放されているなら)、デバッグしてみてください
接続後、formail.cgiのあるディレクトリに移動して、perl -wc formail.cgiと入力します。Syntax OKが出れば問題ない可能性が高くなります。エラーが出れば、どのあたりがエラーなのかが表示されますので、探してみてください。

カスタマイズしたスクリプトをEUC,LFで保存してください。必ずそうしてください。


その他に必要なもの

  1. cgi-lib.pl(フォームのデータをデコードします)
  2. jcode.pl(文字コードを変換します)
  3. .htaccess(CGIを扱うのに必要な場合があります)

htmlやcgiを含めて必要なものをアーカイブでまとめてありますので、ダウンロードしてください。(すべて文字コードはEUC、改行コードはLFになっていますので、EUC LFに対応したエディタが必要です)
Windows版は解凍にLHAソフトが必要です。ディレクトリ付で解凍してください。
Macintosh版は解凍にStuffIt Expanderが必要です。

 ZAPさんのフリーソフトダウンロードページへ ←ここをクリックする

前ページでダウンロードした場合は、同じものですのでダウンロードしないでください。


ファイルの送信とパーミッション

enquete.htmlとformail.cgiおよび各ファイルをを各々の場所に送信します。

enquete.htmlの<FORM ACTION="Pass">で指定したformail.cgiのパスと同じ位置関係に置いてください。

jcode.plcgi-lib.pl .htaccessは、formail.cgiと同じディレクトリに置きます。

cgi-bin等に置くと支持された場合は、そこに置きます。enquete.html<FORM ACTION="URL">の部分のパスを正しく書いてください。
.htaccessは、CGIを動作させるために必要な場合に置きます。詳しくはプロバイダーにお聞きください。
すでに.htaccessが置いて有る場合は、そのまま送ると上書きされてしまいますのでご注意ください。

すべてASCII(TEXT)モードで送ってください。

FTPでの送信の方法が解らなければ、FTPでputのページをご覧ください。

  • Mac:Fetchでputへ移動する
  • Win:CuteFTPでputへ移動する
  • 次に、パーミッションを設定します

    enquete.html、.htaccessは、デフォルトのままで良いのですが、

    formail.cgi,jcode.pl,cgi-lib.pl705にします。

    Telnetで入り、formail.cgiのあるディレクトリに移動し、
    chmod 705 formail.cgi としてください。
    FTPでもパーミッション設定はできます。パーミッションのページをご覧ください。
  • パーミッションのページに移動する

  • 旨く行かないときのチェック項目。

    旨く行かない時は以下の点をチェックします。

    1. CGIが利用できないのかもしれません。プロバイダーに確認してください。
    2. CGIを特殊なフォルダ(cgi-bin等)に入れなければならない。
    3. cgi-binに入れた場合の正確なパスを確認する。(エイリアスを使用する等)
    4. cgi-binに入れる場合、プロバイダー側の設定が必要な場合があります
    5. #!/usr/local/bin/perl で良いかを確認する。
    6. sendmailのパスは正しいかどうかを確認する。
    7. アルファベットの記述に間違いが無いか必ず確認する。
    8. アルファベットの大文字、小文字の区別も正確に書く。
    9. perlでは { で終わる行以外は、終わりに必ず ; を付ける
    10. ( ) や{ } や < > は半角です。勿論アルファベットも半角英数です。
    11. パーミッションの設定は正しいか確認する。
    12. スクリプトは、EUC LF改行コードに変更しましたか?
    13. スクリプトを送信する時にAscii(TEXT)で送りましたか?

    cgi-binに入れる場合、パスをフルパスにしなければならない、とか、スクリプトエイリアスを経由するため、/UserID-bin/xxx.cgiにするなどの決まりが有る場合があります。パスに関しては安全を考えサーバーの管理者に詳しく電子メールなどで聞いたほうよいです。

    特に以下の5つの点は間違っていると、動作しません。
    1) htmlでActionで指定する、cgiのパスの書き方
    2) cgiスクリプト内でsendmailのパスの書き方。
    3) .htaccessが必要かどうか。
    4) perlのパス(#!/usr/local/bin/perlなど)
    5) cgiを入れるディレクトリに決まりがあるか。


  • 前前ページ:enquete.html(アンケート用フォームHTML)
  • 前ページ:formail.cgi(CGI)の説明
  • アンケートメールの設置
  • 次ページ:HTMLから直接メールサーバーに送る方法

  • Copyright:ZAP 1997.4