メール送信フォームを作成する(その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