有限会社ウェブスリー・ラボ


フォーム・メール


1. 機能

フォーム・メールはWebページ上にテキスト・ボックスやチェック・ボックスを作成し、必要事項を記入してもらった上でメール返送してもらうプログラムです。たとえばWeb来訪者からメッセージをもらったり、申し込みの注文受付けなどに利用できます。

サーバー上にフォーム・メールのCGIプログラムが設定してありますので、簡単なタグをページに置いていただくだけでこの機能がご利用いただけます。

2. 設定

2-1 基本設定

フォームを置くページ上に以下のタグを置いてください。赤く表示されている部分が書き直していただく部分です。

<Form Method="Post" Action="http://yourdomain.com/cgi-bin/formmail.cgi">
<Input Type="hidden" name="recipient" value="anyname@yourdomain.com">
<Input Type="hidden" name="subject" value="Thank you very much!">

recipientはフォームの結果を送信するメールアドレスで、必ず指定する必要があります。

subjectは、メールのタイトルで指定は任意です。指定しない場合は、デフォルトの "WWW Form Submission" が使われます。

送信していただいたあとに「ありがとうございました」等のメッセージを返すページを指定する場合には、以下のタグを置いてください。
<Input Type="hidden" name="redirect" value="http://yourdomain.com/thanks.html">

送信者の名前のテキスト・ボックスは以下のようにしてください。
お名前: <Input name="realname" size="25">

また、送信者のemailのテキスト・ボックスは以下のようにしてください。emailを指定する場合、requiredフィールドにも入れるようにして下さい。シンタックスのチェックが行われます。
email: <Input name="email" size="25">

ユーザー情報を知りたい場合には、以下のように指定します。REMOTE_HOST等以外の環境変数も指定できます。
<input type="hidden" name="env_report" value="REMOTE_HOST,HTTP_USER_AGENT">

特定の項目をメールボディに含めたい場合は、以下のように指定します。
<input type="hidden" name="print_config" value="email,subject">

その他、hiddenフィールドには以下のような指定が可能です。詳細はスクリプト内をご覧下さい。
rint_blank_fields<input type="hidden" name="print_blank_fields" value="1">
title<input type="hidden" name="title" value="Feedback Form Results">
return_link_url<input type="hidden" name="return_link_url" value="http://yourdomain.com/main.html">
return_link_title<input type="hidden" name="return_link_title" value="Back to Main Page">
missing_fields_redirect<input type="hidden" name="missing_fields_redirect" value="http://yourdomain.com/error.html">
background<input type="hidden" name="background" value="http://yourdomain.com/image.gif">
bgcolor<input type="hidden" name="bgcolor" value="#FFFFFF">
text_color<input type="hidden" name="text_color" value="#000000">
link_color<input type="hidden" name="link_color" value="#FF0000">
vlink_color<input type="hidden" name="vlink_color" value="#0000FF">
alink_color<input type="hidden" name="alink_color" value="#0000FF">

それ以外の項目は、以下のようにしてください。
お好きな項目: <Input name="お好きな項目" size="25">

2-2 オプション設定

2-2-1 絶対入力事項

各テキスト・ボックスの入力項目のうち、ユーザーに絶対に記入してもらいたい項目がある場合には、次のようなタグを置いてください。

<input type="hidden" name="required" value="email,phone">

上記の例では、emailとphoneを要求させています。もちろん、項目として、<input name="email" size="??">および<input name="phone" size="??">というように、emailとphoneの入力テキスト・ボックスがあることが前提です。
このタグを置いた時に、もしユーザーがこれらの項目を入力していないで送信しようとした場合には、CGIが入力を促すページを表示させます。

2-2-2 項目のソート

とくに何の設定もしていない場合には、formmail.cgiで送られてくるメールの中の項目の順番はバラバラになってしまいます。
そこで、これらの項目の順番をソートしたい場合には次のようにしてください。

<input type="hidden" name="sort" value="alphabetic">
あるいは、
<input type="hidden" name="sort" value="order:name,address,zip,phone,fax,">

上記の二つのタグのうち、上のタグはアルファベット順に並べる場合です。下のタグは順番を指定する場合です。
下のタグの場合、もちろんそれぞれの項目のテキスト・ボックスが存在することが前提です。
なお、項目のうち、「realname」と「email」については特別の取扱がされていますのでこのタグの中の順番の指定には入れないようにしてください。また、「value="order:・・・・」のところの、「order:」は忘れずに必ず入れてください。このorder:の後ろから、項目を入れてください。項目の数はいくつでも大丈夫ですし、日本語でも大丈夫です。

3. さまざまなフォーム

以下のように、さまざまなフォームを設定することができます。HTMLタグについてはHTMLの参考書をご覧いただくか、このページのソース表示をご覧ください。










4. サブジェクト行の日本語化について

このスクリプトのデフォルトのままでは、メールのサブジェクト行等に日本語が使用できません。

(サブジェクトの指定は、htmlファイルの以下の部分で行っています。)
<Input Type="hidden" name="subject" value="Thank you very much!">

(送信者の名前の指定は、htmlファイルの以下の部分で行っています。)
<Input name="realname" size="25">

これを <Input Type="hidden" name="subject" value="有難うございます"> 等と指定すると文字化けを起こします。送信者の名前に日本語入力したときも同様です。

メールのヘッダー部を日本語化する例:(ご参考)

formmail.cgi ファイル内(370行目辺り)の記述:
------------------------------------------------------------------------------
sub send_mail {
    # Localize variables used in this subroutine.                            #
    local($print_config,$key,$sort_order,$sorted_field,$env_report);

    # Open The Mail Program
    open(MAIL,"|$mailprog -t");

    print MAIL "To: $Config{'recipient'}\n";
    print MAIL "From: $Config{'email'} ($Config{'realname'})\n";

    # Check for Message Subject
    if ($Config{'subject'}) { print MAIL "Subject: $Config{'subject'}\n\n" }
    else                    { print MAIL "Subject: WWW Form Submission\n\n" }
------------------------------------------------------------------------------
を、以下に入れ替える。
------------------------------------------------------------------------------
sub send_mail {
    # Localize variables used in this subroutine.                            #
    local($print_config,$key,$sort_order,$sorted_field,$env_report);

    use MIME::Base64 ();
    require './jcode.pl';
    $nkf = "./nkf/nkf";

    $subject = $Config{'subject'};
    $realname = $Config{'realname'};

    &jcode::convert(\$subject, 'jis');
    $subject = MIME::Base64::encode($subject);
    chomp($subject);
    $subject = "=?ISO-2022-JP?B?$subject?=";

    &jcode::convert(\$realname, 'jis');
    $realname = MIME::Base64::encode($realname);
    chomp($realname);
    $realname = "=?ISO-2022-JP?B?$realname?=";

    # Open The Mail Program
    open(MAIL,"|$nkf -j|$mailprog -t");

    print MAIL "To: $Config{'recipient'}\n";
    print MAIL "From: $Config{'email'} ($realname)\n";

    # Check for Message Subject
    if ($subject) { print MAIL "Subject: $subject\n\n" }
    else                    { print MAIL "Subject: WWW Form Submission\n\n" }
------------------------------------------------------------------------------

ブラウザーのバックボタンでヘルプ・ファイルのメニューにお戻りください。