サイト内検索  

サンプルCGIを使ったメールフォーム

第7章でCGIを使わないメールフォームを作りましたが、それをCGIに対応させるための方法を書きます。

CGIを使ったメールフォームにするための条件

自分が使っているWWWサーバーで上記2点を満たしているかどうかは、お使いのWWWサーバーのサポートページを参照してください。

サンプルのCGIをコピーする

ホームページ・ビルダーがインストールされているフォルダのsample/cgi/anketo のフォルダに、メール送信可能なプログラムがあります。

という2つのファイルをcgi-binというフォルダを作って、そのフォルダにコピーしましょう。

コピーしたファイルは読み取り専用になっているので、右クリックでファイルのプロパティを開いて、読み取り専用のチェックを外します。

CGIを設置するための準備

HTML側での変更

第7章で作成したメールフォームでは、送信ボタンをクリックした時に、メールアドレスが入っています。

FORMのプロパティを開いて、アクションの部分を cgi-bin/anketo.cgi と書き換えて保存しましょう。
(※メールフォームのHTMLからみたanketo.cgi への相対パス)

当然ですが、書き換えた後は転送を忘れずに。

anketo.cgi のカスタマイズ

anketo.cgi をメモ帳などのテキストエディタで開きましょう。

一番最初の行は、Perlへのパスを書きます。#!は消さないように。

例えば、Perlへのパスが /usr/bin/perl となっていたら、#!/usr/bin/perl となります。

10行目にsendmail のパスを指定するところがあります。サーバーで指定されているとおりに書きます。

15行目にメールの宛先を書きます。

ここまでできたら、保存しましょう。

そして、anketo.cgi と jcode.pl をWWWサーバーに転送します。

転送できたら、FTPツールを使って、anketo.cgi のパーミッション設定を 755 に変更します。
(→FTPツールの使い方

これで無事に、CGIを使ったメールフォームになりました。

サンプルCGIを使ったメールフォーム

送信されるメールの本文は以下の様な感じです。

-----------------------------------------------
(from) ふーみん
-----------------------------------------------
(mail_address) fuming@hpbuilder.net
-----------------------------------------------
(pc) 4
-----------------------------------------------
(os1) 1
-----------------------------------------------
(site) 2
-----------------------------------------------
(comment) サンプルのメールフォームです

しっかりしてください
-----------------------------------------------

メールを送った後のHTMLをカスタマイズする

上記のメールフォームを使って、メールを送った後、ブラウザに表示されるHTMLは非常に味気ないものです。

64行目からHTMLのタグらしきものが書いてありますので、CGIが動作することを確認してから、カスタマイズを始めてください。

\n というのが改行に使うためのものです。

PRINT "表示させたいHTML \n";

件名を入れたい

先ほどのメールフォームから送られたメールには件名が入っておらず、不便ですよね。迷惑メールに引っかかる可能性も高いです。

そこで、もう少し anketo.cgi をカスタマイズします。

17行目に

$subject = 'お問い合わせ';

56行目〜60行目を以下のように変更

&jcode'convert(*subject, 'jis');
&jcode'convert(*mail_msg, 'jis');
open(MAIL,"| $mailprog $mailto")|| die "Can't open $mailprog!\n";
print MAIL "Subject: $subject\n";
print MAIL "Content-type: text/plain;charset=\"ISO-2022-JP\"\n\n"; 
print MAIL $mail_msg;
close(MAIL);