CGIにしかできない芸当のひとつにフォームからのメール送信があげられます。掲示板、アンケート、訪問帳などへの記入をメールの形で送信するものです。JavaScriptでもメール送信は可能ですが、Javaのメール送信機能はユーザーのパソコンに入っているメールソフトを利用することで実現しています。これに対してCGIは、プロバイダのサーバーのメール送信コマンドsendmailを利用して、サーバーからメールを送信することができます。ただし、私が以前加入していたinfowebのようにプロバイダーの中には、sendmailコマンドの使用を禁止しているところもあるようです。
ではサーバーからのメール送信のCGIプログラムについて解説しましょう。
#!/usr/local/bin/perl
$sendmail
= '/usr/lib/sendmail';
$myaddress = '○○@×××.or.jp';
require
'jcode.pl';
$message = <<hiyadoc;
Subject: A comment to
Web
テストメッセージです。
hiyadoc
&jcode'convert(*message,'jis');
open(MAIL,"|$sendmail
$myaddress");
print MAIL
$message;
close(MAIL);
まず、1行目の#!/usr/local/bin/perlは、例によってperl言語へのパスですから、サーバーによっては書き換えが必要になる部分です。次に、$sendmail
=
'/usr/lib/sendmail';の部分が、プロバイダーのサーバーでのsendmailへのパスです。この部分もプロバイダーによっては異なる場合もあるそうです。
$myaddress
= '○○@×××.or.jp';のところには、メールの送信先を指定します。
require
'jcode.pl';は、漢字変換ライブラリであるjcode.plを使用することを宣言しています。なお、jcode.plもこのcgiプログラムと同じディレクトリに転送する必要があるのでお忘れなく。
$message
= <<hiyadoc;
Subject: A comment to
Web
テストメッセージです。
hiyadoc
の部分がメールの本体です。ヒヤドキュメントを利用して$message の変数にメールの本文を挿入してますね。Subject:
はインターネットメールのタイトルです。その下に書かかれた「テストメッセージです。」というところがメールのメッセージです。
&jcode'convert(*message,'jis');の部分が漢字コードをjisコードへ変換する命令です。
open(MAIL,"|$sendmail
$myaddress");
print MAIL
$message;
close(MAIL);
の3行がメール送信を実行している部分です。このプログラムだとあらかじめ入力されたメッセージしか送信できません。アンケートなどのフォームからのメール送信をおこなうには、画面表示その2で学んだテクニックと組み合わせる必要があります。