一个简单的Webmail系统

    技术2022-05-11  105

    一个简单的Webmail系统      来源:sadly      这是一段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><?PHPif ($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, $i, 50, 50, 0);

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

    $bgcolor = ($i%2 == 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, $msgno, 50, 50, 0);

    $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, $msgno, 150, 150, 0);$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>/n";echo "</TD></TR>/n";

    echo "<TR bgcolor=$M_COLOR_HEAD><TD COLSPAN=2>";echo "<INPUT TYPE=HIDDEN NAME=m VALUE=$mailbox>";echo "<INPUT TYPE=SUBMIT NAME=cmd VALUE=send>";echo "<INPUT TYPE=SUBMIT NAME=cmd VALUE=cancel>";echo "</TD></TR>";

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

    function m_send ($to, $subject, $body){global $PHP_AUTH_USER, $M_MAILSERVER, $M_SYSNAME;

    if ($PHP_AUTH_USER && $M_MAILSERVER && $to && $body) {

    $headers = "From: $PHP_AUTH_USER@$M_MAILSERVER/n";$headers .= "Reply-to: $PHP_AUTH_USER@$M_MAILSERVER/n";$headers .= "Content-Type: text/plain; charset=iso-8859-1/n";$headers .= "Content-Transfer-Encoding: 8bit/n";$headers .= "X-Mailer: $M_SYSNAME/" . phpversion() . "/n";

    return mail($to, $subject, $body, $headers);}

    return false;}

     

    function m_date_format($datestr){

    if (ereg("([[:digit:]]{1,2})[[:space:]]+([[:alpha:]]{3})[[:space:]]+([[:digit:]]{4})",$datestr, $regs)) {return $regs[0];}

    return $datestr;}

    function m_mailbox_name ($mbx){global $M_MBOX;

    /* no mailbox specified means we map it to the inbox */if ($mbx == "") {return $M_MBOX . "INBOX";}

    /* replace some special chars */$mbx = ereg_replace("[^[:alnum:]]", "_", $mbx);

    return $M_MBOX . $mbx;}

    function m_reject($dom){Header("HTTP/1.0 401 Unauthorized");Header("WWW-authenticate: basic realm=/"$dom/"");echo "Access denied/n";exit;}

     

    /* make sure there is NO trailing space here!!! */?>

        

    --------------------------------------------------------------------------------

      编辑整理:中国PHP自由联盟   [关闭窗口] - 2000-03-28 -      

    Copyright ? 2000 Chinese PHP Power All rights reserved. 


    最新回复(0)