构建简单的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, $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>";