📄 mail.txt
字号:
#!/usr/bin/perl -w
use CGI qw(:standard);
use Mail::POP3Client;
use CGI;
$q = new CGI;
@todelete=$q->param('todel');
($extra,$iduser)=split('=',$ENV{'HTTP_COOKIE'});
if(length($iduser)==0)
{
print "Location: http://www.myproject.com/service/signin\n\n"
}
else
{
dbmopen(%cookd,"/etc/httpddata/cookies.dat",0400);
if(defined($cookd{$iduser}))
{
($user,$pass)=split(':',$cookd{$iduser});
}
else {
print "Location: http://www.myproject.com/service/signin?error=yes\n\n"
}
dbmclose %cookd;
$host="server.myproject.com";
my $pop = new Mail::POP3Client(USER => $user,PASSWORD => $pass,HOST => $host,DEBUG => 0,AUTH_MOD => 'PASS');
my $count = $pop->Count;
if($count == -1) { die("Unable to read mailbox, there is someting wronge.");}
if(param('req') eq "view") {&viewmail; &shellout; exit;}
if(param('req') eq "fhead") {&fhead; &shellout; exit;}
if(param('req') eq "delete") {&delete;&redirect; exit;}
if(param('req') eq "send") {&send;&shellout; exit;}
if(param('req') eq "compose") {&compose;&shellout; exit;}
if(param('req') eq "reply") {&reply;&shellout; exit;}
&listletters;
&shellout;
exit;
sub redirect{
print "Location: http://www.myproject.com/service/mail\n\n";
}
sub delete{
$nmsg=$pop->Count;
foreach $j (@todelete)
{
$pop->Delete($j);
}
$pop->State();
$pop->Close();
}
sub fhead{
$i = param('id');
$message=qq(|<a href=mail?req=view&id=$i>Back</a>
<BR>Fullheader of message $i<BR>).
$pop->Head($i).
qq(<BR>);
}
sub viewmail{
$mnum = $pop->Count;
$i = param('id');
$new = $i+1;
$old = $i-1;
foreach ( $pop->Head( $i ) ) {
/^(Subject):\s+/i and $subject=$_;
/^(Date):\s+/i and $date=$_;
/^From\: (.+)$/i and $fromo=$_;
/^Sender\: (.+)$/i and $sender=$_;
/^To\: (.+)$/i and $to=$_;
/^Cc\: (.+)$/i and $ccaddr=$_;
$sender=~s/Sender://i;
# if(/MIME/){$mime="yes";}
}
if($old > 0 && $old <=$mnum){
$oldtag=qq(<a href="mail?req=view&id=$old">Older</a>);
}else{$oldtag=qq(Older);}
if($new > 0 && $new <= $mnum){
$newtag=qq(<a href="mail?req=view&id=$new"> Newer</a> );
}else{$newtag=qq(Newer);}
$fhead=qq(<a href="mail?req=fhead&id=$i">Full Header</a>);
$delmail=qq(<a href="mail?req=delete&todel=$i">Delete</a>);
$repy=qq(<a href="mail?req=reply&id=$i"> Reply</a>);
if($subject eq ""){$subject="No Subject";}
if($ccaddr eq ""){$break="";}
else {$break="<BR>";}
$message=qq(|$newtag|$oldtag|$fhead|$delmail|$repy
<BR>$fromo < $sender ><BR>
$to $break
$ccaddr<BR>
$subject<BR>
$date<BR><BR>).
$pop->Body( $i).
qq(<BR>);
}
sub listletters{
# use Mail::Address;
my $seti = 1;
my $nummessages = $pop->Count;
my $totalmessages;
$message=qq(
<br>
<form method="post" action="mail">
<H5>There are total $nummessages mails in your inbox</H5>
<input type="submit" name="Submit2" value="Delete Checked Messages">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr align="left">
<td class="colheader">From</td>
<td class="colheader">Subject</td>
<td class="colheader">Sent On</td>
</tr>
);
for ($i = $pop->Count; $i >= 1; $i--) {
&stripper($i);
}
$message.=<<_END_;
</table>
<input type="reset" name="Reset" value="Reset" class="txtfld">
<input type=hidden name="req" value="delete">
<input type="submit" name="Submit2" value="Delete Checked Messages" class="txtfld">
</form>
<p>
_END_
}
sub stripper {
my ($i)=@_;
my($date,$ATFL,$fromaddress,$to,$subject,$fromo)=("","","","","","");
foreach ( $pop->Head( $i ) ) {
/^From\: (.+)$/i and $fromo= $1;
/^Subject\: (.+)$/i and $subject=$1;
/^Date\: (.+)$/i and $date=$1;
/^To\: (.+)$/i and $to=$1;
}
if($subject eq ""){$subject="No Subject";}
$message.=qq(<tr align="left">
<td class="fromadd"><input type="checkbox" name="todel" value="$i">
$fromo</td>
<td class="subject"><a href="mail?req=view&id=$i">$subject $ATFL</a></td>
<td class="date">$date</td>
</tr>);
}
sub shellout {
print header;
print <<"DDD"
<html>
<head>
<meta http-equiv="Content-Language" content="en-us">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>Inbox</title>
<meta name="Microsoft Theme" content="nature 111, default">
<meta name="Microsoft Border" content="tlb, default">
</head>
<body background="../_themes/nature/nabkgnd.jpg" bgcolor="#FFFFCC" text="#333399" link="#990033" vlink="#006633" alink="#FF6600"><!--msnavigation--><table border="0" cellpadding="0" cellspacing="0" width="100%"><tr><td><!--mstheme--><font face="Trebuchet MS, Arial, Helvetica">
<center>
<h1>
<img src="../_derived/webmail.gif" width="600" height="60" border="0" alt="confirmation">
</h1>
<!--msthemeseparator--><p align="center"><img src="../_themes/nature/anarule.gif" width="600" height="10"></p></center>
<!--mstheme--></font></td></tr><!--msnavigation--></table><!--msnavigation--><table dir="ltr" border="0" cellpadding="0" cellspacing="0" width="100%"><tr><td valign="top" width="1%"><!--mstheme--><font face="Trebuchet MS, Arial, Helvetica">
<p>
<script language="JavaScript"><!--
MSFPhover =
(((navigator.appName == "Netscape") &&
(parseInt(navigator.appVersion) >= 3 )) ||
((navigator.appName == "Microsoft Internet Explorer") &&
(parseInt(navigator.appVersion) >= 4 )));
function MSFPpreload(img)
{
var a=new Image(); a.src=img; return a;
}
// --></script><script language="JavaScript"><!--
if(MSFPhover) { MSFPnav1n=MSFPpreload("../_derived/home_cmp_nature110_vbtn.gif"); MSFPnav1h=MSFPpreload("../_derived/home_cmp_nature110_vbtn_a.gif"); }
// --></script><a href="../index.htm" language="JavaScript" onmouseover="if(MSFPhover) document['MSFPnav1'].src=MSFPnav1h.src" onmouseout="if(MSFPhover) document['MSFPnav1'].src=MSFPnav1n.src"><img src="../_derived/home_cmp_nature110_vbtn.gif" width="140" height="60" border="0" alt="Home" name="MSFPnav1"></a><br><script language="JavaScript"><!--
if(MSFPhover) { MSFPnav2n=MSFPpreload("../_derived/up_cmp_nature110_vbtn.gif"); MSFPnav2h=MSFPpreload("../_derived/up_cmp_nature110_vbtn_a.gif"); }
// --></script><a href="signin" language="JavaScript" onmouseover="if(MSFPhover) document['MSFPnav2'].src=MSFPnav2h.src" onmouseout="if(MSFPhover) document['MSFPnav2'].src=MSFPnav2n.src"><img src="../_derived/up_cmp_nature110_vbtn.gif" width="140" height="60" border="0" alt="Up" name="MSFPnav2"></a><br><script language="JavaScript"><!--
if(MSFPhover) { MSFPnav3n=MSFPpreload("../_derived/members.htm_cmp_nature110_vbtn.gif"); MSFPnav3h=MSFPpreload("../_derived/members.htm_cmp_nature110_vbtn_a.gif"); }
// --></script><a href="../members.htm" language="JavaScript" onmouseover="if(MSFPhover) document['MSFPnav3'].src=MSFPnav3h.src" onmouseout="if(MSFPhover) document['MSFPnav3'].src=MSFPnav3n.src"><img src="../_derived/members.htm_cmp_nature110_vbtn.gif" width="140" height="60" border="0" alt="Members" name="MSFPnav3"></a><br><script language="JavaScript"><!--
if(MSFPhover) { MSFPnav4n=MSFPpreload("../_derived/archive.htm_cmp_nature110_vbtn.gif"); MSFPnav4h=MSFPpreload("../_derived/archive.htm_cmp_nature110_vbtn_a.gif"); }
// --></script><a href="../archive.htm" language="JavaScript" onmouseover="if(MSFPhover) document['MSFPnav4'].src=MSFPnav4h.src" onmouseout="if(MSFPhover) document['MSFPnav4'].src=MSFPnav4n.src"><img src="../_derived/archive.htm_cmp_nature110_vbtn.gif" width="140" height="60" border="0" alt="Archive" name="MSFPnav4"></a><br><script language="JavaScript"><!--
if(MSFPhover) { MSFPnav6n=MSFPpreload("../_derived/projectinfo.htm_cmp_nature110_vbtn.gif"); MSFPnav6h=MSFPpreload("../_derived/projectinfo.htm_cmp_nature110_vbtn_a.gif"); }
// --></script><a href="../projectinfo.htm" language="JavaScript" onmouseover="if(MSFPhover) document['MSFPnav6'].src=MSFPnav6h.src" onmouseout="if(MSFPhover) document['MSFPnav6'].src=MSFPnav6n.src"><img src="../_derived/projectinfo.htm_cmp_nature110_vbtn.gif" width="140" height="60" border="0" alt="Project Information" name="MSFPnav6"></a><br><script language="JavaScript"><!--
if(MSFPhover) { MSFPnav7n=MSFPpreload("../_derived/contact.htm_cmp_nature110_vbtn.gif"); MSFPnav7h=MSFPpreload("../_derived/contact.htm_cmp_nature110_vbtn_a.gif"); }
// --></script><a href="../contact.htm" language="JavaScript" onmouseover="if(MSFPhover) document['MSFPnav7'].src=MSFPnav7h.src" onmouseout="if(MSFPhover) document['MSFPnav7'].src=MSFPnav7n.src"><img src="../_derived/contact.htm_cmp_nature110_vbtn.gif" width="140" height="60" border="0" alt="Contact Information" name="MSFPnav7"></a>
</p>
<!--mstheme--></font></td><td valign="top" width="24"></td><!--msnavigation--><td valign="top"><!--mstheme--><font face="Trebuchet MS, Arial, Helvetica">
<H2> Welcome $user !</H2>
<a href="mail" > Inbox</a> | <a href="mail?req=compose" > compose </a>|<a href="logout" > Logout</a>
$message
<p> </p>
<!--mstheme--></font><!--msnavigation--></td></tr><!--msnavigation--></table><!--msnavigation--><table border="0" cellpadding="0" cellspacing="0" width="100%"><tr><td><!--mstheme--><font face="Trebuchet MS, Arial, Helvetica">
<center><!--msthemeseparator--><p align="center"><img src="../_themes/nature/anarule.gif" width="600" height="10"></p>
<p><small>
<nobr><A HREF="../index.htm" TARGET="" STYLE="text-decoration: none;">Home</A></nobr> | <nobr><A HREF="../members.htm" TARGET="" STYLE="text-decoration: none;">Members</A></nobr> | <nobr><A HREF="signin" TARGET="" STYLE="text-decoration: none;">E-Mail</A></nobr> | <nobr><A HREF="../archive.htm" TARGET="" STYLE="text-decoration: none;">Archive</A></nobr> | <nobr><A HREF="../projectinfo.htm" TARGET="" STYLE="text-decoration: none;">Project Information</A></nobr> | <nobr><A HREF="../contact.htm" TARGET="" STYLE="text-decoration: none;">Contact Information</A></nobr>
<br>
<br>
</small></p>
</center>
<!--mstheme--></font></td></tr><!--msnavigation--></table></body>
</html>
DDD
}
sub send{
$sendmail="/usr/sbin/sendmail -t";
dbmopen(%udata,"/etc/httpddata/comudata.dat",0400);
($fn,$ln)=split(':',$udata{$user});
dbmclose %udata;
$fromname=$user;
$cc=param('cc');
$cc =~ s/[ \t]+/, /g; # pack spaces and add comma
$realaddr=param('to');
$realaddr =~ s/[ \t]+/, /g; # pack spaces and add comma
$subject=param('sub');
$body=param('body');
open(MAIL,"| $sendmail") ||
&InternalError('Could not fork sendmail with -f switch');
# only print Cc if we got one
print MAIL "Cc: $cc\n" if $cc;
print MAIL <<EOM;
From: $fn $ln <$fromname\@myproject.com>
To: $realaddr
Reply-To: $fromname
Errors-To: $fromname
Sender: $fromname
Subject: $subject
$body
EOM
close(MAIL);
$message=qq(<H5>Mail is successfully sent);
}
sub compose{
($rec,$sub)=@_;
$message=qq(
<FORM ACTION="mail" METHOD=POST>
<P>To: <INPUT SIZE=40 NAME="to" Value=$rec >
<P>CC: <INPUT SIZE=40 NAME="cc">
<P>sub:<INPUT SIZE=40 NAME="sub" Value="$sub">
<P><TEXTAREA ROWS=20 COLS=60 NAME="body"></TEXTAREA><BR>
<INPUT TYPE=hidden NAME="req" VALUE="send">
<INPUT TYPE="submit" VALUE="Send">
<INPUT TYPE="reset" VALUE="Start over"><BR>
</FORM>
);
}
sub reply{
$i=param('id');
foreach ( $pop->Head( $i ) ) {
/^(Subject):\s+/i and $subj=$_;
/^Sender\: (.+)$/i and $rece=$_;
# if(/MIME/){$mime="yes";}
}
$subj=~s/subject://i;
$subj="Re:$subj";
$rece=~s/Sender://i;
&compose($rece,$subj);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -