分类广告


推荐文章

  • 没有找到任何内容!
您当前的位置:中国站长下载网络编程PHP专区 → 文章内容

php构建一个简单的Webmail系统

  • 作者:佚名    来源:不详    发布时间:2006-2-26 2:01:53
  • 字体大小:
这是一段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: $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!!! */

?>
<