微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PHP支持发送HTML格式邮件的发送类

下面是编程之家 jb51.cc 通过网络收集整理的代码片段。

编程之家小编现在分享给大家,也给大家做个参考。

    <?PHP  
    /** 
    * 邮件发送类 
    * 支持发送纯文本邮件和HTML格式的邮件 
    * @example 
    * $config = array( 
    *       "from" => "*****",*       "to" => "***",*       "subject" => "test",*       "body" => "<b>test</b>",*       "username" => "***",*       "password" => "****",*       "isHTML" => true 
    *   ); 
    * 
    * $mail = new MySendMail(); 
    * 
    * $mail->setServer("smtp.126.com"); 
    * 
    * $mail->setMailInfo($config); 
    * if(!$mail->sendMail()) { 
    *   echo $mail->error(); 
    *   return 1; 
    * } 
    */  
    class MySendMail{  
        /** 
        * @var 邮件传输代理用户名 
        * @access private 
        */  
        private $_userName;  
       
        /** 
        * @var 邮件传输代理密码 
        * @access private 
        */  
        private $_password;  
       
        /** 
        * @var 邮件传输代理服务器地址 
        * @access protected 
        */  
        protected $_sendServer;  
       
        /** 
        * @var 邮件传输代理服务器端口 
        * @access protected 
        */  
        protected $_port=25;  
       
        /** 
        * @var 发件人 
        * @access protected 
        */  
        protected $_from;  
       
        /** 
        * @var 收件人 
        * @access protected 
        */  
        protected $_to;  
       
        /** 
        * @var 主题 
        * @access protected 
        */  
        protected $_subject;  
       
        /** 
        * @var 邮件正文 
        * @access protected 
        */  
        protected $_body;  
       
        /** 
        * @var 是否是HTML格式的邮件 
        * @access protected 
        */  
        protected $_isHTML=true;  
       
        /** 
        * @var socket资源 
        * @access protected 
        */  
        protected $_socket;  
       
        /** 
        * @var 错误信息 
        * @access protected 
        */  
        protected $_errorMessage;  
       
        public function __construct($from="",$to="",$subject="",$body="",$server="",$username="",$password="",$isHTML="",$port="") {  
            if(!empty($from)){  
                $this->_from = $from;  
            }  
            if(!empty($to)){  
                $this->_to = $to;  
            }  
            if(!empty($subject)){  
                $this->_subject = $subject;  
            }  
            if(!empty($body)){  
                $this->_body = $body;  
            }  
            if(!empty($isHTML)){  
                $this->_isHTML = $isHTML;  
            }  
            if(!empty($server)){  
                $this->_sendServer = $server;  
            }  
            if(!empty($port)){  
                $this->_port = $port;  
            }  
            if(!empty($username)){  
                $this->_userName = $username;  
            }  
            if(!empty($password)){  
                $this->_password = $password;  
            }  
        }  
       
        /** 
        * 设置邮件传输代理 
        * @param string $server 代理服务器的ip或者域名 
        * @param int $port 代理服务器的端口,smtp认25号端口 
        * @param int $localPort 本地端口 
        * @return boolean 
        */  
        public function setServer($server,$port=25) {  
            if(!isset($server) || empty($server) || !is_string($server)) {  
                $this->_errorMessage = "first one is an invalid parameter";  
                return false;  
            }  
            if(!is_numeric($port)){  
                $this->_errorMessage = "first two is an invalid parameter";  
                return false;  
            }  
            $this->_sendServer = $server;  
            $this->_port = $port;  
            return true;  
        }  
       
        /** 
        * 设置邮件 
        * @access public 
        * @param array $config 邮件配置信息 
        * 包含邮件发送人、接收人、主题内容邮件传输代理的验证信息 
        * @return boolean 
        */  
        public function setMailInfo($config) {  
            if(!is_array($config) || count($config) < 6){  
                $this->_errorMessage = "parameters are required";  
                return false;  
            }  
       
            $this->_from = $config['from'];  
            $this->_to = $config['to'];  
            $this->_subject = $config['subject'];  
            $this->_body = $config['body'];  
            $this->_userName = $config['username'];  
            $this->_password = $config['password'];  
            if(isset($config['isHTML'])){  
                $this->_isHTML = $config['isHTML'];  
            }  
       
            return true;  
        }  
       
        /** 
        * 发送邮件 
        * @access public 
        * @return boolean 
        */  
        public function sendMail() {  
            $command = $this->getCommand();  
            $this->socket();  
               
            foreach ($command as $value) {  
                if($this->sendCommand($value[0],$value[1])) {  
                    continue;  
                }  
                else{  
                    return false;  
                }  
            }  
               
            $this->close(); //其实这里也没必要关闭,smtp命令:QUIT发出之后,服务器就关闭了连接,本地的socket资源会自动释放  
            echo 'Mail OK!';  
            return true;  
        }  
       
        /** 
        * 返回错误信息 
        * @return string 
        */  
        public function error(){  
            if(!isset($this->_errorMessage)) {  
                $this->_errorMessage = "";  
            }  
            return $this->_errorMessage;  
        }  
       
        /** 
        * 返回mail命令 
        * @access protected 
        * @return array 
        */  
        protected function getCommand() {  
            if($this->_isHTML) {  
                $mail = "MIME-Version:1.0\r\n";  
                $mail .= "Content-type:text/html;charset=utf-8\r\n";  
                $mail .= "FROM:test<" . $this->_from . ">\r\n";  
                $mail .= "TO:<" . $this->_to . ">\r\n";  
                $mail .= "Subject:" . $this->_subject ."\r\n\r\n";  
                $mail .= $this->_body . "\r\n.\r\n";  
            }  
            else{  
                $mail = "FROM:test<" . $this->_from . ">\r\n";  
                $mail .= "TO:<" . $this->_to . ">\r\n";  
                $mail .= "Subject:" . $this->_subject ."\r\n\r\n";  
                $mail .= $this->_body . "\r\n.\r\n";  
            }  
            $command = array(  
                    array("HELO sendmail\r\n",250),array("AUTH LOGIN\r\n",334),array(base64_encode($this->_userName) . "\r\n",array(base64_encode($this->_password) . "\r\n",235),array("MAIL FROM:<" . $this->_from . ">\r\n",array("RCPT TO:<" . $this->_to . ">\r\n",array("DATA\r\n",354),array($mail,array("QUIT\r\n",221)  
            );  
            return $command;  
        }  
       
        /** 
        * @access protected 
        * @param string $command 发送到服务器的smtp命令 
        * @param int $code 期望服务器返回的响应吗 
        * @param boolean 
        */  
        protected function sendCommand($command,$code) {  
            echo 'Send command:' . $command . ',expected code:' . $code . '<br />';  
            //发送命令给服务器  
            try{  
                if(socket_write($this->_socket,$command,strlen($command))){  
                    //读取服务器返回  
                    $data = trim(socket_read($this->_socket,1024));  
                    echo 'response:' . $data . '<br /><br />';  
                    if($data) {  
                        $pattern = "/^".$code."/";  
                        if(preg_match($pattern,$data)) {  
                            return true;  
                        }  
                        else{  
                            $this->_errorMessage = "Error:" . $data . "|**| command:";  
                            return false;  
                        }  
                    }  
                    else{  
                        $this->_errorMessage = "Error:" . socket_strerror(socket_last_error());  
                        return false;  
                    }  
                }  
                else{  
                    $this->_errorMessage = "Error:" . socket_strerror(socket_last_error());  
                    return false;  
                }  
            }catch(Exception $e) {  
                $this->_errorMessage = "Error:" . $e->getMessage();  
            }  
        }  
       
        /** 
        * 建立到服务器的网络连接 
        * @access private 
        * @return boolean 
        */  
        private function socket() {  
            if(!function_exists("socket_create")) {  
                $this->_errorMessage = "extension PHP-sockets must be enabled";  
                return false;  
            }  
            //创建socket资源  
            $this->_socket = socket_create(AF_INET,SOCK_STREAM,getprotobyname('tcp'));  
               
            if(!$this->_socket) {  
                $this->_errorMessage = socket_strerror(socket_last_error());  
                return false;  
            }  
       
            //连接服务器  
            if(!socket_connect($this->_socket,$this->_sendServer,$this->_port)) {  
                $this->_errorMessage = socket_strerror(socket_last_error());  
                return false;  
            }  
            socket_read($this->_socket,1024);  
               
            return true;  
        }  
       
        /** 
        * 关闭socket 
        * @access private 
        * @return boolean 
        */  
        private function close() {  
            if(isset($this->_socket) && is_object($this->_socket)) {  
                $this->_socket->close();  
                return true;  
            }  
            $this->_errorMessage = "no resource can to be close";  
            return false;  
        }  
    }  
       
       
    /**************************** Test ***********************************/  
    $config = array(  
            "from" => "********@163.com","to" => "******@163.com","subject" => "test","body" => "<b style='font-size:30px;'>test</b>","username" => "******","password" => "password",);  
       
    $mail = new MySendMail();  
       
    $mail->setServer("smtp.163.com");  
       
    $mail->setMailInfo($config);  
    if(!$mail->sendMail()){  
        echo $mail->error();  
        return 1;  
    }  

以上是编程之家(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐