超簡単フォームメール
これは「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;
超簡単チャット 前へ |
次へ 記事削除機能の実装 |