在当今网络众横的时代,不管是网络高手还是网络新手,在节日时经常会收到一些远方朋友通过网上送来的电子贺卡,而你又知不知道这贺卡是如何生成的呢?很多免费贺卡的网站上都有“你也自己亲手为你的朋友选一张贺卡”的链接,只要填上名称、邮件地址即可让对方收到你的电子贺卡。再深入一些,其实这些贺卡完全通过CGI脚本程序来实现的,曾经拥有过个人主页(拥有CGI执行权)的网友可能深有体会,几乎所有的免费贺卡脚本程序都工作在Unix系统下,而那些使用 Windows NT
服务器的压根用不成,因为没有Unix下的SENDMAIL(为了区别两个不同的
软件,大写为Unix下的SENDMAIL服务器,小写为小林的 sendmail)来发邮件,包括反馈表邮件回执等都无法应用,后来国外有个程序员写了一个Blat,可以代替SENDMAIL的某些工作,对于反馈表邮件回执等一些小问题基本上得到解决,但在设置上却比较麻烦,必须在服务器上先安装好以及将动态链接库文件存放在WinNTSystem32目录等,一般的网友想实现都很困难。随着Internet的发展与普及,又有个程序员开发了一个新的作品Stalker's Mailers,这个程序在使用上效为简单,程序小功能显得也少了。小林在学习
Sockets过程中,也编了这样一个小程序,叫sendmail for NT,功能跟SMailets和Blat类似,仅支持简单的SMTP
协议,需要SMTP服务器的支持,正确的说应该是Client程序。在应用方面比 SENDMAIL要麻烦些,由于需要先建立临时文件,然后再通过Client程序发送。下面将介绍一个简单的贺卡CGI脚本程序的实现方法:
* card2.pl 文件
#!/usr/local/bin/perl
###############################################################
# Program - A Postcard - English version 1.0 for Unix #
# Written by Jason W. Maloney http://www2.bc.edu/~malonejr #
# ----------------------------------------------------------- #
# Program - A Postcard - Chinese version 1.0 for NT #
# Written by Lin's Xinglu http://www.netease.com/~lin #
###############################################################
# 本脚本文件URL
$cgi = "http://www.softsite.com.cn/cgi-bin/postcard/card2.pl";
# 图片文件URL
$basepic = "http://202.130.5.31/cgi-bin/postcard/";
# 贺卡文件URL
$baseurl = "http://www.softsite.com.cn/cgi-bin/postcard/";
# 贺卡文件绝对路径
$basedir = "c:\inetpub\wwwroot\download\cgi-bin\postcard";
# 设置贺卡保留天数
$days = '15';
# 设置sendmail for NT的临时文件(绝对路径)
$filename = "c:\inetpub\wwwroot\cgi-bin\postcard\post.txt";
# 设置Sendmail for NT的绝对路径
$mailprog = "c:\inetpub\wwwroot\cgi-bin\sendmail\sendmail.exe";
# 设置发卡邮递员E-Mail地址
$webmaster = "WebMaster@softsite.com.cn";
# 发送邮件服务器IP
$smtp = "168.160.65.138";
###############################################################
$html = '.html';
$i=0;
read(STDIN,$buffer,$ENV{'CONTENT_LENGTH'});
@pairs = split(/&/,$buffer);
foreach $pair (@pairs){
($name,$value) = split(/=/,$pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
$FORM{$name} = $value;
}
#############
# 预览贺卡
#############
if ($FORM{'action'} eq 'preview') {
############################################################
&no_email unless $FORM{'mailfrom'} && $FORM{'mailto'};
############################################################
$pic = $FORM{'picture'};
$picture = "$basepic$pic";
print "Content-Type: text/htmlnn";
print "<
HTML>n";
print "<TITLE
9
7
3
1
2
3
4
4
8
: