构建简单的Webmail系统
这是一段Web Mail的示范代码,功能不是很强,但是结构还比较完整,主要的功能如查看文件夹,查看信件,回复,写信都有。但是程序中没有考虑附件解读和发送的问题。 (原文在 这里)。仅推荐给希望了解Webmail编程的网友做个参考。更加完善的Webmail请大家到 这里查找。
请注意:程序中使用了http认证功能,此功能需配合apache服务器使用。




--------------------------------------------------------------------------------
将以下代码分别存为 index.php3, imapfuncs.phl
配置imapfuncs.phl文件中的$M_HOST = "localhost"; $M_MAILSERVER = "transit.fast.no";
然后浏览 index.php3 即可. 
--------------------------------------------------------------------------------
index.php3

<?PHP
/* $Id: index.php3,v 1.3 1999/04/14 12:12:32 borud Exp $ */

/* load the IMAP library functions we\'ve written */
include("imapfuncs.phl");

m_login($m);

?>
<HTML>
<HEAD>
<TITLE><?PHP echo "$M_SYSNAME"?></TITLE>
</HEAD>
<BODY bgcolor=#AAAAAA text=#000000 link=#440000 vlink=#440000 alink=#FF00FF>
<H1 ALIGN=CENTER><?PHP echo "$M_SYSNAME"?></H1>
<HR SIZE=1 NOSHADE>

<P>
<?PHP
if ($cmd == "delete") {
m_delete($marked$m);
m_list($m);
}

elseif (
$cmd == "display") {
m_display($n$m);
}

elseif (
$cmd == "compose" || $cmd == "reply") {
m_compose($n$m);
}

elseif (
$cmd == "send") {
m_send($to$subject$body);
m_list($m);
}

else {
m_list($m);
}
?>

<P>

<HR SIZE=1 NOSHADE>
<?PHP echo "User: $PHP_AUTH_USER"?>

</BODY>
</HTML>






--------------------------------------------------------------------------------
imapfuncs.phl

<?PHP /* -*-C++-*- */

/* $Id: imapfuncs.phl,v 1.4 1999/04/14 12:12:32 borud Exp $ */

/* configurable parameters */


$M_HOST "localhost";
$M_MAILSERVER "transit.fast.no\";

$M_COLOR_ODD = "
#CCCCCC";
$M_COLOR_EVEN "#EEEEEE";
$M_COLOR_HEAD "#AAAAFF";
$M_COLOR_BG "#FFFFFF";


/* globals */
$M_PORT 143;
$M_SERVICE "imap";
$M_SYSNAME "Simple PHP3 IMAP Interface 1.0";
$M_MBOX "{$M_HOST:$M_PORT/$M_SERVICE}";
$M_REALM "IMAP Interface";
$MBOX false;

/* functions */

function m_login ($mailbox '')
{
global 
$MBOX$M_REALM;
global 
$PHP_AUTH_USER$PHP_AUTH_PW;

if (
$MBOX) {
return 
true;
}

if (! 
$PHP_AUTH_USER) {
m_reject($M_REALM);
}

$MBOX = @imap_open(m_mailbox_name($mailbox), $PHP_AUTH_USER$PHP_AUTH_PW);

if (! 
$MBOX) {
m_reject($M_REALM);
}

return 
true;
}


function 
m_list($mailbox '')
{
global 
$MBOX$PHP_SELF;
global 
$M_COLOR_ODD$M_COLOR_EVEN$M_COLOR_HEAD$M_COLOR_BG;

/* if not logged into server, do so */
if (! $MBOX) {
if (! 
m_login($mailbox)) {
return 
false;
}
}

$num imap_num_msg($MBOX);

echo 
"<FORM ACTION=$PHP_SELF TYPE=POST>\n";
echo 
"<CENTER><TABLE BORDER=0 CELLSPACING=0 CELLPADDING=1 WIDTH=90%>\n";

echo 
"<TR ALIGN=LEFT BGCOLOR=$M_COLOR_HEAD>";
echo 
"<TH> </TH><TH>From</TH><TH>Subject</TH><TH>Date</TH>";
echo 
"</TR>\n";

for (
$i=1$i < ($num+1); $i++) {
$head imap_header($MBOX$i50500);

$from $head->fetchfrom;
$subj $head->fetchsubject;
$date m_date_format($head->date);

$bgcolor = ($i%== 0)?$M_COLOR_ODD:$M_COLOR_EVEN;

echo 
"<TR BGCOLOR=\"$bgcolor\">\n";
echo 
" <TD><INPUT TYPE=CHECKBOX NAME=marked[] VALUE=$i></TD>\n";
echo 
" <TD>$from</TD>";
echo 
"<TD><A href=\"$PHP_SELF?m=$mailbox&n=$i&cmd=display\">$subj</A></TD>";
echo 
"<TD>$date</TD>\n";
echo 
"</TR>\n";
}

if (
$num <= 0) {
echo 
"<TR><TD ALIGN=CENTER COLSPAN=4 BGCOLOR=$M_COLOR_BG><BR>";
echo 
"<FONT SIZE=+1 COLOR=#FF0000>No messages in mailbox</FONT>";
echo 
"<BR><BR></TD></TR>\n";
}

echo 
"<TR BGCOLOR=$M_COLOR_HEAD><TD COLSPAN=4>";
echo 
"<INPUT TYPE=submit NAME=cmd VALUE=delete>";
echo 
"<INPUT TYPE=submit NAME=cmd VALUE=compose>";
echo 
"<INPUT TYPE=submit NAME=cmd VALUE=refresh>";
echo 
"</TD></TR>\n";

echo 
"</TABLE></CENTER>\n";
echo 
"</FORM>\n";

return 
true;
}


function 
m_display($msgno$mailbox '')
{
global 
$MBOX$M_COLOR_HEAD$M_COLOR_BG;
global 
$PHP_SELF;

if (! 
$MBOX) {
if (! 
m_login($mailbox)) {
return 
false;
}
}

$struc imap_fetchstructure($MBOX$msgno);
if (! 
$struc) {
return 
false;
}

$head imap_header($MBOX$msgno50500);

$from $head->fromaddress;
$subj $head->subject;
$date $head->date;
$body htmlentities(imap_body($MBOX$msgno));

echo 
"<CENTER>\n";
echo 
"<TABLE BORDER=0 CELLSPACING=0 CELLPADDING=10 WIDTH=100%>\n";
echo 
"<TR BGCOLOR=$M_COLOR_HEAD><TH>Message #$msgno: $from / $subj</TH></TR>\n";
echo 
"<TR BGCOLOR=$M_COLOR_BG><TD><PRE>\n";
echo 
"From: $from\n";
echo 
"Subject: $subj\n";
echo 
"Date: $date\n";
echo 
"<HR SIZE=2 NOSHADE>\n";
echo 
"$body\n";
echo 
"</PRE></TD></TR>\n";
echo 
"<TR BGCOLOR=$M_COLOR_HEAD><TD>";

echo 
"<FORM ACTION=$PHP_SELF METHOD=POST>";
echo 
"<INPUT TYPE=HIDDEN NAME=m VALUE=$mailbox>\n";
echo 
"<INPUT TYPE=HIDDEN NAME=n VALUE=$msgno>\n";
echo 
"<INPUT TYPE=HIDDEN NAME=marked[] VALUE=$msgno>\n";
echo 
"<INPUT TYPE=SUBMIT NAME=cmd VALUE=back>";
echo 
"<INPUT TYPE=SUBMIT NAME=cmd VALUE=reply>";
echo 
"     <INPUT TYPE=SUBMIT NAME=cmd VALUE=delete>";

echo 
"</TD></TR>\n";
echo 
"</TABLE>\n";
echo 
"</CENTER>\n";

return 
true;
}

function 
m_delete ($msgno$mailbox='')
{
global 
$MBOX;

if (
is_array($msgno)) {
while (list(
$dummy$num) = each($msgno)) {
imap_delete($MBOX$num);
}
imap_expunge($MBOX);
} else {
return 
false;
}

return 
true;
}

function 
m_compose ($msgno=''$mailbox='')
{
global 
$MBOX$M_COLOR_HEAD$M_COLOR_BG;
global 
$PHP_SELF$PHP_AUTH_USER$M_MAILSERVER;

if (
$msgno != '') {
$head imap_header($MBOX$msgno1501500);
$to $head->fromaddress;
$subject "Re: " $head->subject;
$body "$to wrote:\n";
$body .= ereg_replace("\n","\n>""\n" imap_body($MBOX$msgno));
} else {
$to "";
$subject "";
$body "";
}

echo 
"<CENTER>\n";
echo 
"<FORM METHOD=POST ACTION=\"$PHP_SELF\">\n";
echo 
"<TABLE BORDER=0 CELLPADDING=5 CELLSPACING=0>\n";
echo 
"<TR bgcolor=$M_COLOR_HEAD><TD ALIGN=RIGHT>To:</TD>";
echo 
"<TD><INPUT TYPE=TEXT NAME=to value=\"$to\" SIZE=50></TD></TR>\n";

echo 
"<TR bgcolor=$M_COLOR_HEAD><TD ALIGN=RIGHT>Subject:</TD>";
echo 
"<TD><INPUT TYPE=TEXT NAME=subject value=\"$subject\" SIZE=50></TD></TR>\n";

echo 
"<TR bgcolor=$M_COLOR_BG><TD COLSPAN=2>";
echo 
"<TEXTAREA COLS=76 ROWS=10 NAME=body WRAP=hard>$body</TEXTAREA>";