Perl入門   No.23


6.4 フォームを使ってメールを送信する
 
 ホームページを作って運用していると、閲覧者から感想などを言ってもらいたいときがあります。そのような時に活用出来るでしょう。また記入ボードを工夫すれば、アンケートなども作れます。(同じことは、mailto: でも出来ますが、ブラウザの送信フォームを利用するよりも格調高く作ってみましょう)
 
メッセージ記入ボードを作る
 
./html/mail.html
<! mail.html>
<html>
<head>
<title>メール送信</title>
</head>
<body>
<center>
ホームページ管理者へのメッセージ
</center>
<FORM METHOD = POST ACTION = "./cgi-bin/mail.cgi">
あなたの氏名:
<input type = text name = name size=20>
あなたのmail address:
<input type = text name= address size=40>
Subject :
<input type = text name = subject size=20>
メッセージ:
<TEXTAREA name=message cols=60 rows=10></TEXTAERA>
<input type=submit value="送信">
</FORM>
</body>
</html>
 
送信用CGI
 
./cgi-bin/mail.cgi
#!/usr/bin/perl

# mail.cgi  From mail.html
# 途中までは、掲示板と同じ

require "cgi-lib.pl";
require "jcode.pl";

&ReadParse;

$name = $in{"name"};
&jcode'convert(*name,"jis");

if($name eq ""){
    print "あなたの名前を記入してください";
}

$mail = $in{"mail"};

if($mail eq ""){
    print "あなたのmail address を記入してください";
}

$subject = $in{"subject"};
&jcode'convert(*subject,"jis");

if($subject eq ""){
     print "subjectを記入してください";
}

 $message = $in{"message"};
 &jcode'convert(*message,"jis");

 $message =~ s/[\r\n,\n]/<br>/g;

 if($message eq ""){
 print "メッセージを記入してください";
 }

 # mail送信 パイプ機能をつかってsendmailに送る。
 # sendmailの場所はサーバによって異なりがあるので、
 # 環境に合わせたパスを設定すること
 # whereis で所在が表示される

open(MAIL, "| /usr/sbin/sendmail -t ");
print MAIL "To: 管理者のmail address";
print MAIL "From:send\n";
print MAIL "Subject:$subject\n";
print MAIL "Content-Type:text/plain\n\n";
print MAIL "ホームページ閲覧者からのmailです\n";
print MAIL "$name $mail\n";
print MAIL "$message\n";
close(MAIL);
 
注:パイプ機能 UNIXやLinux、昔のMS DOSにもありましたが、最初に処理したものをもう一つ別の処理をしたい場合、二回に分けて行うのではなくて、一気に実行する方法です。
例えば、ディレクトリのファイルをアルファベット順に並び替えて表示する。
% ls -l | sort
 
というようにします。
 
 
先ほどの掲示板と組み合わせると、メッセージ記入時に、記入者本人や管理者にメールで知らせることが出来ます。書き込み通知になったり、偽のメールアドレス防止などのセキュリティ対応にもなりますので、工夫してみてください。またアンケート調査に利用するなど、用途は様々です。