一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

php 发送邮箱实例代码

时间:2010-04-26 编辑:简简单单 来源:一聚教程网

php教程 发送邮箱实例代码


class pop3 {


        public $server="pop3.126.com";//服务器名
        public $server_port=110;//服务器端口
        public $timeout=30;//超过多少时间就算连接失败
        public $connection=0;//保持与主机的连接
        public $state="DISCONNECTED";//保存当前的状态  
        public $debug=0;//是否显示错误信息
        public $err_str="";//服务器返回的错误信息
        public $err_no;//服务器返回的错误号
        public $respones;//保存服务器返回的信息
        public $apop;//说明需要使用加密方式进行密码验证
        public $messages;//邮件数
        public $size;//邮件的总大小
        public $mail_list;//保存各个邮件的大小及在服务器上的序列号
        public $head=array();//邮件头的内容数组
        public $body=array();//邮件体的内容数组 


        function POP3($server,$server_port,$timeout)
        {
                $this->server=$server;
                $this->server_port=$server_port;
                $this->timeout=$timeout;
                $this->debug=TRUE;
        }

        function open()
        {
                if($this->server=="")
                {
                        $this->err_str="无效的主机名!";
                        return FALSE;
                }
                if($this->debug)  echo "正在打开  $this->server,$this->server_port,$this->timeout";
                if(!$this->connection=@fsockopen($this->server,$this->server_port,$err_no,$err_str,$this->timeout))
                {
                        $this->err_str="连接到POP服务器失败,错误信息:".$err_str."错误号:".$err_no;
                        return FALSE;
                }
                else
                {
                        $this->getresponse();
                        if($this->debug)
                            $this->outdebug($this->response);
                        if(substr($this->respones,0,3)!="+OK")
                        {
                                $this->err_str="服务器返回无效信息:".$this->respones."请检查pop服务器是否正确";
                                return FALSE;
                        }
                        $this->state="AUTHORIZATION";
                        return TRUE;
                }
        }

        function getresponse()
        {
                for($this->respones;;)
                {
                        if(feof($this->connection))
                            return FALSE;
                        $this->respones.=fgets($this->connection,100);
                        $length=strlen($this->respones);
                        if($length>=2&&substr($this->respones,$length-2,2)=="rn")
                        {
                                $this->respones=strtok($this->respones,"rn");
                                return TRUE;
                        }
                }
        }

        function outdebug($message)
        {
                echo htmlspecialchars($message)."n";
        }

        function command($command,$length,$code)
        {
                if($this->connection==0)
                {
                        $this->outdebug("没有连接到任何服务器,请检查网络连接!");
                        return FALSE;
                }
                if($this->debug)
                    $this->outdebug(">>> $command");
                if(!fput($this->connection,"$command rn"))
                {
                        $this->outdebug("'无法发送命令'.$command");
                        return FALSE;
                }
                else
                {
                        $this->getresponse();
                        if($this->debug)
                           $this->outdebug($this->respones);
                        if(substr($this->respones,0,$length)!=$code)
                        {
                                $this->outdebug("$command.'命令服务器返回信息无效'.$this->response");
                                return FALSE;
                        }
                        else
                            return TRUE;
                }
        }

        function login($user,$pass)
        {
                if($this->state!="AUTHORIZATION")
                {
                        $this->outdebug("没有连接到任何服务器或状态不对!");
                        return FALSE;
                }
                if(!$this->apop)
                {
                        if(!$this->command("USER $user",3,"+OK"))  return FALSE;
                        if(!$this->command("PASS $pass",3,"+OK"))  return FALSE;
                }
                else
                {
                        if(!$this->command(" APOP $user".md5($this->greeting.$pass),3,"+OK"))  return FALSE;
                }
                $this->state="TRANSACTION";
                return TRUE;
        }

        function stat_sum()
        {
                if($this->state!="TRANSACTION")
                {
                        $this->outdebug("还没有连接服务器或没有成功登陆");
                        return FALSE;
                }
                if(!$this->command("STAT",3,"+OK"))
                    return FALSE;
                else
                {
                        $this->respones=strtok($this->respones," ");
                        $this->messages=strtok(" ");
                        $this->size=strtok(" ");
                        return TRUE;
                }
        }

        function listmail($mess=null,$uni_id=null)
        {
                if($this->state!="TRANSACTION")
                {
                        $this->outdebug("还没有连接服务器或没有成功登陆");
                        return FALSE;
                }
                if($uni_id)
                   $command="UIDL";
                else
                   $command="LIST";
                if($mess)
                   $command.=$mess;
                if(!$this->command($command,3,"+OK"))
                   return FALSE;
                else
                {
                        $i=0;
                        $this->mail_list=array();
                        $this->getresponse();
                        while($this->respones!=".")
                        {
                                $i++;
                                if($this->debug)
                                   $this->outdebug($this->respones);
                                if(uni_id)
                                {
                                        $this->mail_list[$i][num]=strtok($this->respones," ");
                                        $this->mail_list[$i][size]=strtok(" ");
                                }
                                else
                                {
                                        $this->mail_list[$i][num]=intval(strtok($this->respones," "));
                                        $this->mail_list[$i][size]=intval(strtok(" "));
                                }
                                $this->getresponse();
                        }
                        return TRUE;
                }
        }

        function getmail($num,$line=-1)
        {
                if($this->state!="TRANSACTION")
                {
                        $this->outdebug("还没有连接服务器或没有成功登陆");
                        return FALSE;
                }
                if($line<0)
                   $command="RETR $num";
                else
                   $command="TOP $num $line";
                if(!$this->command($command,3,"+OK"))
                   return FALSE;
                else
                {
                        $this->getresponse();
                        $is_head=TRUE;
                        while($this->respones!=".")
                        {
                                if($this->debug)
                                   $this->outdebug($this->respones);
                                if(substr($this->respones,0,1)!=".")
                                {
                                        $this->respones=substr($this->respones,1,strlen($this->respones)-1);
                                }
                                if(trim($this->respones)=="")
                                    $is_head=FALSE;
                                if($is_head)
                                   $this->head[]=$this->respones;
                                else
                                   $this->body[]=$this->respones;
                                $this->getresponse();
                        }
                        return TRUE;
                }
        }

        function dele($num)
        {
                if($this->state!="TRANSACTION")
                {
                        $this->outdebug(",不能删除远程信件,还没有连接服务器或没有成功登陆");
                        return FALSE;
                }
                if(!num)
                {
                        $this->outdebug("删除的邮件参数不对");
                        return FALSE;
                }
                if($this->command("DELE $num",3,"+OK")) return TRUE;
                else return FALSE;
        }

        function close()
        {
                if($this->connection!=0)
                {
                        if($this->state=="TRANSACTION")
                           $this->command("QUIT",3,"+OK");
                        fclose($this->connection);
                        $this->connection==0;
                        $this->state="DISCONNECTED";
                }
        }
}

//发送邮件类调用方法

$host="pop3.126.com";
    $user="    ";
    $pass="     ";
    $rec=new pop3($host,110,20);
    if(!$rec->open()) die($rec->err_str);
       echo "open";
    if(!$rec->login($user,$pass)) die($rec->err_str);
       echo "login";
    if(!$rec->stat()) die($rec->err_str);
       echo "共有".$rec->messages."封信件,共".$rec->size."字节大小";
    if($rec->messages>0)
    {
            if(!$rec->listmail()) die($rec->err_str);
               echo "有以下信件:";
            for($i=1;$i<=count($rec->mail_list);$i++)
            {
                    echo "信件".$rec->mail_list[$i][num]."大小".$rec->mail[$i][size]."";
            }
            $rec->getmail(1);
            echo "邮件头的内容:";
            for($i=0;$ihead;$i++)
               echo htmlspecialchars($rec->head[$i])."n";
            for($i=0;$ibody;$i++)
               echo htmlspecialchars($rec->body[$i])."n";
    }
    $rec->close();

热门栏目