[Edit][Create New]
[ IndexPage / ネットとプログラミング / CGI / 便利なスクリプト片(未整理) / submit.cgi ]

submit.cgi

#!/usr/local/bin/perl

# Copyright (C) 1995-1999 Canada Masaktz@Kade Kobo, Ltd. All rights reserved.
# Version. 1.00

require "./jcode.pl";
require "./init.pl";

# Sendmailを使う下準備
# sendmailのパスは適宜読み替えてください
$sendmail = '/usr/sbin/sendmail';

# Sendmailのチェック
&error("$sendmailが存在しません") unless -e $sendmail;
&error("$sendmailが実行できません") unless -x $sendmail;

# テンプレート・ファイルをオープン
open(TEMP,$template_dat)||&error("No template");

while(<TEMP>){
	chop;
	@template = split(/,/);

	# 各項目のキーを順番に@keysに格納
	push(@keys,$template[2]);

	# 第5フィールドにmailという単語があるもののキーだけを処理
	if($template[4] =~ /\bmail\b/i){
		$value = $param{$template[2]};
		# $contents変数に追加
		$contents .= "$template[0]: $value\n";
		if($template[2] eq 'email'){
			 # もし、一般的なE-Mailアドレスならば、From:行を作る
			$from = "$param{$template[2]}"
			   if($param{$template[2]} =~ /^[-_0-9a-z]+\@[-_0-9a-z]+\.[-_0-9a-z.]+$/);
		}
	}
	# 必須項目が入力されていなかった場合
	if ($template[4] =~ /\brequired\b/i
	 && $param{$template[2]} eq ""){
		print <<"---EOF---";
Content-Type: text/html

<HTML>
<HEAD><TITLE>ハローキティのハッピーメール/ユーザ登録-エラーです-</TITLE>
<LINK rel="stylesheet" href="style.css">
</HEAD>
<BODY BGCOLOR="#FFFFFF" background="img/user/backgnd.gif" text="#333333" link="#CC0033" vlink="#FF6633" alink="#00CCCC">
<DIV align="center">
  <P><IMG src="img/user/mailtit.gif" width="264" height="71" alt="ハローキティのハッピーメール"> 
  </P>
  <P><IMG src="img/user/tit_error.gif" width="188" height="18" alt="エラーがおきています。"></P>

項目「$template[0]」がエラーになっています。ブラウザの「戻る」ボタンで戻って
やり直してください。
<HR>
  <P align="center"><A href="../index.html"><IMG src="img/user/backtomain.gif" width="173" height="25" border="0" alt="ホームページに戻る"></A></P>
  <P align="center"><BR>
  </P>
</DIV>
</BODY>
</HTML>

---EOF---
		exit;
	}
}

close(TEMP);

# テンプレートの順番に項目を処理する
foreach(@keys){
	# 項目の値を得る
	$value = $param{$_};

	# カンマはフィールドの区切りに使うので、ピリオドに置換する
	$value =~ s/,/./g;
	# 同様に改行を<BR>タグに置き換える
	$value =~ s/\r?\n/<BR>/g; 
	push(@values,$value); # 値を順番に@valueに格納する
}

open(LOG,">>$log_dat") || &error("Can't open log.dat");
flock(2,LOG);
# カンマ区切りでデータを出力
print LOG join(",",@values);
print LOG "\n";
close(LOG);

# Thankyouメッセージを出力する

$tmp =  <<"-----EOF-----";
Content-Type: text/html

<HTML>
<HEAD><TITLE>ハローキティのハッピーメール/ユーザ登録-どうもありがとう-</TITLE>
<LINK rel="stylesheet" href="style.css">
</HEAD>
<BODY BGCOLOR="#FFFFFF" background="img/user/backgnd.gif" text="#333333" link="#CC0033" vlink="#FF6633" alink="#00CCCC">
<DIV align="center">
  <P><IMG src="img/user/mailtit.gif" width="264" height="71" alt="ハローキティのハッピーメール"> 
  </P>
  <P><IMG src="img/user/tit_thankyou.gif" width="151" height="18" alt="どうもありがとう。"></P>
  <P class="text" align="center">確かに受付しました。</P>
<TABLE><TR><TD>
<PRE>
$contents
</PRE>
</TD></TR></TABLE>

<A HREF="$ENV{HTTP_REFERER}">戻る</A>
  <P align="center"><BR>
  </P>
</DIV>
</BODY>
</HTML>
-----EOF-----

&jcode'euc2sjis(*tmp);
print $tmp;

# メールを送信する
if($contents ne "" && $to_address ne ""){ # 送信するものがなければ送信しない
	# まず、文字コードを変換しておく
	&jcode'euc2sjis(*contents);
	open(MAIL,"| $sendmail -t -n -oi $to_address") || &error("Can't open $sendmail");
	$from = $from || $to_address;
	print MAIL <<"---EOF---";
From: $from
To: $to_address
Subject: via Form-No.$template
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-2022-jp
Content-Transfer-Encoding: 7bit

Form-No.$template
------------------
$contents
---EOF---
	close(MAIL);
}