构建简单的Webmail系统


Posted in PHP onOctober 09, 2006

这是一段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>"; 

PHP 相关文章推荐
3.从实例开始
Oct 09 PHP
信用卡效验程序
Oct 09 PHP
针对初学PHP者的疑难问答(1)
Oct 09 PHP
在PHP里得到前天和昨天的日期的代码
Aug 16 PHP
PHP抓屏函数实现屏幕快照代码分享
Jan 02 PHP
php中JSON的使用与转换
Jan 14 PHP
详解PHP匿名函数与注意事项
Mar 29 PHP
highchart数据源纵轴json内的值必须是int(详解)
Feb 20 PHP
php中str_pad()函数用法分析
Mar 28 PHP
laravel实现上传图片的两种方式小结
Oct 12 PHP
PHP保存Base64图片base64_decode的问题整理
Nov 04 PHP
php设计模式之代理模式分析【星际争霸游戏案例】
Mar 23 PHP
如何删除多级目录
Oct 09 #PHP
用PHP实现多级树型菜单
Oct 09 #PHP
PHP4在Windows2000下的安装
Oct 09 #PHP
模仿OSO的论坛(五)
Oct 09 #PHP
基于mysql的论坛(2)
Oct 09 #PHP
基于mysql的论坛(1)
Oct 09 #PHP
基于mysql的论坛(4)
Oct 09 #PHP
You might like
用PHP实现多级树型菜单
2006/10/09 PHP
深入分析使用mysql_fetch_object()以对象的形式返回查询结果
2013/06/05 PHP
php的webservice的wsdl的XML无法显示问题的解决方法
2014/03/11 PHP
javascript之ESC(第二类混淆)
2007/05/06 Javascript
javascript背投广告代码的完善
2008/04/08 Javascript
jQuery 源代码显示控件 (Ajax加载方式).
2009/05/18 Javascript
基于jquery的一个图片hover的插件
2010/04/24 Javascript
js和css写一个可以自动隐藏的悬浮框
2014/03/05 Javascript
JavaScript函数定义的常见注意事项小结
2014/09/16 Javascript
smartcrop.js智能图片裁剪库
2015/10/14 Javascript
Javascript typeof与instanceof的区别
2016/10/18 Javascript
vue.js之vue-cli脚手架的搭建详解
2017/05/05 Javascript
Bootstrap组件之下拉菜单,多级菜单及按钮布局方法实例
2017/05/25 Javascript
JS中利用swiper实现3d翻转幻灯片实例代码
2017/08/25 Javascript
使用Bootstrap4 + Vue2实现分页查询的示例代码
2017/12/21 Javascript
vue toggle做一个点击切换class(实例讲解)
2018/03/13 Javascript
微信小程序实现即时通信聊天功能的实例代码
2018/08/17 Javascript
vue插件实现v-model功能
2018/09/10 Javascript
微信小程序开发之map地图组件定位并手动修改位置偏差
2019/08/17 Javascript
vue 实现通过vuex 存储值 在不同界面使用
2019/11/11 Javascript
javascript实现简易数码时钟
2020/03/30 Javascript
JavaScript实现简单动态表格
2020/12/02 Javascript
[04:22]DOTA2大事件之护国神翼
2020/08/14 DOTA
Python编程实现的简单Web服务器示例
2017/06/22 Python
使用django-guardian实现django-admin的行级权限控制的方法
2018/10/30 Python
在python中实现对list求和及求积
2018/11/14 Python
python 基于TCP协议的套接字编程详解
2019/06/29 Python
Django操作session 的方法
2020/03/09 Python
Python使用Paramiko控制liunx第三方库
2020/05/20 Python
Django后端按照日期查询的方法教程
2021/02/28 Python
澳大利亚领先的宠物用品商店:VetSupply
2017/09/08 全球购物
澳大利亚波西米亚风连衣裙在线商店:Fortunate One
2019/04/01 全球购物
美国在线家具网站:GDFStudio
2021/03/13 全球购物
旅游与酒店管理专业求职信
2014/07/21 职场文书
如何在Python项目中引入日志
2021/05/31 Python
python中pymysql包操作数据库方法
2022/04/19 Python