$server = "smtp服务器";
    $user = "发送邮箱";
    $pass = "发送密码";
    $separator = "----=_Part_" . md5($user . time()) . uniqid(); //分隔符
    $command = array(
        array("HELO sendmail\r\n", 250)
    );
    $command[] = array("AUTH LOGIN\r\n", 334);
    $command[] = array(base64_encode($user) . "\r\n", 334);
    $command[] = array(base64_encode($pass) . "\r\n", 235);
    //设置发件人
    $command[] = array("MAIL FROM: <" . $user . ">\r\n", 250);
    $header = "FROM: 发送人<" . $user . ">\r\n";
    //设置收件人
    $command[] = array("RCPT TO: <" . $to . ">\r\n", 250);
    $header .= "TO: <" . $to .">\r\n";
    //主题
    $header .= "Subject: =?UTF-8?B?" . base64_encode($subject) ."?=\r\n";
    $header .= "Content-Type: multipart/alternative;\r\n";
    //邮件头分隔符
    $header .= "\t" . 'boundary="' . $separator . '"';
    $header .= "\r\nMIME-Version: 1.0\r\n";
    //这里开始是邮件的body部分,body部分分成几段发送
    $header .= "\r\n--" . $separator . "\r\n";
    $header .= "Content-Type:text/html; charset=utf-8\r\n";
    $header .= "Content-Transfer-Encoding: base64\r\n\r\n";
    $header .= base64_encode($text) . "\r\n";
    $header .= "--" . $separator . "\r\n";

    $header .= "\r\n.\r\n";
    $command[] = array("DATA\r\n", 354);
    $command[] = array($header, 250);
    $command[] = array("QUIT\r\n", 221);
    //创建socket资源
    $socket = socket_create(AF_INET, SOCK_STREAM, getprotobyname('tcp'));
    socket_set_block($socket);//设置阻塞模式
    socket_connect($socket, $server, "25");
    socket_read($socket, 1024);

    foreach ($command as $value) {
        //try{
        if(socket_write($socket, $value[0], strlen($value[0]))){

            //当邮件内容分多次发送时,没有$code,服务器没有返回
            if(empty($value[1]))  {
                return true;
            }

            //读取服务器返回
            $data = trim(socket_read($socket, 1024));
            //echo 'response:' . $data . '<br /><br />';

            if($data) {
                $pattern = "/^".$value[1]."+?/";
                if(preg_match($pattern, $data)) {
                    $result = true;
                }
                else{
                    //$this->_errorMessage = "Error:" . $data . "|**| command:";
                    $result = false;
                }
            }
            else{
                //$this->_errorMessage = "Error:" . socket_strerror(socket_last_error());
                $result = false;
            }
        }
        else{
            //$this->_errorMessage = "Error:" . socket_strerror(socket_last_error());
            $result = false;
        }
        /*}catch(Exception $e) {
            echo "Error:" . $e->getMessage();
        }*/
        if($result) {
            continue;
        }
        else{
            return false;
        }
    }