トップ > Perl Tips > メールフォームを作ろう!


 ■ メールフォームを作ろう!

今回は送信するためのスクリプトと、
入力するためのHTMLファイルを作りたいと思います。

メール送信の仕方もご覧ください。

<スクリプト>


#!/usr/bin/perl

#----------#
# 設定        #
#----------#

# sendmailへのパス
$sendmail = '/usr/sbin/sendmail';

# jcode.plへのパス
$jcode = './jcode.pl';

# メールの送信先
$to = 'xxx@yyy.ne.jp';

# メールの題名
$subject = 'メールフォームより';

# 送信完了のページから「戻る」でリンクされるURLを指定
$back = 'http://';

require $jcode;

if($ENV{REQUEST_METHOD} eq "POST"){
read(STDIN,$input,$ENV{CONTENT_LENGTH});
} else {
$input = $ENV{QUERY_STRING};
}

@inputdata = split(/&/, $input);

foreach $i (@inputdata) {
($name, $value) = split(/=/, $i);
$value =~ s/\+/ /g;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
$name =~ s/\+/ /g;
$name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
$query{$name} = $value;
$mail_body .= "$name : $value\n";
}

$mail_body =~ s/\x0D\x0A|\x0D|\x0A/\n/g;
$mail_body =~ s/(\n)\.(\n)/\1\.\.\2/g;

&jcode'convert(*mail_body,'jis');
&jcode'convert(*subject,'jis');

open(MAIL,"| $sendmail -t") || &error("sendmailの起動に失敗しました。");

print MAIL "To: $to\n";
print MAIL "From: $query{mail}\n";
print MAIL "Subject: $subject\n\n";
print MAIL "$mail_body\n";

close(MAIL) || &error("メールの送信に失敗しました。");

print "Content-type: text/html\n\n";
print "<HTML><HEAD>\n";
print "<TITLE>送信完了</TITLE>\n";
print "</HEAD><BODY>\n";
print "<P align=\"center\">正常に送信しました。</P>\n";
print "<P align=\"center\"><A HREF=\"$back\">戻る</A></P>\n";
print "</BODY></HTML>\n";
exit;

sub error {
print "Content-type: text/html\n\n";
print "<HTML><HEAD>\n";
print "<TITLE>Error</TITLE>\n";
print "</HEAD><BODY>\n";
print "<P align=\"center\">$_[0]</P>\n";
print "<P align=\"center\"><A HREF=\"javascript:history.back()\">戻る</A></P>";
print "</BODY></HTML>\n";
exit;
}



<HTMLファイル>(これは一例です)

<HTML>
<HEAD>
<TITLE>送信フォーム</TITLE>
<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
</HEAD>
<BODY>
<H1>メール送信フォーム</H1>
<FORM ACTION="sendmail.cgi" METHOD="POST">
お名前<BR>
<INPUT TYPE=text NAME="お名前" SIZE=30><P>
メールアドレス<BR>
<INPUT TYPE=text NAME="mail" SIZE=30><P>
URL<BR>
<INPUT TYPE=text NAME="URL" SIZE=50><P>
コメント<BR>
<TEXTAREA NAME="コメント" ROWS=6 COLS=50></TEXTAREA><P>
<INPUT TYPE="submit" VALUE="送信"> <INPUT type="reset" value="リセット"></FORM>
</BODY></HTML>
スクリプトを sendmail.cgi と名前を付けて保存します。
HTMLファイルは任意の名前で保存してください。
また、jcode.plを用意してください。


<解説>
○設定
・sendmailへのパス
sendmailへのパスを設定してください。

・jcode.plへのパス
用意したjcode.plへのパスを設定してください。

・メールの送信先
メールを送るアドレス(自分のアドレス)を設定してください。

・メールの題名
メールの件名を設定してください。

・送信完了のページから「戻る」でリンクされるURLを指定
メールを送信した後に表示されるページから戻るページを指定します。
トップページなどを指定しておくとよいでしょう。


スクリプトの大まかな流れとしては、

デコード、調整をする
  ↓
sendmailを開き、ヘッダーとともに送信
  ↓
送信完了を知らせるページを表示する。

こんな感じでしょうか。

○HTMLファイル
<FORM ACTION="sendmail.cgi" METHOD="POST">
のACTIONのところでスクリプトファイル名を指定します。
GETメソッドで送るのであれば、POSTをGETに変えてください。

フォームの
<INPUT TYPE=*** NAME="***" SIZE=***>
のNAMEでは、日本語も使えますが、
メールアドレスの入力枠はmailとしておいてください。

HTMLタグでわからないことがあればフォームに関するHTMLタグをご覧ください。

なお、メールは
項目名(name) : データ(value)
という形式で送られます。
変えるのであれば、
$mail_body .= "$name : $value\n";
の部分を変更してください。




トラックバック

このエントリーのトラックバックURL:
http://easycgi.xrea.jp/mt-tb.cgi/38