首页 > php代码 > php 发送邮箱实例代码

php 发送邮箱实例代码

<?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();


本文链接:http://www.phprm.com/code/6ea83fe22d06e2064f64eab4f3b1a8e5.html

收藏随意^^请保留教程地址.

标签:none

发表留言