一个简单的Webmail系统

原创 2000年12月19日 02:25:00

一个简单的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>
<?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>/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. 

Webmail邮件服务器搭建-有问题-邮件发出去,对方收不到

#搭建WebMail邮件服务器 #1.关闭系统默认安装的 sendmail: [root@red4 ~]# service sendmail stop 关闭 sendmail: ...
  • robertkun
  • robertkun
  • 2013年06月07日 08:50
  • 2760

一个简单的论坛系统

一个简单的论坛系统  1:包含下列信息:    2:每天论坛访问量300万左右,更新帖子10万左右。  请给出数据库表结构设计,并结合范式简要说明设计思路。  一. 发帖主题和回...
  • CareChere
  • CareChere
  • 2016年04月27日 11:00
  • 1155

20款PHP版WebMail开源项目

20款PHP版WebMail开源项目 如今互联网巨头提供的企业应用套件中邮件托管是必备服务,而且还始终秉承免费的优良光荣传统,最为让人熟识的恐怕非“瘟多死里屋管理中心”和“股沟企业应用”莫属了。既然...
  • tty521
  • tty521
  • 2017年01月19日 11:26
  • 2251

一个简单的粒子系统

一个简单的粒子系统
  • funte
  • funte
  • 2013年12月02日 16:02
  • 1553

一个简单的学生信息管理系统

class Student{     String stuId;    //学号     String stuName;    //姓名 } public class StuManager...
  • u013438987
  • u013438987
  • 2014年01月23日 19:58
  • 1420

c++写的一个简单的管理系统

以下代码是我学习完c++基础知识之后为了练习一下,将所学的内容能够统一的串一遍,特别是练习一下指针的用法所编写的程序,并且有文件操作,现在分享一下,希望对初学者能够有所帮助。 #include   ...
  • u012987387
  • u012987387
  • 2013年12月02日 21:54
  • 799

一个简单的推荐系统

咱以电影电视的推荐系统为例,一步一步的来实现一个简单的推荐系统吧, 由于比较简单,整个推荐系统源码不到100行,大概70-80行吧,应该很容易掌握。 为了快速开发原型,咱采用Python代码来演示 1...
  • jiyang_1
  • jiyang_1
  • 2015年12月04日 17:03
  • 1286

java 一个简单的学生信息管理系统

用java来写一个管理系统我第一次做信息管理系统是用C语言做的,当时的第一感觉就是指针真的很好使,但是java中没有指针,这让我不能指哪儿打哪儿,而且两种语言的核心思想也是不同的—一个面向过程,一个面...
  • wuthering_wind
  • wuthering_wind
  • 2017年11月20日 13:32
  • 828

如何编写一个最简单的嵌入式操作系统(1)简单任务调度

转载于http://blog.csdn.net/zds9204/article/details/18867239 写在前面: 放寒假了终于有时间学习一下嵌入式操作系统的知识。一直想做嵌...
  • android_lover2014
  • android_lover2014
  • 2016年12月14日 14:25
  • 397

如何写一个最简单的操作系统

关于如何写一个最简单的操作系统,这个事情完全处于好奇。实际上这样一个操作系统没有任何使用价值。整个系统要做的事情就是输出一句“Hello,OS world!”,但是这样一个输出不同于printf和co...
  • feixiaku
  • feixiaku
  • 2014年07月19日 01:11
  • 7593
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:一个简单的Webmail系统
举报原因:
原因补充:

(最多只允许输入30个字)