您好,欢迎访问一九零五行业门户网

php发送邮件方法二1.(SMTP传输SMTP类)_PHP教程

[html] 
timeout  = 5; 
        $this->status   = smtp_status_not_connected; 
        $this->host     = 'localhost'; 
        $this->port     = 25; 
        $this->auth     = false; 
        $this->user     = ''; 
        $this->pass     = ''; 
        $this->errors   = array(); 
        foreach($params as $key => $value) 
        { 
            $this->$key = $value; 
        }
$this->helo     = $this->host; 
        //  如果没有设置用户名则不验证         
        $this->auth = ('' == $this->user) ? false : true; 
    } 
    function connect($params = array()) 
    { 
        if(!isset($this->status)) 
        { 
            $obj = new p8_smtp($params);
if($obj->connect()) 
            { 
                $obj->status = smtp_status_connected; 
            } 
            return $obj; 
        } 
        else 
        {
$this->connection = fsockopen($this->host, $this->port, $errno, $errstr, $this->timeout); 
            socket_set_timeout($this->connection, 0, 250000); 
            $greeting = $this->get_data();
if(is_resource($this->connection)) 
            { 
                $this->status = 2; 
                return $this->auth ? $this->ehlo() : $this->helo(); 
            } 
            else 
            { 
                $this->errors[] = 'failed to connect to server: '.$errstr; 
                return false; 
            } 
        } 
    }
/** 
     * 参数为数组 
     * recipients      接收人的数组 
     * from            发件人的地址,也将作为回复地址 
     * headers         头部信息的数组 
     * body            邮件的主体 
     */
function send($params = array()) 
    { 
        foreach($params as $key => $value) 
        { 
            $this->set($key, $value); 
        } 
        if($this->is_connected()) 
        { 
            //  服务器是否需要验证      
            if($this->auth) 
            { 
                if(!$this->auth()) return false; 
            } 
            $this->mail($this->from); 
            if(is_array($this->recipients)) 
            { 
                foreach($this->recipients as $value) 
                { 
                    $this->rcpt($value); 
                } 
            } 
            else 
            { 
                $this->rcpt($this->recipients); 
            } 
            if(!$this->data()) return false; 
            $headers = str_replace(crlf.'.', crlf.'..', trim(implode(crlf, $this->headers))); 
            $body    = str_replace(crlf.'.', crlf.'..', $this->body); 
            $body    = $body[0] == '.' ? '.'.$body : $body; 
            $this->send_data($headers); 
            $this->send_data(''); 
            $this->send_data($body); 
            $this->send_data('.'); 
            return (substr(trim($this->get_data()), 0, 3) === '250'); 
        } 
        else 
        { 
            $this->errors[] = 'not connected!'; 
            return false; 
        } 
    }
function helo() 
    { 
        if(is_resource($this->connection) 
                and $this->send_data('helo '.$this->helo) 
                and substr(trim($error = $this->get_data()), 0, 3) === '250' ) 
        { 
            return true; 
        } 
        else 
        { 
            $this->errors[] = 'helo command failed, output: ' . trim(substr(trim($error),3)); 
            return false; 
        } 
    }
function ehlo() 
    { 
        if(is_resource($this->connection) 
                and $this->send_data('ehlo '.$this->helo) 
                and substr(trim($error = $this->get_data()), 0, 3) === '250' ) 
        { 
            return true; 
        } 
        else 
        { 
            $this->errors[] = 'ehlo command failed, output: ' . trim(substr(trim($error),3)); 
            return false; 
        } 
    }
function auth() 
    { 
        if(is_resource($this->connection) 
                and $this->send_data('auth login') 
                and substr(trim($error = $this->get_data()), 0, 3) === '334' 
                and $this->send_data(base64_encode($this->user))            // send username 
                and substr(trim($error = $this->get_data()),0,3) === '334' 
                and $this->send_data(base64_encode($this->pass))            // send password 
                and substr(trim($error = $this->get_data()),0,3) === '235' ) 
        { 
            return true; 
        } 
        else 
        { 
            $this->errors[] = 'auth command failed: ' . trim(substr(trim($error),3)); 
            return false; 
        } 
    }
function mail($from) 
    { 
        if($this->is_connected() 
            and $this->send_data('mail from:') 
            and substr(trim($this->get_data()), 0, 2) === '250' ) 
        { 
            return true; 
        } 
        else 
        { 
            return false; 
        } 
    } 
    function rcpt($to) 
    { 
        if($this->is_connected() 
            and $this->send_data('rcpt to:') 
            and substr(trim($error = $this->get_data()), 0, 2) === '25' ) 
        { 
            return true; 
        } 
        else 
        { 
            $this->errors[] = trim(substr(trim($error), 3)); 
            return false; 
        } 
    } 
    function data() 
    { 
        if($this->is_connected() 
            and $this->send_data('data') 
            and substr(trim($error = $this->get_data()), 0, 3) === '354' ) 
        {  
            return true; 
        } 
        else 
        { 
            $this->errors[] = trim(substr(trim($error), 3)); 
            return false; 
        } 
    } 
    function is_connected() 
    { 
        return (is_resource($this->connection) and ($this->status === smtp_status_connected)); 
    } 
    function send_data($data) 
    { 
        if(is_resource($this->connection)) 
        { 
            return fwrite($this->connection, $data.crlf, strlen($data)+2); 
        } 
        else 
        { 
            return false; 
        } 
    } 
    function &get_data() 
    { 
        $return = ''; 
        $line   = ''; 
        if(is_resource($this->connection)) 
        { 
            while(strpos($return, crlf) === false or substr($line,3,1) !== ' ') 
            { 
                $line    = fgets($this->connection, 512); 
                $return .= $line; 
            } 
            return $return; 
        } 
        else 
        { 
            return false; 
        } 
    } 
    function set($var, $value) 
    { 
        $this->$var = $value; 
        return true; 
    } 
} // end of class
class smtp 

    var $debug; 
    var $host; 
    var $port; 
    var $auth; 
    var $user; 
    var $pass;
function smtp($host = , $port = 25,$auth = false,$user,$pass){ 
        $this->host=$host; 
        $this->port=$port; 
        $this->auth=$auth; 
        $this->user=$user; 
        $this->pass=$pass; 
    }
function sendmail($to,$from, $subject, $content, $t=0){ 
        global $webdb; 
        //$name, $email, $subject, $content, $type=0 
        $type=1; 
        $name=array({$webdb[webname]}会员); 
        $email=array($to); 
        $_cfg['smtp_host']= $this->host; 
        $_cfg['smtp_port']= $this->port; 
        $_cfg['smtp_user']= $this->user; 
        $_cfg['smtp_pass']= $this->pass; 
        $_cfg['name']= $webdb[webname]; 
        $_cfg['smtp_mail']= $from;
//$name = =?utf-8?b?.base64_encode($name).==?=; 
        $subject = =?gbk?b?.base64_encode($subject).==?=; 
        $content = base64_encode($content); 
        $headers[] = to:=?gbk?b?.base64_encode($name[0]).?= ; 
        $headers[] = from:=?gbk?b?.base64_encode($_cfg[name]).?= ; 
        $headers[] = mime-version: blueidea v1.0; 
        $headers[] = x-mailer: 9gongyu mailer v1.0; 
        //$headers[] = from:=?utf-8?b?.base64_encode($_cfg['shop_name']).==?=; 
        $headers[] = subject:$subject; 
        $headers[] = ($type == 0) ? content-type: text/plain; charset=gbk; format=flowed : content-type: text/html; charset=gbk; format=flowed; 
        $headers[] = content-transfer-encoding: base64; 
        $headers[] = content-disposition: inline; 
        //    smtp 服务器信息 
        $params['host'] = $_cfg['smtp_host']; 
        $params['port'] = $_cfg['smtp_port']; 
        $params['user'] = $_cfg['smtp_user']; 
        $params['pass'] = $_cfg['smtp_pass']; 
        if (empty($params['host']) || empty($params['port'])) 
        { 
            // 如果没有设置主机和端口直接返回 false 
            return false; 
        } 
        else 
        { 
            //  发送邮件 
            $send_params['recipients']    = $email; 
            $send_params['headers']        = $headers; 
            $send_params['from']        = $_cfg['smtp_mail']; 
            $send_params['body']        = $content; 
            /*         
            echo

            print_r($params); 
            print_r($send_params); 
            echo

            exit; 
            */ 
            $smtp = new p8_smtp($params); 
            if($smtp->connect() and $smtp->send($send_params)) 
            { 
                return true; 
            } 
            else  
            { 
                return false; 
            } // end if 
        } 
    } 
}
?> 
作者:vericlongmore
http://www.bkjia.com/phpjc/478151.htmlwww.bkjia.comtruehttp://www.bkjia.com/phpjc/478151.htmltecharticle[html] ?php define(smtp_status_not_connected, 1, true); define(smtp_status_connected, 2, true); class p8_smtp { var $connection; var $recipients; var $headers; var $timeout; var $er...
其它类似信息

推荐信息