[ CGI集 | CGI解説 | Perl解説 | HTML解説 | LinuxMemo | Q&A | QuizLink ]      

フォームメールCGI T-FormMail Ver.1.03 説明書

about...

機能

 フォームに入力された内容をメールとして送信するためのCGIプログラムです。一つのプログラムで複数のフォームを扱うことができます。フォームは通常のHTMLで自由にデザインできます。ページの感想用に、アンケートに、ネタ募集にご利用下さい。主な機能は以下の通りです。

  • 一つのプログラムで複数のフォームを設置可能
  • フォームは通常のHTMLで作成
  • 項目の入力に様々な条件(入力必須、数字、URL形式、メールアドレス形式、正規表現など)をつけることが可能
  • 管理ページよりメール送信先、画面配色、メッセージなどを変更可能
  • 二重投稿の防止
  • 送信ログの閲覧

[目次へ]

設置に関する注意 〜 サーバに sendmail が必要です

 T-FormMail はメール送信に sendmail(メール送信コマンド)を利用します。sendmail はあらかじめサーバ側で用意されている必要があります。個人でインストールすることはできません。T-FormMail をインストールする前に、お使いのプロバイダが sendmail が利用できるかどうかをお確かめ下さい

 sendmail へのパスは、大抵はそのプロバイダのCGI設置方法の説明ページに書かれています。もし書かれていなかった場合、プロバイダの管理者宛に、

「sendmail を利用したいのですが、パスを教えてください。」

とメールを出せば教えてくれます。

[目次へ]

ソース

(ダウンロード後、ファイル名が"-cgi.txt"、"-pl.txt"となってるものを".cgi"、".pl"に変更してください)

全ファイルをまとめてダウンロード 〜 formmail100.lzh

プログラム

[目次へ]

インストール方法

インストール

  1. ソースから全てのファイルをダウンロードする。
    ※ ダウンロード方法はソースをダウンロードするを参照。

  2. tfmail.cgi、tfmadmin.cgi最上部のPerlのパスを正しく設定する。
    ※ 詳しくはPerlのパスを設定するを参照。

  3. tfmlib.plの上部にある「変数設定部」の以下の変数を編集する。

    • $basedir ..... データファイルを格納するディレクトリのパス(※注1)
    • $backurl ..... エラー時に表示される「戻る」を押したときに移動するURL
    • $admin_email ..... 管理者メールアドレス(※注2)
    • $word_max ..... 投稿の入力の最大バイト数
    • $char_code(※注3) ..... 画面表示の文字コード
    • $sendmailpath ..... sendmail へのパス(詳細は上記

    ※注1 データファイルをプログラムと同じ場所に置く場合は $basedir=".";のままで。
    ※注2 @ の前に必ず \ をつけて下さい。(例, t-nishida\@mvh.biglobe.ne.jp)
    ※注3 sjis以外に変更する場合は、全てのファイルをnkfなどでそのコードに変換すること。

  4. tfmadmin.cgiの上部にある「変数設定部」の以下の変数を編集する。

    • $password ..... 管理用パスワード

  5. 〜.cgi〜.plをFTPのアスキーモードで転送する。パーミッションは、.cgi を 705.pl を 604にする。
    ※ FTPについてはプログラムをFTPで送るを参照。
    ※ パーミッションについてはパーミッションを設定するを参照。

    (telnetの場合)
    % chmod 705 tfmail.cgi
    % chmod 705 tfmadmin.cgi
    % chmod 604 tfmlib.pl

  6. tfmdata.txttfmlog.txtmail.txt という3つの空ファイルを作る。それを$basedirで指定したディレクトリ($basedir=".";の場合は 〜.cgi と同じディレクトリ。以下同様。)にFTPする。パーミッションを 606 に設定する。
    ※ 空ファイルの作り方は、空ファイルの作り方を参照。

    (telnetの場合)
    % chmod 606 tfmdata.txt
    % chmod 606 tfmlog.txt
    % chmod 606 mail.txt

  7. $basedirで指定したディレクトリにディレクトリ lockdir を作る。パーミッションは707にする。

    (telnetの場合)
    % mkdir lockdir
    % chmod 707 lockdir

  8. 各 .cgi にブラウザからアクセスして動作チェック。
     ・tfmail.cgi → 「コードが指定されていません」と表示されればOK。
     ・tfmadmin.cgi → 「T-FormMail 管理用ページ」が表示されればOK。
       ※ 上のように表示されない場合、ブラウザでアクセスするを参照して問題を解決してください。

以上でインストールは完了です。

[目次へ]

 

メール送信フォームを設置する

 メール送信フォームを設置するには次の手順が必要です。
  1. 規則に従ってフォームを作成する
  2. 管理ページから設定を行う

1. 規則に従ってフォームを作成する

  1. メールフォームのコードネームを決める。名前に使える文字は以下の通り:

    • 半角英語の大文字(A-Z)
    • 半角英語の小文字(a-z)
    • 半角数字(0-9)
    • アンダーバー(_)

     以下では例として mail1 とします。

    ※メールフォームの内容が分かるような名前をつけておくとメンテナンス時に便利です。例えば、「ページの感想募集用」だったら impression など。

  2. フォームをつけたいHTMLファイルを用意する。
    全く新規に作成してもいいですし、既にあるページに付け加えることも可能です。

  3. 上で用意したHTMLファイルのフォームをつける部分に、まず以下のように書く。
    <FORM METHOD="post" ACTION="(tfmail.cgiのURL)">
    <INPUT TYPE="hidden" NAME="_code" VALUE="mail1">
       :
       :
    (ここに入力フォームを書く)
       :
       :
    <INPUT TYPE="submit" VALUE="送信確認画面へ">
    <INPUT TYPE="reset" VALUE="書き直す">
    </FORM>
    ※ 赤文字の部分は各自の環境に合わせてください。

  4. 上の(ここに入力フォームを書く)の部分に入力フォームを書く。
    (入力フォームの書き方は、書籍または付録:FORMタグ解説を参照。)

    フォームを作る際に、以下の規則に必ず従うこと:

    1. NAMEは全て英語にする。(大文字でも小文字でも構いません)

      [良い例] 住所<INPUT TYPE="text" NAME="address" SIZE="30">
      [悪い例] 住所<INPUT TYPE="text" NAME="住所" SIZE="30">

    2. 投稿者のメールアドレスを記入するフォームのNAMEは "_email" にする。

      [良い例] <INPUT TYPE="text" NAME="_email" SIZE="30">

      ※ フォームから送られてきたメールに返信すると、この _email に書いたメールアドレス宛てになります。

    3. チェックボックス、MULTIPLEをつけた(=複数選択可能な)リストのVALUEは、文字列の後ろに半角カンマまたは空白を入れておく

      [良い例]
      <INPUT TYPE="checkbox" NAME="hoge" VALUE="1,">1.たこ焼
      <INPUT TYPE="checkbox" NAME="hoge" VALUE="2,">2.やきそば
      <INPUT TYPE="checkbox" NAME="hoge" VALUE="3,">3.ラーメン

      [悪い例]
      <INPUT TYPE="checkbox" NAME="hoge" VALUE="1">1.たこやき
      <INPUT TYPE="checkbox" NAME="hoge" VALUE="2">2.やきそば
      <INPUT TYPE="checkbox" NAME="hoge" VALUE="3">3.ラーメン

    フォームのサンプルはこちら。(ページの感想)

  5. NAME="_email" 以外の NAME の条件を以下のようにまとめておく。

    • NAME … 各入力フォームのNAME
    • 項目名 … 項目の日本語名
    • 必須 … 入力が必須かどうか
    • 条件 … 入力される文字が満たさなければいけない条件(※注1)。

    ※注1 例えば、郵便番号を入力するフォームに「半角数字」という条件をつけることができます。サポートされているのは、半角数字半角英語URL形式E-Mail形式。もしくはPerlの正規表現。

    サンプルフォーム:ページの感想を例とすると下のようになります。

    _email は特殊なNAMEです。この表に記述する必要はありません。
    NAME項目名必須条件
    name名前 
    sex性別 
    age年齢半角数字
    urlURL URL形式
    fromリンク元 
    good良ページ  
    comコメント  

     この表は入力の条件付け(後述)に使用します。

[目次へ]

2. 管理ページから設定を行う

 フォームを作成したら、次にフォームに合わせた設定を行います。

  1. 管理ページ(tfmadmin.cgi)にアクセスする。

  2. 「フォームメール新規作成、修正、削除」を選択し、インストールの4で設定した管理用パスワードを入力し、「作業実行」を押す。
       → 設定画面が表示される。

  3. 「新規登録」ボタンを押す。
       → 下に新規登録用フォームが表示される。

  4. フォームに下記の設定を入力する。

    • コード
      ... 「規則に従ってフォームを作成する」の1で設定したコードネーム。(ここの例ではmail1
    • 送り先
      ... 送信先のメールアドレス。
    • スイッチ
      ... 以下の設定を有効にするかどうか。(説明文はそれぞれ右の選択肢を選んだときの動作)
      • 確認時に送信先メールアドレスを [表示しない/表示する]
        ... 入力内容を確認する画面に送り先メールアドレスを表示する。
      • メールアドレスの入力は [なくてもよい/必須]
        ... メールアドレス(NAME="_email" のフォーム)の入力がないとエラーになる。
      • 送信後にメール全文を [見せない/見せる]
        ... メール送信完了後、メールの全文を表示する。
      • アクセス元ホストを [取得しない/取得する]
        ... メール投稿者のアクセス元ホストをログに保存する。
    • 項目詳細
      ... 入力フォームごとの設定を書く。詳細は「『項目詳細』の記述方法」を参照。
    • 戻り先
      ... メール送信完了後に「戻る」ボタンを押したときに戻る先。
    • 題名
      ... メールの件名(Subject)。
    • 文章
      ... メール送信完了後に表示するメッセージ。
    • 配色
      ... 確認画面と終了画面の配色。「背景色、文字色、強調文字色、リンク色、背景画像」の順に半角カンマ「,」区切りで入力。

  5. 入力を終えたら「作業実行」ボタンを押す。
       → 登録内容がフォームの下に表示される。

[目次へ]

 

動作をテストする

 設定が完了したら動作テストを行います。

※「管理ページから設定を行う」の 4, で設定したメールアドレス宛てのメールが受け取れる環境で行ってください。

  1. 規則に従ってフォームを作成する」で作成したフォームをFTPでアップロードする。

  2. ブラウザからそのページにアクセスし、フォームに入力する。メールアドレスは自分にしておく。

  3. 「送信内容確認画面へ」(submitボタン)を押す。
       → 入力が正しければ確認画面が、入力に間違いがあればエラー画面が出てくる。

    ここで起こりがちなエラーとその対処方法は以下の通り:

    • 「Not Found」
        → フォームのACTION属性のtfmail.cgiのURLが間違っている。(参照
    • 「コードが指定されていません」
        → フォームに _code の HIDDEN タグがない。(参照
    • 「指定されたコードが存在しません」
        → 管理ページから登録したコードが間違っている。(参照
    • 正しく入力しているのに「入力に誤りがあります」の入力が正しくない(×)エラーになる
        → 項目詳細の設定で条件が誤っている。(参照
    • すべてのフォームを埋めたのに「入力に誤りがあります」の入力必須()エラーになる
        → 項目詳細の設定で NAME を間違えている、または余計な NAME がある(参照

  4. 「送信」ボタンを押す。
       → 送信完了画面が表示される。

  5. 管理ページから設定を行う」の 4, で設定したメールアドレス宛てに、今入力した内容のメールが届いているか確認する。

    ここで起こりがちなエラーとその対処方法は以下の通り:

    • 投稿してから10分以上待ってもメールが届かない
        → 送信先が間違ってないか確認する。(参照
    • 入力したのにメールに書かれていない項目がある
        → 項目詳細の設定で、その NAME に対する設定を書いていない。(参照
    • メールに心当たりのない項目がある
        → 項目詳細の設定に、余計な NAME がある。(参照

  6. 管理ページより「ログの閲覧」を選び、「送信確認」と送信完了の二つのログが書き込まれていることを確認する。
以上で完了です。多少面倒でもメールがきちんと送信されるかどうかを確かめるまでは公開しないようにしてください。

[目次へ]

 

メール送信フォームを追加設置する

 「管理ページから設定を行う」の 1, で決めたものとは別のコードネームを考えます。(前が mail1 だったら mail2 など。)あとは全く同じ作業です。

[目次へ]

使い方

投稿者側:フォーム記入 → 入力内容確認 → 送信完了

 投稿者側の作業の流れは以下のとおりです。

  1. 投稿者はフォームに入力し、送信内容確認ボタン(submitボタン)を押す。

  2. プログラムは管理者が設定した条件にしたがって、入力をチェックする。

    • 入力が間違っている場合:
        ... 項目名と間違いの内容(※)が表示され、Backを押して戻るよう警告。
    • 入力が正しい場合:
        ... 入力の内容の確認送信先メールアドレス管理ページのスイッチで設定した場合)が表示される。

  3. 投稿者は入力内容を再度確認し、「送信」ボタンを押す。

  4. プログラムがメールを送信する。

  5. 送信完了画面が表示される。

    • 終了メッセージ ... 管理ページで設定する。
    • 送信ID ... 全てのメールに一意に与えられるID番号。ログに記録されるので送信確認が取れます。
    • 送信したメールの全文 ... 送信したメールの全文。(管理ページのスイッチで設定した場合)
※ 「必須項目が入力されていない()」または「条件にひっかかった(×)」のいずれか。

[目次へ]

 

管理側:フォームから送信されたメールの内容

 投稿者がフォームに書きこむと、管理ページの「送り先」設定したメールアドレス宛にその内容が送信されます。メールには各フォームの項目名と書きこまれた内容以外に、以下の内容が含まれます。

  • E-Mail ... 投稿者のメールアドレス
  • 時刻 ... メールが送信された時刻
  • ホスト ... 投稿者のアクセス元ホスト
  • ID ... メールの送信ID(※注1)
  • コード ... フォームのコードネーム(※注2)
  • URL ... tfmail.cgi のある場所のURL
  • 管理者 ... T-FormMail の管理者のメールアドレス(※注3)
※注1 フォームから投稿されるメールに与えられる一意なID番号。投稿者側:フォーム記入 → 入力内容確認 → 送信完了の 5, を参照。
※注2 mail1 など。規則に従ってフォームを作成するの 1, を参照。
※注3 インストールの 3, で設定した $admin_email。

[目次へ]

 

管理側:フォームメール新規作成、修正、削除

 管理ページ(tfmadmin.cgi)の「フォームメール新規作成、修正、削除」からは以下のことができます。

  • フォームメールの新規作成 ... フォームメールの設定を新たに作る
  • フォームメールの修正 ... 既に登録してあるフォームメールの設定を変更する
  • フォームメールの削除 ... フォームメールの設定を削除する

 詳細はこちらを参照してください。

[目次へ]

 

管理側:「項目詳細」の記述方法

 管理フォームの「項目詳細」では、「規則に従ってフォームを作成する」の 5, で作成した表にしたがって条件を指定します。フォーマットは以下の通りです。

<NAME>###<項目名>###<必須>###<条件>
<NAME>###<項目名>###<必須>###<条件>
<NAME>###<項目名>###<必須>###<条件>
   :
(※ セパレータはシャープ「#」3つです。各NAMEごとに1行です。)

  • NAME ... 入力フォームのNAME
  • 項目名 ... 項目の日本語名(入力エラーメッセージ、メール文内に使用される)
  • 必須 ... 必須なら1、必須でないなら0
  • 条件 ... 以下のいずれか(※ 正規表現以外は全て半角大文字英語で書くこと
    • NUMBER ... 半角数字 (○ 19991202 × 1999/12/02 × 19991202
    • WORD ... 半角英数 (○ Takahiro × 貴洋  × TAKAHIRO
    • URL ... URL形式 (○ http://www.yahoo.com/ × htp:/ほげら
    • EMAIL ... メールアドレス形式 (○ tnishida@mytools.net × だめよ@だめだ.だめさ
    • 正規表現 ... Perlの正規表現。より細かいマッチングが可能です。詳しくはPerlの書籍をご覧ください。
      ※ 「こんな条件にしたいんだけど、正規表現はどう書くの?」という質問はQ&A掲示板で受け付けます。
      ※ 独自の正規表現に NUMBER のような名前をつけて登録することもできます。詳細は独自の入力条件を追加するを参照。

[例] 「規則に従ってフォームを作成する」の 5,で作成した表の場合(サンプルフォーム:ページの感想):

NAME項目名必須条件
name名前 
sex性別 
age年齢半角数字
urlURL URL形式
fromリンク元 
good良ページ  
comコメント  
  →  
name###名前###1###
sex###性別###1###
age###年齢###1###NUMBER
url###URL###0###URL
from###リンク元###1###
good###良ページ###0###
com###コメント###0###

[目次へ]

 

管理側:送信ログ閲覧

 管理ページ(tfmadmin.cgi)の「送信ログ閲覧」からは、どのコードに対して、いつどこのホストからフォームへの書きこみがあったかを見ることができます。送信確認などにお使い下さい。(二重投稿防止機能のついでに作ったものなので、実質的に役に立つことはあまりないと思いますが。。。)

[目次へ]

Note...

二重投稿の防止機能

 T-FormMail 1 は、送信ボタンの連射による二重投稿を防ぐ機能が付いています。同じ内容のメールを二回送ろうとすると「二重投稿エラー」となります。同じ送信IDのメールが二回以上送られることはありません。

 また、送信内容確認画面を経由しないとメールが送信できないようになっていますので、いきなりメールが送信されてしまうことを防ぐことができます。

[目次へ]

 

メールアドレスの入力を必須にしなかった場合の注意

 通常、T-FormMail 1 から送信されてきたメールは、From(送信者アドレス)、Reply-To(返信先アドレス)共に NAME="_email" の入力フォームに書かれたものになるようになっています。つまり、そのメールに返信すると、投稿者に行くようになっています。

 しかし、管理ページから設定を行うの 4, のスイッチで「メールアドレスの入力は」を「なくてもよい」にした場合、投稿者がメールアドレスを書かない可能性があります。その場合、From、Reply-To は送信先のアドレス、つまり、そのメールが届いたアドレスになります。そのメールに返信しても自分自身に届くだけですので注意してください。(送ってしまっても実害はないんですけど)

[目次へ]

 

独自の入力条件を追加する

  管理側:「項目詳細」の記述方法で、入力の条件について解説しましたが、NUMBER, WORD, URL, EMAIL 以外に条件を設定したい場合は正規表現を書く必要があります。

 しかし、似たような正規表現を何回も入力する必要がある場合、その正規表現に NUMBER のような名前をつけて登録しておくことで、入力の手間を省くことができます。

 tfmlib.pl の最下部にある matchingpattern 関数に、以下のように記述してください。

$PATTERN{'<パターン名>'} = '<正規表現>';

[例]
 郵便番号の正規表現をZIPという名前で登録 → $PATTERN{'ZIP'} = '^\d{3}(-\d{2,4})?$';
 電話番号の正規表現をTELという名前で登録 → $PATTERN{'TEL'} = '^\d+-\d+-\d+$'

[目次へ]

バージョン情報

バージョン履歴

  • (02/04/15) Ver.1.03
     1.02の修正時に新たに生まれた管理画面のバグ修正。

  • (02/04/12) Ver.1.02
     文中に " があるとそれ以降の文字が切れたり文字マッチングエラーになるのを修正。

  • (99/12/15) Ver.1.01
     確認画面にメールアドレスが表示されないバグの修正。

  • (99/12/06) Ver.1.00
     新規公開。

[目次へ]