首页 电脑 电脑学堂 查看内容

一个简单的Webmail系统(php)

2009-7-23 09:50 894 0

摘要:   这是一段Web Mail的示范代码,功能不是很强,但是结构还比较完整,主要的功能如查看文件夹,查看信件,回复,写信都有。但是程序中没有考虑附件解读和发送的问题。仅推荐给希望了解Webmail编程的...
关键词: echo return MBOX msgno subject head function mailbox global body

  这是一段Web Mail的示范代码,功能不是很强,但是结构还比较完整,主要的功能如查看文件夹,查看信件,回复,写信都有。但是程序中没有考虑附件解读和发送的问题。仅推荐给希望了解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: $fromn";  echo "Subject: $subjn";  echo "Date: $daten";  echo "<HR SIZE=2 NOSHADE>n";  echo "$bodyn";  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_MAILSERVERn";  $headers .= "Reply-to: $PHP_AUTH_USER@$M_MAILSERVERn";  $headers .= "Content-Type: text/plain; charset=iso-8859-1n";  $headers .= "Content-Transfer-Encoding: 8bitn";  $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 deniedn";  exit;  }  /* make sure there is NO trailing space here!!! */  ?>
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

最新评论

返回顶部