例えば、次のような HTML 文書にて、Webからの簡易メイル送信サービスを行うことができます。
<HTML>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title> simple mail </title>
</head>
<BODY BGCOLOR="#99ffff">
<CENTER><H1> simple mail </H1> </CENTER>
<FORM METHOD="POST" ACTION="form-mail.cgi">
<OL>
<LI>あなたのお名前: <INPUT TYPE="text" NAME="realname" size="30"> <br>
<LI>あなたのメイルアドレス: <INPUT TYPE="text" NAME="username" SIZE="30" VALUE="hogehoge@isc.meiji.ac.jp"> <br>
<LI>コメント記入欄:<br> <TEXTAREA NAME="comments" ROWS="9" COLS="60" ></TEXTAREA>
</OL>
<UL>
<INPUT TYPE="reset" VALUE=" 入力項目のRESET "> <INPUT TYPE="submit" VALUE=" 入力の終了(送信)">
</UL>
</FORM>
</BODY>
</HTML>
なお、form-mail.cgi は次のような Perlスクリプトです。
#!/usr/bin/perl ←必ずこの通り書いてください
$to = 'ex12345@isc.meiji.ac.jp';
$mailprog = "/usr/lib/sendmail $to >/dev/null 2>&1";
print "Content-type: text/html\n\n";
print "<HTML><Head><Title>Thank you</Title></Head>\n";
print "<Body><H1>Thank you</H1>\n";
print "Thank you for sending mail to <I>$to</I>!<P>";
print "</BODY></HTML>\n";
# Get the input
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
# Split the name-value pairs
@pairs = split(/&/, $buffer);
foreach $pair (@pairs)
{
($name, $value) = split(/=/, $pair);
# Un-Webify plus signs and %-encoding
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex(1ドル))/eg;
# Uncomment for debugging purposes
# print "Setting $name to $value<P>";
$FORM{$name} = $value unless $name != "comments" && &CGI_is_danger_arg($value);
}
# If the comments are blank, then give a "blank form" response
&blank_response unless $FORM{'comments'};
open (MAIL, "|$mailprog") || die "Can't open $mailprog!\n";
print MAIL "Reply-To: $FORM{'username'} ($FORM{'realname'})\n";
print MAIL "Subject: WWW comments (Forms submission)\n\n";
print MAIL "名前: $FORM{'username'} ($FORM{'realname'})\n\n";
print MAIL "-<begin>------------------------------------------------\n";
print MAIL "$FORM{'comments'}\n";
print MAIL "-<end>--------------------------------------------------\n\n";
close (MAIL);
# ------------------------------------------------------------
# subroutine blank_response
sub blank_response
{
print "Your comments appear to be blank, and thus were not sent. ";
exit;
}
# ------------------------------------------------------------
# check CGI args
sub CGI_is_danger_arg
{
local($cgival)=@_;
return 1 if ($cgival =~ /[;`<>\|&\*]/); #danger
return 0; #safe
}