⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mail.txt

📁 a very userful email managing service
💻 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>&nbsp;&nbsp; </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>&nbsp;|&nbsp;<nobr><A HREF="../members.htm" TARGET="" STYLE="text-decoration: none;">Members</A></nobr>&nbsp;|&nbsp;<nobr><A HREF="signin" TARGET="" STYLE="text-decoration: none;">E-Mail</A></nobr>&nbsp;|&nbsp;<nobr><A HREF="../archive.htm" TARGET="" STYLE="text-decoration: none;">Archive</A></nobr>&nbsp;|&nbsp;<nobr><A HREF="../projectinfo.htm" TARGET="" STYLE="text-decoration: none;">Project&nbsp;Information</A></nobr>&nbsp;|&nbsp;<nobr><A HREF="../contact.htm" TARGET="" STYLE="text-decoration: none;">Contact&nbsp;Information</A></nobr>

<br>
<br>
&nbsp;</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 + -