青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Javen-Studio 咖啡小屋

http://javenstudio.org - C++ Java 分布式 搜索引擎
Naven's Research Laboratory - Thinking of Life, Imagination of Future

  C++博客 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
  24 隨筆 :: 57 文章 :: 170 評(píng)論 :: 4 Trackbacks

//------------------------------------------------------------------
//                              \\\|///
//                            \\  -^-  //
//                             (  @ @  )
//    +----------------------oOOo-(_)-oOOo---------------------+
//
//           FREE SOFTWARE WRITEN BY NAVY, COPYLEFT (C) 2002
//                       SmtpClient Class 1.0
//               Use smtp server with user authorization
//                         All rights reserved.
//
//                                    Oooo
//    +---------------------- oooO---(   )---------------------+
//                            (   )   ) /
//                             \ (   (_/
//                              \_)
//------------------------------------------------------------------


package encrypt;

import java.io.*;
import java.net.*;
import java.util.Vector;
//import org.apache.commons.logging.Log;
//import org.apache.commons.logging.LogFactory;
import encrypt.Base64;

/***
 * 標(biāo)準(zhǔn)SMTP發(fā)信類(lèi)
 * <p>
 * 標(biāo)準(zhǔn)的純JAVA的SMTP發(fā)信客戶端程序,支持用戶認(rèn)證。
 * <p>
 * <p>
 * @author Naven
 * @see SmtpClient
 ***/

public class SmtpClient
{
    //protected static final Log log = LogFactory.getLog(SmtpClient.class);
   
    private static final String CMD_HELO            = "HELO ";
    private static final String CMD_AUTH_LOGIN      = "AUTH LOGIN ";
    private static final String CMD_MAIL_FROM       = "MAIL FROM: ";
    private static final String CMD_RCPT_TO         = "RCPT TO: ";
    private static final String CMD_DATA            = "DATA";
    private static final String CMD_HELP            = "HELP";
    private static final String CMD_RSET            = "RSET";
    private static final String CMD_NOOP            = "NOOP";
    private static final String CMD_QUIT            = "QUIT";
    private static final String END_OF_MAIL         = "\r\n.\r\n";

    private static final String RCV_SERVOK          = "220";        // 220 服務(wù)就緒
    private static final String RCV_HELO            = "250";        // 250 要求的郵件操作完成
    private static final String RCV_AUTH_LOGIN      = "334";
    private static final String RCV_AUTH_USER       = "334";
    private static final String RCV_AUTH_PASSWD     = "334";
    private static final String RCV_AUTH_OK         = "235";
    private static final String RCV_MAIL_FROM       = "250";
    private static final String RCV_RCPT_TO         = "250";
    private static final String RCV_DATA            = "354";
    private static final String RCV_SEND_END        = "250";
    private static final String RCV_RSET            = "250";
    private static final String RCV_NOOP            = "250";
    private static final String RCV_QUIT            = "221";        // 221 服務(wù)關(guān)閉傳輸信道

    private static final int SEND_BLOCK_SIZE        = 1024;         // 每次發(fā)送信件內(nèi)容的塊的大小
   
    /**
     * BASE64加密對(duì)象
     */
    //private Base64 base64 = new Base64();
   

    private static final int _NOTHING_SPECIAL_STATE = 0;
    private static final int _LAST_WAS_CR_STATE = 1;
    private static final int _LAST_WAS_NL_STATE = 2;

    /**
     * 記錄處理郵件正文數(shù)據(jù)發(fā)送的狀態(tài)
     */
    private int _state = 0;
   
    /**
     * 用于處理郵件正文數(shù)據(jù)發(fā)送同步處理的鎖定
     */
    private Integer lock = new Integer(0);
   
    /**
     * client socket
     */
    private Socket      socketSmtp = null;
   
    /**
     * socket out printwriter
     */
    private PrintWriter     sout = null;
   
    /**
     * socket int reader
     */
    private BufferedReader  sin = null;
   
    /**
     * smtp email server address
     */
    private String      smtpServer = null;
   
    /**
     * email from user for smtp server
     */
    private String      user = null;
   
    /**
     * user password
     */
    private String      passwd = null;
   
    /**
     * sender's email address
     */
    private String      sender = null;
   
    /**
     * email from user for smtp server, base64 encode
     */
    private String      encryptUser = null;
   
    /**
     * user password, base64 encode
     */
    private String      encryptPasswd = null;
   
    /**
     * client localhost
     */
    private String      localHost = null;

    /**
     * error message
     */
    private String      errorString = "NO ERROR";   
   

    /***
     * 初始化發(fā)信類(lèi)
     * <p>
     * @param server  SMTP服務(wù)器地址
     * @param sender  SMTP發(fā)信人郵件地址
     ***/
    public SmtpClient(String server, String sender)
    {
        this(server, null, null, sender);
    }
   
    /***
     * 初始化發(fā)信類(lèi)
     * <p>
     * @param server  SMTP服務(wù)器地址
     * @param user  SMTP發(fā)信人認(rèn)證用戶名
     * @param passwd  SMTP發(fā)信人認(rèn)證密碼
     * @param sender  SMTP發(fā)信人郵件地址
     ***/
    public SmtpClient(String server, String user, String passwd, String sender)
    {
        this.smtpServer = server;
        this.user       = user;
        this.passwd     = passwd;
        this.sender     = sender;

        if( this.user != null && this.passwd != null )
        {
            Base64 base64 = new Base64();
           
            // base64 encode begain
            byte[] buser  = user.getBytes();
            byte[] bpasswd= passwd.getBytes();
   
            base64.startEncode();
            base64.encode(buser, buser.length);
            base64.endEncode();
            this.encryptUser = new String(base64.getEncodedResult());
   
            base64.startEncode();
            base64.encode(bpasswd, bpasswd.length);
            base64.endEncode();
            this.encryptPasswd = new String(base64.getEncodedResult());
        }
    }

    /***
     * 獲取處理的錯(cuò)誤信息
     * <p>
     * @return  錯(cuò)誤信息
     ***/
    public String getError() {
        return errorString;
    }

    /***
     * 當(dāng)出錯(cuò)時(shí)拋出錯(cuò)誤信息
     * <p>
     * @param e  錯(cuò)誤異常
     ***/
    private void onError(Exception e)
    {
        this.errorString = e.getMessage();
        //log.error("onError() " + this.errorString);
        //if( log.isDebugEnabled() ) {
        //    log.debug("onError()", e);
        //}
    }

    /***
     * 檢查SMTP協(xié)議通訊收到的信息是否成功,即以指定返回代號(hào)開(kāi)頭,SMTP協(xié)議標(biāo)準(zhǔn)。
     * <p>
     * @param rcvmsg  SMTP協(xié)議通訊收到的信息
     * @param code  SMTP協(xié)議通訊返回代號(hào)
     * @exception IOException  失敗時(shí)拋出異常
     ***/
    private void check(String rcvmsg, String code)
        throws IOException
    {
        if( code == null || code.length() == 0 ) return;
        if( rcvmsg == null || rcvmsg.startsWith(code) == false )
            throw ( new IOException(rcvmsg) );
    }

    /***
     * 檢查SMTP協(xié)議通訊收到的信息是否成功,即以指定返回代號(hào)數(shù)組中任意個(gè)開(kāi)頭,SMTP協(xié)議標(biāo)準(zhǔn)。
     * <p>
     * @param rcvmsg  SMTP協(xié)議通訊收到的信息
     * @param codes  SMTP協(xié)議通訊返回代號(hào)數(shù)組
     * @exception IOException  失敗時(shí)拋出異常
     ***/
    private void check(String rcvmsg, String[] codes)
        throws IOException
    {
        if( codes == null || codes.length == 0 ) return;
        boolean result = false;
        for( int i=0; rcvmsg != null && i < codes.length && codes[i] != null; i++ ) {
            if( rcvmsg.startsWith(codes[i]) == false ) {
                result = true;
                break;
            }
        }
        if(!result) throw ( new IOException(rcvmsg) );
    }

    /***
     * 往SMTP服務(wù)器寫(xiě)郵件正文數(shù)據(jù)的一個(gè)字節(jié),并處理數(shù)據(jù)中“\r\n.”需轉(zhuǎn)換成“\r\n..”的情況。
     * <p>
     * @param ch  寫(xiě)入的一個(gè)字節(jié)
     * @exception IOException  失敗時(shí)拋出異常
     ***/
    private void write(int ch)
        throws IOException
    {
        synchronized (lock)
        {
            switch (ch)
            {
            case '\r':
                _state = _LAST_WAS_CR_STATE;
                sout.write('\r');
                return ;
            case '\n':
                if (_state != _LAST_WAS_CR_STATE)
                    sout.write('\r');
                sout.write('\n');
                _state = _LAST_WAS_NL_STATE;
                return ;
            case '.':
                // Double the dot at the beginning of a line
                if (_state == _LAST_WAS_NL_STATE)
                    sout.write('.');
                // Fall through
            default:
                _state = _NOTHING_SPECIAL_STATE;
                sout.write(ch);
                return ;
            }
        }
    }

    /***
     * 往SMTP服務(wù)器寫(xiě)郵件正文數(shù)據(jù)的一段數(shù)據(jù),并處理數(shù)據(jù)中“\r\n.”需轉(zhuǎn)換成“\r\n..”的情況。
     * <p>
     * @param buffer  寫(xiě)入的數(shù)據(jù)緩沖
     * @param offset  寫(xiě)入的數(shù)據(jù)緩沖的偏移
     * @param length  寫(xiě)入的數(shù)據(jù)緩沖的長(zhǎng)度
     * @exception IOException  失敗時(shí)拋出異常
     ***/
    private void write(char[] buffer, int offset, int length)
        throws IOException
    {
        synchronized (lock)
        {
            while (length-- > 0)
                write(buffer[offset++]);
        }
    }

    /***
     * 往SMTP服務(wù)器寫(xiě)郵件正文數(shù)據(jù)的一段數(shù)據(jù),并處理數(shù)據(jù)中“\r\n.”需轉(zhuǎn)換成“\r\n..”的情況。
     * <p>
     * @param buffer  寫(xiě)入的數(shù)據(jù)緩沖
     * @exception IOException  失敗時(shí)拋出異常
     ***/
    private void write(char[] buffer)
        throws IOException
    {
        write(buffer, 0, buffer.length);
    }

    /***
     * 往SMTP服務(wù)器寫(xiě)郵件正文數(shù)據(jù)的一段數(shù)據(jù),并處理數(shù)據(jù)中“\r\n.”需轉(zhuǎn)換成“\r\n..”的情況。
     * <p>
     * @param string  寫(xiě)入的數(shù)據(jù)字符串
     * @exception IOException  失敗時(shí)拋出異常
     ***/
    private void write(String string)
        throws IOException
    {
        write(string.toCharArray());
    }

    /***
     * 將SOCKET STREAM緩沖區(qū)的數(shù)據(jù)刷新,提交出去。
     * <p>
     * @exception IOException  失敗時(shí)拋出異常
     ***/
    private void flush()
        throws IOException
    {
        synchronized (lock)
        {
            sout.flush();
        }
    }

    /***
     * 往SMTP服務(wù)器寫(xiě)一行數(shù)據(jù)。
     * <p>
     * @param msg  寫(xiě)入的一行數(shù)據(jù)字符串
     * @exception IOException  失敗時(shí)拋出異常
     ***/
    private void sendln(String msg)
        throws IOException
    {
        if( msg == null ) msg = "";
       
        sout.println(msg);
        sout.flush();
       
        //if( log.isDebugEnabled() ) {
        //    log.debug("sendln() ==>: "+msg);
        //}
    }

    /***
     * 往SMTP服務(wù)器寫(xiě)字符串?dāng)?shù)據(jù)。
     * <p>
     * @param msg  寫(xiě)入的字符串
     * @exception IOException  失敗時(shí)拋出異常
     ***/
    private void send(String msg)
        throws IOException
    {
        if( msg == null ) msg = "";
       
        sout.write(msg);
        sout.flush();
       
        //if( log.isDebugEnabled() ) {
        //    log.debug("send() ==>: "+msg);
        //}
    }

    /***
     * 往SMTP服務(wù)器寫(xiě)一段大字符串?dāng)?shù)據(jù)。
     * <p>
     * @param text  寫(xiě)入的字符串?dāng)?shù)據(jù)
     * @exception IOException  失敗時(shí)拋出異常
     ***/
    private void sendtext(String text)
        throws IOException
    {
        if( text == null ) text = "";
       
        if( text.length() > SEND_BLOCK_SIZE ) {
            int i = 0;
            while( i <= text.length() ) {
                if( (i + SEND_BLOCK_SIZE) < text.length() )
                    write(text.substring(i, (i+SEND_BLOCK_SIZE)));
                else
                    write(text.substring(i));
                flush();
                i = i + SEND_BLOCK_SIZE;
            }
           
            //if( log.isDebugEnabled() ) {
            //    log.debug("sendtext() ==>: <Email Mesg> "+text.length()+" chars");
            //}
        }
        else {
            write(text);
            flush();
           
            //if( log.isDebugEnabled() ) {
            //    log.debug("sendtext() ==>: "+text);
            //}
        }
    }

    /***
     * 從SMTP服務(wù)器接收一行字符串?dāng)?shù)據(jù)。
     * <p>
     * @return  讀取的字符串?dāng)?shù)據(jù)
     * @exception IOException  失敗時(shí)拋出異常
     ***/
    private String receive()
        throws IOException
    {
        String rcvmsg = sin.readLine();
        //if( log.isDebugEnabled() ) {
        //    log.debug("receive() <==: " + rcvmsg);
        //}
        return rcvmsg;
    }

    /***
     * 從SMTP服務(wù)器接收一行字符串?dāng)?shù)據(jù),并判斷是否是成功的返回值。
     * <p>
     * @param code  正確的SMTP協(xié)議代碼
     * @return  讀取的字符串?dāng)?shù)據(jù)
     * @exception IOException  失敗時(shí)拋出異常
     ***/
    private String receive(String code)
        throws IOException
    {
        String rcvmsg = receive();
        check(rcvmsg, code);
        return rcvmsg;
    }
   
    /***
     * 從SMTP服務(wù)器接收一行字符串?dāng)?shù)據(jù),并判斷是否是成功的返回值數(shù)組的一個(gè)。
     * <p>
     * @param codes  正確的SMTP協(xié)議代碼數(shù)組
     * @return  讀取的字符串?dāng)?shù)據(jù)
     * @exception IOException  失敗時(shí)拋出異常
     ***/
    private String receive(String[] codes)
        throws IOException
    {
        String rcvmsg = receive();
        check(rcvmsg, codes);
        return rcvmsg;
    }
   
    /***
     * 連接SMTP服務(wù)器并發(fā)送用戶名和密碼認(rèn)證。
     * <p>
     * @return  返回成功失敗結(jié)果
     * @exception IOException  失敗時(shí)拋出異常
     ***/
    public boolean connect()
    {
        // connect to smtp server and autherize
        try{
            // get localhost name
            localHost = InetAddress.getLocalHost().getHostName();
            //if( log.isDebugEnabled() ) {
            //    log.debug("connect() localhost: " + localHost);
            //}

            // connect to smtp server
            socketSmtp = new Socket(smtpServer, 25);
            sout       = new PrintWriter(new OutputStreamWriter(socketSmtp.getOutputStream()));
            sin        = new BufferedReader(new InputStreamReader(socketSmtp.getInputStream()));
            receive(RCV_SERVOK);

            // hello
            sendln(CMD_HELO + localHost);
            receive(RCV_HELO);
           
            if( encryptUser != null && encryptPasswd != null )
            {
                // auth login
                sendln(CMD_AUTH_LOGIN);
                receive(RCV_AUTH_LOGIN);
   
                // base64 encode end
                sendln(encryptUser);
                receive(RCV_AUTH_USER);
                sendln(encryptPasswd);
                receive(RCV_AUTH_OK);
            }
        }
        catch(IOException e) {
            onError(e);
            closeall();
            return false;
        }
       
        return true;
    }

    /***
     * 連接SMTP服務(wù)器并發(fā)送郵件。
     * <p>
     * @param to  收件人郵件地址
     * @param msg  郵件數(shù)據(jù)
     * @return  返回成功失敗結(jié)果
     * @exception IOException  失敗時(shí)拋出異常
     ***/
    public boolean sendMail(String to, String msg) {   
        return sendMail(to, msg, null);
    }
   
    /***
     * 連接SMTP服務(wù)器并發(fā)送郵件。
     * <p>
     * @param to  收件人郵件地址
     * @param msg  郵件數(shù)據(jù)
     * @param cc  CC收件人郵件地址
     * @return  返回成功失敗結(jié)果
     * @exception IOException  失敗時(shí)拋出異常
     ***/
    public boolean sendMail(String to, String msg, Vector cc)
    {
        if( socketSmtp == null || sout == null || sin == null ) {
            closeall();
            if( !connect() ) return false;
        }

        boolean retval = false;
        int count = 0;
        // try send for 3 times if error
        while( retval == false && count < 3 ) {
          try {
            // mail from
            sendln(CMD_MAIL_FROM + sender);
            receive(RCV_MAIL_FROM);
           
            // send to
            sendln(CMD_RCPT_TO + to);
            receive(RCV_RCPT_TO);
           
            // perform cc
            int ccSize = 0;
            if(cc != null && (ccSize = cc.size()) > 0){
                for(int i = 0; i < ccSize; i ++){                   
                    sendln(CMD_RCPT_TO + (String)cc.elementAt(i));
                    receive(RCV_RCPT_TO);
                }
            }
            // end cc
           
            // begain send mail data
            sendln(CMD_DATA);
            receive(RCV_DATA);
            sendtext(msg);
            sendln(END_OF_MAIL);
            receive(RCV_SEND_END);
           
            // send success
            //receive(); // I dont know why 263.net.cn need receve again
            retval = true;
          }
          catch(IOException e) {
            onError(e);
            retval = false;
            count ++;
            try{
                // reset and send again
                sendln(CMD_RSET);
                receive(RCV_RSET);
            }
            catch(Exception e2) {
                //log.error("sendMail()", e2);
                break;
            }
          }
        }

        return retval;
    }

    /***
     * 關(guān)閉與SMTP服務(wù)器連接。
     * <p>
     ***/
    private void closeall()
    {
        try {
            if( sout != null ) {
                sout.close(); sout = null;
            }
            if( sin != null ) {
                sin.close(); sin = null;
            }
            if( socketSmtp != null ) {
                socketSmtp.close(); socketSmtp = null;
            }
        }
        catch(IOException e) {
            //log.error("closeall()", e);
        }
    }

    /***
     * 關(guān)閉與SMTP服務(wù)器連接并釋放資源。
     * <p>
     ***/
    public void release()
    {
        close();
       
        this.socketSmtp     = null;    // client socket
        this.sout           = null;    // socket out printstream
        this.sin            = null;    // socket int reader
        this.smtpServer     = null;    // smtp email server address
        this.user           = null;    // email from user for smtp server
        this.passwd         = null;    // user password
        this.sender         = null;    // sender's email address
        this.encryptUser    = null;    // base64 encode
        this.encryptPasswd  = null;    // base64 encode
        this.localHost      = null;    // client localhost

        this.errorString    = "NO ERROR";
    }

    /***
     * 發(fā)送QUIT命令并關(guān)閉與SMTP服務(wù)器連接。
     * <p>
     ***/
    public boolean close()
    {
        boolean retval = true;
       
        if( sout != null && sin != null ) {
            try {
                // send finish quit
                sendln(CMD_QUIT);
                //receive();
                retval = true;
            }
            catch(IOException e) {
                retval = false;
                //log.error("close()", e);
            }
        }
        closeall();
       
        return retval;
    }

    public String toString() {
        return getClass().getName() +
                " Server: " + smtpServer + " User: " + user +
                " Passwd: " + passwd + " Sender: " + sender;
    }
       
}///:~

posted on 2005-10-03 11:48 Javen-Studio 閱讀(547) 評(píng)論(0)  編輯 收藏 引用

只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久一区二区精品| 美女图片一区二区| 久久不射中文字幕| 欧美在线观看一二区| 欧美亚洲一区二区在线观看| 午夜精品一区二区三区在线播放| 亚洲免费视频一区二区| 午夜一级在线看亚洲| 午夜视频在线观看一区| 欧美自拍偷拍| 久久久久久一区| 女人香蕉久久**毛片精品| 欧美激情第8页| 日韩亚洲欧美综合| 亚洲一区激情| 久久精品国产第一区二区三区| 久久男女视频| 欧美激情精品久久久六区热门 | 精品电影在线观看| 亚洲国产精品黑人久久久| 亚洲美女视频网| 亚洲一区二区少妇| 久久噜噜噜精品国产亚洲综合| 欧美成人一区二区三区在线观看 | 国产精品啊v在线| 国产精品一区在线观看你懂的| 国内自拍一区| 亚洲精品偷拍| 欧美亚洲免费电影| 欧美1区2区| 一区二区三区毛片| 久久久久国产成人精品亚洲午夜| 男男成人高潮片免费网站| 欧美图区在线视频| 黄色免费成人| 中国av一区| 久久综合久久美利坚合众国| 亚洲精品一区二区网址| 先锋影音一区二区三区| 欧美国产激情二区三区| 国产欧美日本在线| 亚洲人成绝费网站色www| 午夜欧美精品| 亚洲高清久久| 欧美亚洲网站| 欧美日韩国产色视频| 国产综合视频| 亚洲影视九九影院在线观看| 女人色偷偷aa久久天堂| 亚洲自拍偷拍一区| 欧美激情自拍| 在线精品国产欧美| 午夜性色一区二区三区免费视频| 亚洲成人资源| 欧美在线国产精品| 国产精品九九久久久久久久| 亚洲国产精品美女| 久久久精彩视频| 在线综合亚洲| 欧美伦理一区二区| 在线免费观看视频一区| 久久xxxx精品视频| 99视频+国产日韩欧美| 免费成人你懂的| 狠狠色丁香婷婷综合久久片| 亚洲一区二区视频在线| 亚洲国产电影| 久久久夜夜夜| 国外成人网址| 久久狠狠婷婷| 亚洲一级影院| 欧美视频一区二区| 日韩一级免费| 亚洲国产精品免费| 久久亚洲国产精品日日av夜夜| 国产精品影片在线观看| 亚洲女优在线| 99精品欧美一区二区三区 | 亚洲人成网站色ww在线| 久久青青草综合| 欧美在线网站| 国产日韩精品一区二区三区在线| 亚洲在线网站| 一本到12不卡视频在线dvd| 欧美精品成人在线| 日韩写真在线| 亚洲国产免费看| 欧美成人自拍视频| 亚洲国产婷婷香蕉久久久久久| 麻豆国产精品777777在线| 久久国产成人| 国色天香一区二区| 久久综合伊人77777蜜臀| 欧美一区国产二区| 黑人一区二区| 麻豆成人av| 美日韩精品免费| 亚洲精品中文字幕女同| 亚洲国产精品久久久久秋霞影院| 男女精品网站| 99热这里只有成人精品国产| 91久久在线| 欧美三级电影一区| 午夜精品久久久久久| 亚洲自拍偷拍视频| 国产一区二区中文| 美日韩在线观看| 免费国产自线拍一欧美视频| 亚洲欧洲在线观看| 亚洲精品在线观| 国产精品国产福利国产秒拍| 亚洲欧美综合精品久久成人| 亚洲欧美日韩成人| 国产综合精品一区| 欧美电影电视剧在线观看| 欧美激情一区二区三区在线视频观看| 99热在这里有精品免费| 中文成人激情娱乐网| 国产欧美在线| 欧美成人精品一区| 欧美另类久久久品| 欧美一级淫片aaaaaaa视频| 欧美一区二视频在线免费观看| 亚洲成人在线观看视频| 亚洲国产日韩在线| 国产精品电影观看| 久久亚洲私人国产精品va媚药 | 亚洲欧美日韩人成在线播放| 国产主播一区二区三区| 欧美韩国日本一区| 国产精品成人播放| 久久男人资源视频| 欧美精品在线网站| 欧美专区在线播放| 欧美aⅴ一区二区三区视频| 亚洲午夜免费视频| 久久精品亚洲一区| 一区二区三区日韩欧美| 性8sex亚洲区入口| 亚洲美女淫视频| 性欧美xxxx大乳国产app| 亚洲级视频在线观看免费1级| 一区二区高清在线观看| 极品少妇一区二区| 亚洲美女av电影| 激情小说亚洲一区| 99成人在线| ●精品国产综合乱码久久久久| 一本一本久久| 亚洲国产欧美日韩| 亚洲欧美国产精品va在线观看| 亚洲国产精品电影| 亚洲欧美日韩综合一区| 亚洲九九精品| 久久精品国产第一区二区三区| 妖精视频成人观看www| 久久久久久久成人| 亚洲欧美日韩天堂| 欧美激情久久久久| 免费不卡视频| 国产区亚洲区欧美区| 亚洲日本va午夜在线影院| 国内成人精品视频| 亚洲午夜av| avtt综合网| 六月天综合网| 久久久xxx| 国产精品一区二区三区观看| 亚洲欧洲一区二区在线观看| 一区视频在线| 欧美一区二区三区在线看| 亚洲天堂免费在线观看视频| 欧美 日韩 国产 一区| 久久久久欧美| 国产欧美日韩在线观看| 一本一本久久a久久精品综合麻豆| 亚洲二区免费| 久久九九热re6这里有精品| 欧美一级大片在线观看| 欧美日韩调教| 亚洲精品影视在线观看| 亚洲片国产一区一级在线观看| 久久精视频免费在线久久完整在线看| 午夜一区不卡| 国产精品日韩一区| 一区二区欧美激情| 一区二区冒白浆视频| 欧美精品三级日韩久久| 亚洲国产美女精品久久久久∴| 在线看日韩欧美| 久久成人精品无人区| 久久不射网站| 国产日韩欧美高清| 亚洲欧美在线观看| 欧美一区二区久久久| 国产精品一区二区在线观看网站 | 中日韩在线视频| 欧美日本簧片| 日韩视频在线观看一区二区| 99视频热这里只有精品免费|