メール送信フォームを作成する(その1・概要)
1.Webフォームの作成
Webフォームはホームページビルダー等のHTMLエディタで作成する。
例えば、こんな感じ。
<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<META http-equiv="Content-Style-Type" content="text/css">
<TITLE>テスト</TITLE>
</HEAD>
<BODY>
<FORM method="POST" name="フォーム名(適当でよい)" enctype="application/x-www-form-urlencoded" action="CGIスクリプトファイルを指定">
宛先<INPUT size="56" type="text" name="address"><BR>
件名<INPUT size="56" type="text" name="subject"><BR>
<BR>
内容
<BR>
<TEXTAREA rows="13" cols="61" name="naiyou"></TEXTAREA><BR>
<BR>
<INPUT type="submit" name="sousin" value="送信">
</FORM>
</BODY>
</HTML>
2.CGIの作成
まず、WebサーバがCGIを動かせる環境にあるかを確認する。
- perlがインストールされているか?
- perlのバージョンは?
- CGIの格納先(/home/cgi-bin 等)
次にCGIを作成。通常はperlを使用。ライブラリとしてjcode.pl(日本語エンコード・デコードライブラリ)、simaguni.pl(unicode対応日本語エンコード・デコードライブラリ)を使用している。
CGIスクリプトの例
#!/usr/bin/perl ←perlのインストール場所(事前に調べる)
require 'jcode.pl';
#フォームから送られた情報をデコード
(simaguni.pl使用)
$Encoding = 'euc';
if ($ENV{'REQUEST_METHOD'} eq "POST"){
read(STDIN, $query, $ENV{'CONTENT_LENGTH'});
}
else{
$query = $ENV{'QUERY_STRING'};
}
@paris = split(/&/, $query);
foreach $pair(@paris) {
($name, $value) = split(/=/,$pair);
if($value =~ /%u[0-9a-fA-F]{4}/){
require 'simaguni.pl';
if(simaguni::loadbook('./simaguni.pl')){
simaguni::decode(\$value,'euc');
simaguni::unloadbook();
}
}
elsif($value =~ m/%[eE][0-9a-fA-F]{1}%[0-9a-fA-F]{2}%[0-9a-fA-F]{2}%[eE][0-9a-fA-F]{1}%[0-9a-fA-F]{2}%[0-9a-fA-F]{2}/){
require 'simaguni.pl';
$value =~ tr/+/ /;
if(simaguni::loadbook8('./simaguni.pl')){
simaguni::decode8(\$value,'euc');
simaguni::unloadbook8();
}
}
else{
$value =~ tr/+/ /;
$value =~ s/%([A-Fa-f0-9][A-Fa-f0-9])/pack("C", hex($1))/eg;
jcode::convert(\$value, $Encoding);
}
$in{$name} = $value;
}
#sendmailコマンドでメール送信
$address = $in{'address'};
$subject = $in{'subject'};
$naiyou = $in{'naiyou'};
$sendmail = '/usr/lib/sendmail'; ←sendmailの場所は事前に確認
$From = '自分のメルアド';
$To = $address;
$tmpmail = << "END_MAIL";
From: $From
To: $To
Subject: $Subject
Content-Type: text/plain;
$naiyou
END_MAIL
jcode::convert(\$tmpmail,'jis');
open(MAIL,"| $sendmail -t -ba");
print MAIL $tmpmail;
close(MAIL);
CGIスクリプトは拡張子CGIのファイル名で保存する。
3.アップロード
作成したHTMLフォームとCGIをWebサーバにアップロードする。CGIはHTMLのFORMタグactionで指定した場所にアップロードする。
最終更新:2008年03月11日 01:25