【www.gdgbn.com--邮件】
-- php教程myadmin sql dump
-- version 2.11.6
-- http://www.phpmyadmin.net
--
-- host: localhost
-- generation time: jun 29, 2010 at 09:27 am
-- server version: 5.0.51
-- php version: 5.2.6
set sql_mode="no_auto_value_on_zero";
/*!40101 set @old_character_set_client=@@character_set_client */;
/*!40101 set @old_character_set_results=@@character_set_results */;
/*!40101 set @old_collation_connection=@@collation_connection */;
/*!40101 set names utf8 */;
--
-- database: `test`
--
-- --------------------------------------------------------
--
-- table structure for table `maillist`
--
create table if not exists `maillist` (
`id` int(11) not null auto_increment,
`title` text collate utf8_unicode_ci not null,
`content` mediumtext collate utf8_unicode_ci not null,
`senduser` varchar(50) collate utf8_unicode_ci not null,
`sendmail` varchar(200) collate utf8_unicode_ci not null,
`sendtime` int(11) not null,
`accept_email` varchar(200) collate utf8_unicode_ci not null,
`cc_email` varchar(200) collate utf8_unicode_ci not null,
`bcc_email` varchar(200) collate utf8_unicode_ci not null,
`msessage_id` varchar(200) collate utf8_unicode_ci not null,
`msgno` int(11) not null comment "邮件的序号,为0表示已经下载结束",
`is_download` tinyint(4) not null default "0",
primary key (`id`)
) engine=myisam default charset=utf8 collate=utf8_unicode_ci auto_increment=1 ;
--
-- dumping data for table `maillist`
--
-- --------------------------------------------------------
--
-- table structure for table `mail_account`
--
create table if not exists `mail_account` (
`id` int(11) not null auto_increment,
`username` varchar(100) not null,
`password` varchar(50) not null,
`emailaddress` varchar(100) not null,
`mailserver` varchar(50) not null,
`servertype` varchar(10) not null,
`port` varchar(10) not null,
primary key (`id`)
) engine=myisam default charset=latin1 auto_increment=1 ;
--
-- dumping data for table `mail_account`
--
-- --------------------------------------------------------
--
-- table structure for table `mail_attach`
--
create table if not exists `mail_attach` (
`id` int(11) not null auto_increment,
`mail_id` int(11) not null,
`filename` varchar(200) collate utf8_unicode_ci not null,
`filename_tmp` varchar(200) collate utf8_unicode_ci not null,
`download_time` datetime not null,
primary key (`id`)
) engine=myisam default charset=utf8 collate=utf8_unicode_ci auto_increment=1 ;
--
-- dumping data for table `mail_attach`
--
config.php文件
$path = "d:/phpnow/htdocs/attach/";
$urlpath = "http://localhost/attach/";
?>
list.php邮箱列表页面
header("content-type: text/html; charset=utf-8");
header("expires: ".date("d,d m y h:i:s",mktime(0,0,0,1,1,2000))." gmt");
header("last-modified:".gmdate("d,d m y h:i:s")." gmt");
header("cache-control: private, no-cache,must-revalidate");
header("pragma: no-cache");
include_once "dbconfig.php";
$dblink = mysql教程_connect("localhost",$dbuser,$dbpasswd);
mysql_query("set names "utf8"");
mysql_select_db("test");
$emailaddress = $_request["email"];
?>
">收邮件
">发邮件
$sql = "select * from maillist where accept_email="".$emailaddress."" order by sendtime desc";
$rlt = mysql_query($sql);
while ($row = mysql_fetch_array($rlt)){
$title = strips教程lashes($row["title"]);
$senduser = stripslashes($row["senduser"]);
$sendtime = $row["sendtime"];
$senddate = date("y-m-d h:i:s",$sendtime+3600*8);
$msessage_id = $row["msessage_id"];
$msgno = $row["msgno"];
$msgflag = "未读";
if(!$msgno){
$msgflag = "已读";
}
echo "";
echo "$title";
echo "$senduser";
echo "$senddate";
//echo "查看";
echo "查看";
echo "$msgflag";
echo "";
}
?>
receuv.php收邮件页面
set_time_limit(0);
include_once "imap.php";
include_once "dbconfig.php";
$dblink = mysql_connect("localhost",$dbuser,$dbpasswd);
mysql_query("set names "utf8"");
mysql_select_db("test");
$emailaddress = $_request["email"];
$sql = "select * from mail_account where emailaddress="".$emailaddress.""";
$rlt = mysql_query($sql);
$row = mysql_fetch_array($rlt);
$username = $row["username"];
$password = $row["password"];
$emailaddress = $row["emailaddress"];
$mailserver = $row["mailserver"];
$servertype = $row["servertype"];
$port = $row["port"];
$mail = new imap($username,$password,$emailaddress,$mailserver,$servertype,$port,false);
$mail->open();
$mailnum = $mail->getmaillist();
for($i=1;$i<=$mailnum;$i++){
$mailheader = $mail->head($i);
//echo "
";print_r($mailheader);echo "";
//echo "
";
$msgno = $mailheader["id"];
$size = $mailheader["size"];
$messageid = $mailheader["message_id"];
$udate = $mailheader["udate"];
$subject = addslashes($mailheader["subject"]);
$charset = $mailheader["charset"];
$sendmail = $mailheader["from"];
$senduser = addslashes($mailheader["frompersonal"]);
if($senduser==""){
$senduser = $sendmail;
}
$fromcharset = $mailheader["fromcharset"];
if($fromcharset=="default"){
$fromcharset = "gb2312";
}
if($charset=="default"){
$charset = "gb2312";
}
$csql = "select * from maillist where msessage_id="".$messageid."" and sendtime="".$udate.""";
$crlt = mysql_query($csql);
if(mysql_num_rows($crlt)==0){
$subject = iconv($charset,"utf-8",$subject);
$senduser = iconv($fromcharset,"utf-8",$senduser);
$sql = "insert into maillist set title="".$subject."",senduser="".$senduser."",sendmail="".$sendmail."",
sendtime="".$udate."",msessage_id="".$messageid."",msgno="".$msgno."",accept_email="".$emailaddress.""";
mysql_query($sql);
}else{
$sql = "update maillist set msgno="".$msgno."" where msessage_id="".$messageid."" and sendtime="".$udate.""";
mysql_query($sql);
}
}
$mail->close();
header("location:list.php?email=".$emailaddress);
?>
read_mail.php读取邮件页面
include_once "dbconfig.php";
$msessage_id = $_request["msessage_id"];
$udate = $_request["udate"];
$msgno = $_request["msgno"];
$dblink = mysql_connect("localhost",$dbuser,$dbpasswd);
mysql_query("set names "utf8"");
mysql_select_db("test");
$email = $_request["email"];
?>
echo "返回收件箱
";
$sql = "select * from maillist where sendtime="".$udate."" and msessage_id="".$msessage_id.""";
$rlt = mysql_query($sql);
$row = mysql_fetch_array($rlt);
$mailid = $row["id"];
$title = stripslashes($row["title"]);
$senduser = stripslashes($row["senduser"]);
$sendmail = stripslashes($row["sendmail"]);
$senddate = date("y-m-d h:i:s",$udate+3600*8);
echo "主题:".$title."
";
echo "发件人:".$senduser."<".$sendmail.">
";
echo "发件时间:".$senddate."
";
?>
getmailbody.php页面代码
set_time_limit(0);
header("content-type: text/html; charset=utf-8");
include_once "imap.php";
include_once "dbconfig.php";
$dblink = mysql_connect("localhost",$dbuser,$dbpasswd);
mysql_query("set names "utf8"");
mysql_select_db("test");
$msessage_id = $_request["msessage_id"];
$udate = $_request["udate"];
$msgno = $_request["msgno"];
$emailaddress = $_request["email"];
$sql = "select id,is_download from maillist where sendtime="".$udate."" and msessage_id="".$msessage_id.""";
$rlt = mysql_query($sql);
$row = mysql_fetch_array($rlt);
$is_download = $row["is_download"];
$mail_id = $row["id"];
if($is_download==0){
$d = 1;
$sql = "select * from mail_account where emailaddress="".$emailaddress.""";
$rlt = mysql_query($sql);
$row = mysql_fetch_array($rlt);
$username = $row["username"];
$password = $row["password"];
$emailaddress = $row["emailaddress"];
$mailserver = $row["mailserver"];
$servertype = $row["servertype"];
$port = $row["port"];
$mail = new imap($username,$password,$emailaddress,$mailserver,$servertype,$port,false);
$mail->open();
$mail->settype();
$mail->fetch_structure($msgno);
$attacharr = $mail->getallattachment($msgno);
$i = 1;
$inlineattach = array();
if(!empty($attacharr)){
foreach ($attacharr as $rows){
$filename = $rows["filename"];
$details = $rows["details"];
$attachtype = $rows["attachtype"];
$filesize = $rows["filesize"];
$inlineid = $rows["inline_id"];
$downloadname = $mail->deliverattach($filename,$details,$path,$i);
if($attachtype=="inline"){
$inlineattach[$i-1]["filename"] = $filename;
$inlineattach[$i-1]["downloadname"] = $downloadname;
$inlineattach[$i-1]["filesize"] = $filesize;
$inlineattach[$i-1]["attachtype"] = $attachtype;
$inlineattach[$i-1]["inline_id"] = $inlineid;
}
$isql = "insert into mail_attach set mail_id="".$mail_id."",filename="".$filename."",
filename_tmp="".$downloadname."",download_time=now()";
mysql_query($isql);
$i++;
}
}
$content = $mail->getbody($msgno);
$content = $mail->replaceimg($inlineattach,$content);
$sql = "update maillist set content="".addslashes($content)."",is_download="".$d."" where sendtime="".$udate."" and msessage_id="".$msessage_id.""";
mysql_query($sql);
if($d){
while(true){
if($mail->deletemails($msgno)){
if($mail->emptydeletebox()){
$sql = "update maillist set msgno=0 where sendtime="".$udate."" and msessage_id="".$msessage_id.""";
mysql_query($sql);
$sql = "select id from maillist where msgno<>0 order by msgno asc";
$rlt = mysql_query($sql);
$i = 1;
while ($row = mysql_fetch_array($rlt)){
$id = $row["id"];
$usql = "update maillist set msgno=".$i." where id="".$id.""";
mysql_query($usql);
$i++;
}
break;
}
}
}
}
$mail->close();
}
$sql = "select * from maillist where sendtime="".$udate."" and msessage_id="".$msessage_id.""";
$rlt = mysql_query($sql);
$row = mysql_fetch_array($rlt);
$content = $row["content"];
$asql = "select * from mail_attach where mail_id="".$mail_id.""";
$arlt = mysql_query($asql);
if(mysql_num_rows($arlt)!=0){
echo "附件:";
while ($arow = mysql_fetch_array($arlt)){
$filename = $arow["filename"];
$filename_tmp = $arow["filename_tmp"];
echo strtolower($filename)." ";
echo "查看
";
}
}
echo $content;
?>
imap.php页面代码
/**
*+----------------------------------------------------------------------------------------------------+
*| imap message class - recevie mailbox by imap |
*| |
*| author: tiger zhang |
*| mailto: tinamonkey113@163.com |
*| |
*| |
*| (c) copyright 2010, tiger zhang, all rights reseverd |
*+----------------------------------------------------------------------------------------------------+
**
*/
class imap{
var $server="";
var $username="";
var $password="";
var $marubox="";
var $email="";
var $linkserver;//email stream
var $error;
var $mailnum = 0;
var $partsary = array();
var $data_types; // (array)(string) various message part types
var $encoding_types; // (array)(string) various encoding types
var $structure; // (array)(object) contains the complete body structure
var $pid; // (array)(array)(str) part id
var $file_type; // (array)(array)(str) mime type
var $disposition; // (array)(array)(str) inline | attachment
var $fsize; // (array)(array)(int) part size in bytes
var $encoding; // (array)(array)(str) message encoding
var $fname; // (array)(array)(str) original file name
var $inline_id; // (array)(array)(str) string containing the id for multipart/related
var $has_attachments; // (array)(array)(bool)
var $file_code; // (array)(array)(str) charset
function imap($username,$password,$emailaddress,$mailserver="localhost",$servertype="pop",$port="110",$ssl = false){
if($servertype=="imap")
{
if($port=="") $port="143";
$strconnect="{".$mailserver.":".$port. "}inbox";
}
else
{
$strconnect="{".$mailserver.":".$port. "/pop3".($ssl ? "/ssl" : "")."}inbox";
}
$this->server = $strconnect;
$this->username = $username;
$this->password = $password;
$this->email = $emailaddress;
}
function open(){
//$this->linkserver = @imap_open($this->mailbox,$this->username,$this->password);
$this->linkserver=@imap_open($this->server,$this->username,$this->password) or die("connecting to mail server,refresh");
if(!$this->linkserver)
{
echo "error: connecting to mail server,refresh";
exit;
}
}
function checkopen(){
if(imap_ping($this->linkserver) === false){
$this->error = "imap_open的连接错误:".imap_last_error();
return false;
}else{
$this->error = "ok";
return true;
}
}
function nd(){
$checkresult = imap_check($this->linkserver);
$nummsgs = $checkresult->nmsgs;
$date = $checkresult->date;
$checkreturn[] = $nummsgs;
$checkreturn[] = $date;
return $checkreturn;
}
function getmsgno($messageid){
return imap_uid($this->linkserver,$messageid);
}
/**
* 获取邮件总数
*
*/
function getmaillist(){
$checkresult = imap_check($this->linkserver);
$nummsgs = $checkresult->nmsgs;
return $nummsgs;
}
/**
* 获取邮件头内容
* @param unknown_type $id
* @param unknown_type $all
* @param unknown_type $several
* @return array
(
[id] => 4
[size] => 1697
[message_id] =>
[udate] => 1276687275
[subject] => 测试
[charset] => gbk
[topersonal] => test
[tocharset] => gbk
[to] => test@ckichina.com
[frompersonal] => 五月的饼干屋
[fromcharset] => gbk
[from] => 9900469@qq.com
)
*/
function head($id = "",$allhead=false,$all = false,$several = array()){
if($all == true){
$checkreturn = imap::nd();
$nummsgs = $checkreturn[0];
for($i=0;$i<$nummsgs;$i++){
$head_array[$i]["id"] = $i+1;
$head = imap_header($this->linkserver,$i+1);
if($head->udate == ""){
$head_array[$i]["udate"] = "";
}else{
$head_array[$i]["udate"] = $head->udate;
}
if($head->subject == ""){
$head_array[$i]["subject"] = "";
}else{
$head_array[$i]["subject"] = $head->subject;
$analyze_charset = imap_mime_header_decode($head_array[$i]["subject"]);
//echo "
".print_r($analyze_charset);echo "";
$head_array[$i]["subject"] = $analyze_charset[0]->text;
}
if($head->to == ""){
$head_array[$i]["to"] == "";
}else{
$to = $head->to;
$to = $to[0]->mailbox."@".$to[0]->host;
$head_array[$i]["to"] = $to;
$analyze_charset = imap_mime_header_decode($head_array[$i]["to"]);
$head_array[$i]["to"] = $analyze_charset[0]->text;
}
if($head->from == ""){
$head_array[$i]["personal"] == "";
$head_array[$i]["from"] == "";
}else{
$from = $head->from;
$head_array[$i]["personal"] = $from[0]->personal;
$analyze_charset = imap_mime_header_decode($head_array[$i]["personal"]);
$head_array[$i]["personal"] = $analyze_charset[0]->text;
$fromaddress = $from[0]->mailbox."@".$from[0]->host;
$head_array[$i]["from"] = $fromaddress;
$analyze_charset = imap_mime_header_decode($head_array[$i]["from"]);
$head_array[$i]["from"] = $analyze_charset[0]->text;
}
}
return $head_array;
}
if(count($several) > 0){
$num = count($several);
for($i=0;$i<$num;$i++){
$head_array[$i]["id"] = $several[$i];
$head = imap_header($this->linkserver,$several[$i]);
if($head->udate == ""){
$head_array[$i]["udate"] = "";
}else{
$head_array[$i]["udate"] = $head->udate;
}
if($head->subject == ""){
$head_array[$i]["subject"] = "";
}else{
$head_array[$i]["subject"] = $head->subject;
$analyze_charset = imap_mime_header_decode($head_array[$i]["subject"]);
$head_array[$i]["subject"] = $analyze_charset[0]->text;
}
if($head->to == ""){
$head_array[$i]["to"] == "";
}else{
$to = $head->to;
$to = $to[0]->mailbox."@".$to[0]->host;
$head_array[$i]["to"] = $to;
$analyze_charset = imap_mime_header_decode($head_array[$i]["to"]);
$head_array[$i]["to"] = $analyze_charset[0]->text;
}
if($head->from == ""){
$head_array[$i]["personal"] == "";
$head_array[$i]["from"] == "";
}else{
$from = $head->from;
$head_array[$i]["personal"] = $from[0]->personal;
$analyze_charset = imap_mime_header_decode($head_array[$i]["personal"]);
$head_array[$i]["personal"] = $analyze_charset[0]->text;
$fromaddress = $from[0]->mailbox."@".$from[0]->host;
$head_array[$i]["from"] = $fromaddress;
$analyze_charset = imap_mime_header_decode($head_array[$i]["from"]);
$head_array[$i]["from"] = $analyze_charset[0]->text;
}
}
return $head_array;
}
$head = imap_header($this->linkserver,$id);
if($allhead){
return $head;
}
$head_array["id"] = $id;
$head_array["size"] = $head->size;
if($head->message_id == ""){
$head_array["message_id"] = "";
}else{
$head_array["message_id"] = $head->message_id;
}
if($head->udate == ""){
$head_array["udate"] = "";
}else{
$head_array["udate"] = $head->udate;
}
if($head->subject == ""){
$head_array["subject"] = "";
}else{
$head_array["subject"] = $head->subject;
$analyze_charset = imap_mime_header_decode($head_array["subject"]);
$head_array["charset"] = $analyze_charset[0]->charset;
$head_array["subject"] = $analyze_charset[0]->text;
}
if($head->to == ""){
$head_array["topersonal"] == "";
$head_array["tocharset"] == "";
$head_array["to"] == "";
}else{
$to = $head->to;
$head_array["topersonal"] = $to[0]->personal;
$analyze_charset = imap_mime_header_decode($head_array["topersonal"]);
$head_array["topersonal"] = $analyze_charset[0]->text;
$head_array["tocharset"] = $analyze_charset[0]->charset;
$to = $to[0]->mailbox."@".$to[0]->host;
$head_array["to"] = $to;
$analyze_charset = imap_mime_header_decode($head_array["to"]);
$head_array["to"] = $analyze_charset[0]->text;
}
if($head->reply_to == ""){
}
if($head->from == ""){
$head_array["frompersonal"] == "";
$head_array["fromcharset"] == "";
$head_array["from"] == "";
}else{
$from = $head->from;
$head_array["frompersonal"] = $from[0]->personal;
$analyze_charset = imap_mime_header_decode($head_array["frompersonal"]);
$head_array["frompersonal"] = $analyze_charset[0]->text;
$head_array["fromcharset"] = $analyze_charset[0]->charset;
$fromaddress = $from[0]->mailbox."@".$from[0]->host;
$head_array["from"] = $fromaddress;
$analyze_charset = imap_mime_header_decode($head_array["from"]);
$head_array["from"] = $analyze_charset[0]->text;
}
return $head_array;
}
function analyze_body($id){
$structure = imap_fetchstructure($this->linkserver,$id);
return $structure;
}
/**
* 设置code和filetype
*
*/
function settype()
{
$this->data_types = array();
$this->data_types[0] = "text";
$this->data_types[1] = "multipart";
$this->data_types[2] = "message";
$this->data_types[3] = "application";
$this->data_types[4] = "audio";
$this->data_types[5] = "image";
$this->data_types[6] = "video";
$this->data_types[7] = "other";
$this->encoding_types = array();
$this->encoding_types[0] = "7bit";
$this->encoding_types[1] = "8bit";
$this->encoding_types[2] = "binary";
$this->encoding_types[3] = "base64";
$this->encoding_types[4] = "quoted-printable";
$this->encoding_types[5] = "other";
return;
}
/**
* * 遍历structure取出所有的相关信息
*
* @param unknown_type $mid
* @param unknown_type $sub_part
* @param unknown_type $sub_pid
* @param unknown_type $n
* @param unknown_type $is_sub_part
* @param unknown_type $skip_part
* @return unknown
*+----------------------------------------------------------------------------------------------------+
*| imap message scanner - scans information provided by imap_fetchstructure() |
*| |
*| author: richard york |
*| mailto:richy at smilingsouls.net |
*| http://www.smilingsouls.net |
*| modified by:tiger zhang(2010-6-20) |
*| |
*| (c) copyright 2004, richard york, all rights reseverd |
*+----------------------------------------------------------------------------------------------------+
**
*/
function fetch_structure($mid, $sub_part = null, $sub_pid = null, $n = 0, $is_sub_part = false, $skip_part = false){
if (!is_array($sub_part))
{
$this->structure[$mid] = imap_fetchstructure($this->linkserver, $mid);
}
if (isset($this->structure[$mid]->parts) || is_array($sub_part))
{
if ($is_sub_part == false)
{
$parts = $this->structure[$mid]->parts;
}
else
{
$parts = $sub_part;
$n++;
}
for($p = 0, $i = 1; $p < count($parts); $n++, $p++, $i++)
{
// skip the following...
// skip multipart/mixed!
// skip subsequent multipart/alternative if this part is message/rfc822
// skip multipart/related
$ftype = (empty($parts[$p]->type))? $this->data_types[0]."/".strtolower($parts[$p]->subtype) : $this->data_types[$parts[$p]->type]."/".strtolower($parts[$p]->subtype);
$encoding = (empty($parts[$p]->encoding))? $this->encoding_types[0] : $this->encoding_types[$parts[$p]->encoding];
$skip_next = ($ftype == "message/rfc822")? true : false;
if ($ftype == "multipart/mixed" || $skip_part == true && $ftype == "multipart/alternative" || $ftype == "multipart/related")
{
$n--;
}
else
{
$this->pid[$mid][$n] = ($is_sub_part == false)? $i : $sub_pid.".".$i;
$this->file_type[$mid][$n] = $ftype;
$this->encoding[$mid][$n] = $encoding;
$this->fsize[$mid][$n] = (!isset($parts[$p]->bytes) || empty($parts[$p]->bytes))? 0 : $parts[$p]->bytes;
# force inline disposition if none is present
if ($parts[$p]->ifdisposition == true)
{
$this->disposition[$mid][$n] = strtolower($parts[$p]->disposition);
if (strtolower($parts[$p]->disposition) == "attachment")
{
if ($parts[$p]->ifdparameters == true)
{
$params = $parts[$p]->dparameters;
foreach ($params as $param)
{
if(strtolower($param->attribute) == "filename")
{
$this->fname[$mid][$n] = $param->value;
break;
}
}
}
}else if (strtolower($parts[$p]->disposition) == "inline")
{
if ($parts[$p]->ifdparameters == true)
{
$params = $parts[$p]->dparameters;
foreach ($params as $param)
{
if(strtolower($param->attribute) == "filename")
{
$this->fname[$mid][$n] = $param->value;
break;
}
}
}
}
}
else if ($parts[$p]->ifparameters == true)
{
$this->disposition[$mid][$n] = "inline";
$params = $parts[$p]->parameters;
foreach ($params as $param)
{
if(strtolower($param->attribute) == "name")
{
$this->fname[$mid][$n] = $param->value;
break;
}else if(strtolower($param->attribute) == "charset"){
$this->file_code[$mid][$n] = strtolower($param->value);
&n