超簡単フォームメール

 これは「Treky コモちゃん」のホームページでも紹介しているスクリプトなんですが、こちらで正式に解説を付けてご紹介したいと思います。

 まずメールを書き込むHTMLファイルformmail.htmと、CGIプログラム本体であるformmail.cgiが必要です。又、今回もフォームのデータをデコードするcgi-lib.pl を使います。何しろ便利ですから(^^ゞ又、日本語変換用のjcode.pl も必要です。

 尚、今回も以下のファイルを、CGIを許可されているディレクトリ内に一緒に配置したと想定します。各ファイルのパーミッションは以下のように変更して下さい。

formmail.htm ・・・644 formmail.cgi ・・・755 cgi-lib.pl ・・・644 jcode.pl ・・・644

このフォームメールの機能の概略

 非常にシンプルなフォームメールです。サーバーのsendmailを直接呼び出して実行するので、このsendmailを使えないようにしているサーバーでは動作しません。一応、メール送信後にその送信内容を表示します。

記事書き込み用HTMLファイルの内容

 送信する内容を書き込みたいHTMLファイルのソースコードは、下のサンプルページを立ち上げた際に、ブラウザのメニューからソースの表示を選んで見て下さい。

スクリプトの内容

 フォームメールはメールの送信だけでなく、注文やアンケートの収集などにも当然使えるスクリプトです。色々改造して有効利用して下さい。

スクリプト内容  
#!/usr/local/bin/perl うちのサーバーでは「#!/usr/bin/perl」です。
(この後、必ず1行空けること。)  
require './cgi-lib.pl'; cgi-lib.plライブラリの要求。同じディレクトリ内に置いていると想定。相対パスを使用。
require './jcode.pl'; jcode.plライブラリの要求。これも、同じディレクトリ内に置いていると想定。
&ReadParse(*in); 連想配列名の指定
$name = "$in{'name'}"; 連想配列から各要素を取得する。
$from = "$in{'from'}";  
$subject = "$in{'subject'}";  
$body = "$in{'body'}";  
$to = '*****@*****.**.jp'; ここに送信先のメールアドレスを指定。もしここも変数扱いにすれば、送信先も指定出来るようになる。
#送信前処理  
&jcode'convert(*name,'jis'); 文字化け防止の為に、入力された文字列をJISコードに変換します。
&jcode'convert(*subject,'jis');
&jcode'convert(*body,'jis');  
#sendmailでメール送信  
open(MAIL, "| /usr/sbin/sendmail -t"); sendmailに「|」パイプでリダイレクトし、ハンドルMAILに必要なデータを入力します。
print MAIL "To: $to\n";  
print MAIL "From: $from\n";  
print MAIL "Subject: $subject\n"; 注文フォームなどに使う場合は、ここのsubjectの内容を「***注文フォームから」とかに固定すればいいでしょう。当然HTMLファイルのフォームタグ内での設定になります。
print MAIL "Content-Type: text/plain;\n\n";  
print MAIL "お名前:$name\n"; 注文フォームなどで項目が多い場合は、この部分で処理します。色々改造して見て下さい。
print MAIL "本文:$body\n";
close(MAIL); MAILをcloseすると、sendmailにリダイレクトされて、メールが送信されます。
#HTML表示の前処理  
&jcode'convert(*name,'sjis'); WindowsのHTML表示で文字化けするので、SJISコードに再度変換します。
&jcode'convert(*subject,'sjis');
&jcode'convert(*body,'sjis');  
$body =~ s/[\r\n,\n]/<BR>/g; 改行コードを<BR>に変換します。パターン結合演算子置換演算子を使っています。
#HTMLに表示  
print "Content-type: text/html\n\n";  
print "<HTML><BODY>\n";  
print "以下のメールを送信しました<HR>";  
print "お名前: $name\n<BR>";  
print "メールアドレス: $from\n<BR>";  
print "題目: $subject\n<BR>";  
print "本文: $body\n<BR>";  
print "</BODY></HTML>\n";  
exit;  

<サンプルだよ!>

スクリプトの全体像

 分かり易いように、上のサンプルスクリプトのソース全体を示します。実際には処理の流れがつかみ易いように、タブで字下げをして処理の塊を区別できるようにしています。

#!/usr/bin/perl

#セッティング
require '../cgi-lib.pl';
require '../jcode.pl';

&ReadParse(*in);

$name = "$in{'name'}";
$from = "$in{'from'}";
$subject = "$in{'subject'}";
$body = "$in{'body'}";
$to = 'komochan@komonet.ne.jp';

#送信前処理
&jcode'convert(*name,'jis');
&jcode'convert(*subject,'jis');
&jcode'convert(*body,'jis');

#sendmail
open(MAIL, "| /usr/sbin/sendmail -t");
print MAIL "To: $to\n";
print MAIL "From: $from\n";
print MAIL "Subject: $subject\n";
print MAIL "Content-Type: text/plain;\n\n";
print MAIL "お名前:$name\n";
print MAIL "本文:$body\n";
close(MAIL);

#HTML表示の前処理
&jcode'convert(*name,'sjis');
&jcode'convert(*subject,'sjis');
&jcode'convert(*body,'sjis');
$body =~ s/[\r\n,\n]/<BR>/g;

#HTMLに表示
print "Content-type: text/html\n\n";
print "<HTML><BODY>\n";
print "以下のメールを送信しました<HR>";
print "お名前:$name\n<BR>";
print "メールアドレス:$from\n<BR>";
print "題目:$subject\n<BR>";
print "本文:$body\n<BR>";
print "</BODY></HTML>\n";

exit;

超簡単チャット 前へ

HOME

次へ 記事削除機能の実装