cgi中的邮件发送器 |
|
#!/usr/bin/perl
#以二进制模式传送附件。 binmode(STDIN); binmode(STDOUT); binmode(STDERR); #sender.pm模块位置 $ProgDir="c:\\httpd\\htdocs\\cgi-bin\\clmail"; #附件目录 $AttachDir="c:\\worktemp\\"; #发信按钮图像 $MailButton='http://127.0.0.1/mailimage/mail_b.JPG'; #附件按钮图像 $AttachButton='http://127.0.0.1/mailimage/attach_b.JPG'; #页面标题 $title="免费邮件"; #SMTP服务器 $SmtpSever='192.192.194.1'; #这是一个虚构的服务器,请使用你的发信服务器代替它。 #ShowAttachForm(); #sender模块位置 push(@INC,$ProgDir); my($From,$To,$Subject,$Cc,$Bcc,$AttachFile,$MailContent,$AttachNum,$AttachFile1,$AttachFile2,$AttachFile3); use CGI; $input=new CGI; if($input->param('attachbutton.x') ne ""){ &ReadInput; ShowAttachForm($From,$To,$Subject,$Cc,$Bcc,$AttachFile,$MailContent,$AttachNum,$AttachFile1,$AttachFile2,$AttachFile3,0); } #($ENV{'QUERY_STRING'} eq 'showattach') and &ShowAttachForm; #&ShowAttachForm; if($input->param('showmailform') eq 'yes') { &ShowMailForm; exit; } if($input->param('beattachfile') eq 'yes'){ &AttachFile; exit; } if ( $input->param('mailbutton.x') ne '' ) { #&ReadInput; &SendMail; exit; } &ShowMailForm; sub print_head{ print<<"EOF"; content-type:text/html\n <html><head><title>$title</title></head> <body> EOF } sub print_foot{ print<<"EOF"; </body> </html> EOF } ############################################################################ sub ShowAttachForm #4/14/00 4:02PM ############################################################################ { my ($From,$To,$Subject,$Cc,$Bcc,$AttachFile,$MailContent,$AttachNum,$AttachFile1,$AttachFile2,$AttachFile3,$TooMany)=@_; &print_head; if ($TooMany eq 1) { print<<"EOF"; <p><strong><font size="4" color="#FF0000">对不起,附件不能超过3个,本附件不能传送。</font></strong></p> EOF } print<<"EOF"; <p><font size="3" color="#008000">按以下步骤发送附件:</font></p> <form action="$ENV{'SCRIPT_NAME'}" method="post" align="center" ENCTYPE="multipart/form-data"> <input type="hidden" name="beattachfile" value="yes"><input type="hidden" name="from" value="$From"><input type="hidden" name="to" value="$To"><input type="hidden" name="subject" value="$Subject"><input type="hidden" name="attachfile" value="$AttachFile"><input type="hidden" name="cc" value="$Cc"><input type="hidden" name="bcc" value="$Bcc"><input type="hidden" name="mailcontent" value="$MailContent"><input type="hidden" name="attachnum" value="$AttachNum"><input type="hidden" name="attachfile1" value="$AttachFile1"><input type="hidden" name="attachfile2" value="$AttachFile2"><input type="hidden" name="attachfile3" value="$AttachFile3"><table border="0" cellpadding="0" cellspacing="0" width="57%" height="76" style="font-size: 9pt; letter-spacing: 2px"> <tr> <td width="50%" height="18">1、在以下框中点击“浏览”并在随后弹出的对话框中选择附件。</td> </tr> <tr> <td width="50%" height="1"><input type="file" name="newfile" size="30"></td> </tr> <tr> <td width="50%" height="18">2、点击“粘贴”键,将附件贴到邮件上。<input type="submit" value="粘贴"></td> </tr> </table> </form> <form action="$ENV{'SCRIPT_NAME'}" method="post" align="center"> <input type="hidden" name="showmailform" value="yes"><input type="hidden" name="from" value="$From"><input type="hidden" name="to" value="$To"><input type="hidden" name="subject" value="$Subject"><input type="hidden" name="attachfile" value="$AttachFile"><input type="hidden" name="cc" value="$Cc"><input type="hidden" name="bcc" value="$Bcc"><input type="hidden" name="mailcontent" value="$MailContent"><input type="hidden" name="attachnum" value="$AttachNum"><input type="hidden" name="attachfile1" value="$AttachFile1"><input type="hidden" name="attachfile2" value="$AttachFile2"><input type="hidden" name="attachfile3" value="$AttachFile3"><table style="font-size: 9pt; letter-spacing: 2px" width="435" cellspacing="0" cellpadding="0"> <tr> <td width="431" height="18">3、如有多个附件,重复以上步骤。</td> </tr> <tr> <td width="431" height="18">4、点击“完成”,以完成附件操作。<input type="submit" value="完成"></td> </tr> <tr> <td width="431" height="18"><font size="3" color="#008000">附件列表:</font><p><select name="fj" size="3"> <option value="AttachFile1">$AttachFile1</option> <option value="AttachFile2">$AttachFile2</option> <option value="AttachFile3">$AttachFile3</option> </select></td> </tr> </table> </form> EOF &print_foot; exit; } ##ShowAttachForm ############################################################################ sub ReadInput #4/14/00 2:34PM ############################################################################ { $From= $input->param('from'); $To=$input->param('to'); $Subject=$input->param('subject'); $Cc=$input->param('cc'); $Bcc=$input->param('bcc'); $AttachFile=$input->param('attachfile'); $MailContent=$input->param('mailcontent'); $AttachNum=$input->param('attachnum'); $NewFile=$input->param('newfile'); $AttachFile1=$input->param('attachfile1'); $AttachFile2=$input->param('attachfile2'); $AttachFile3=$input->param('attachfile3'); } ##ReadInput ############################################################################ sub SendMail #4/13/00 10:14AM ############################################################################ { &ReadInput; #读入附件信息 if($AttachNum ne ""){ @AttachFileName=split(/;/,$AttachFile);} use Sender; $Send = new Sender({from=>$From, smtp=>$SmtpSever}); if ( !( ref $Sender) =~ /Sender/i ) { die $Sender::Error; } $Send->OpenMultipart({to=>$To, subject=>$Subject, replyaddr=>$Cc}); $Send->Body; $Send->SendLine($MailContent); if ($AttachNum ne "") { for ( $i=1; $i<=$AttachNum; $i++) { $Send->SendFile({description=>'邮件附件', encoding=>'Base64', disposition=>"attachment;filename=$AttachFileName[$i-1]", file=>"$AttachDir$AttachFileName[$i-1]"}); } } $Send->Close; #&print_head; #print<<"EOF"; #$From,$To,$Subject,$Cc,$Bcc,$AttachFile,$MailContent,$AttachNum,$SmtpSever #EOF #&print_foot; if ($Send->{'error'} <0 ) { mail_error('i',$Send->{'error'}); } &ShowMailSuccess; } sub mail_error #3/24/00 4:24PM { my ($user,$errorCode)=@_; &print_head; ($errorCode eq -1) and print "SMTP错误代码:-1"; ($errorCode eq -2) and print "SMTP错误代码:-2"; ($errorCode eq -3) and print "SMTP错误代码:-3"; ($errorCode eq -4) and print "SMTP错误代码:-4"; ($errorCode eq -5) and print "SMTP错误代码:-5"; ($errorCode eq -6) and print "SMTP错误代码:-6"; ($errorCode eq -7) and print "SMTP错误代码:-7"; ($errorCode eq -8) and print "SMTP错误代码:-8"; ($errorCode eq -9) and print "SMTP错误代码:-9"; ($errorCode eq -10) and print "SMTP错误代码:-10"; ($errorCode eq -11) and print "SMTP错误代码:-11"; ($errorCode eq -12) and print "SMTP错误代码:-12"; &print_foot; exit; } ############################################################################ sub ShowMailSuccess #4/15/00 7:46PM ############################################################################ { &print_head; print<<"EOF"; 成功发信 EOF &print_foot; exit; } ##ShowMailSuccess ############################################################################ sub AttachFile #4/13/00 4:04PM ############################################################################ { &ReadInput; ($AttachNum >= 3) and (ShowAttachForm($From,$To,$Subject,$Cc,$Bcc,$AttachFile,$MailContent,$AttachNum,$AttachFile1,$AttachFile2,$AttachFile3,1)); my $AbsName = $NewFile; $AbsName =~ s!^.*(\\|\/)!!; open (FILE, ">$AttachDir$AbsName"); binmode(FILE); while (my $bytesread = read($NewFile, my $buffer, 1024)) { print FILE $buffer; } close (FILE); $AttachFile .= $AbsName.';'; $AttachNum += 1; if ($AttachNum eq 1) {$AttachFile1=$AbsName;} if ($AttachNum eq 2) {$AttachFile2=$AbsName;} if ($AttachNum eq 3) {$AttachFile3=$AbsName;} ShowAttachForm($From,$To,$Subject,$Cc,$Bcc,$AttachFile,$MailContent,$AttachNum,$AttachFile1,$AttachFile2,$AttachFile3,0); } ############################################################################ sub ShowMailForm #4/13/00 4:50PM ############################################################################ { #my ($From,$To,$Subject,$Cc,$Bcc,$AttachFile,$MailContent,$AttachNum) = @_; &ReadInput; &print_head; print<<"EOF"; <form action="$ENV{'SCRIPT_NAME'}" align="center" method="post"> <input type="hidden" name="attachnum" value="$AttachNum"><input type="hidden" name="attachfile1" value="$AttachFile1"><input type="hidden" name="attachfile2" value="$AttachFile2"><input type="hidden" name="attachfile3" value="$AttachFile3"> <table border="0" cellpadding="0" cellspacing="0" width="69%"> <tr> <td width="22%" align="right" bgcolor="#008000"><font color="#FFFFFF">发信人:</font></td> <td width="78%" bgcolor="#F0FCC0"><input type="text" name="from" value="$From" size="38"></td> </tr> <tr> <td width="22%" align="right" bgcolor="#008000"><font color="#FFFFFF">收件人:</font></td> <td width="78%" bgcolor="#F0FCC0"><input type="text" name="to" value="$To" size="38"></td> </tr> <tr> <td width="22%" align="right" bgcolor="#008000"><font color="#FFFFFF">主题:</font></td> <td width="78%" bgcolor="#F0FCC0"><input type="text" name="subject" value="$Subject" size="38"></td> </tr> <tr> <td width="22%" align="right" bgcolor="#008000"><font color="#FFFFFF">抄送:</font></td> <td width="78%" bgcolor="#F0FCC0"><input type="text" name="cc" value="$Cc" size="38"></td> </tr> <tr> <td width="22%" align="right" bgcolor="#008000"><font color="#FFFFFF">暗送:</font></td> <td width="78%" bgcolor="#F0FCC0"><input type="text" name="bcc" value="$Bcc" size="38"></td> </tr> <tr> <td width="22%" align="right" bgcolor="#008000"><font color="#FFFFFF">附件:</font></td> <td width="78%" bgcolor="#F0FCC0"><input type="text" name="attachfile" value="$AttachFile" size="38"></td> </tr> <tr> <td width="22%" align="right"> </td> <td width="78%" valign="bottom" align="left" ><input alt="发信" name="mailbutton" src="$MailButton" type="image" > <input alt="附件" name="attachbutton" src="$AttachButton" type="image" > </td> </tr> <tr> <td width="22%" align="right">邮件正文:</td> <td width="78%"></td> </tr> <tr> <td width="100%" colspan="2" align="center"><textarea rows="11" name="mailcontent" cols="47">$MailContent</textarea></td> </tr> </table> </form> EOF &print_foot; } ##ShowMailForm |