国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

javamail模擬郵箱功能獲取郵件內(nèi)容-中級(jí)實(shí)戰(zhàn)篇【內(nèi)容|附件下載方法】(javamail API電子郵件實(shí)例)

2019-11-14 21:39:12
字體:
供稿:網(wǎng)友
javamail模擬郵箱功能獲取郵件內(nèi)容-中級(jí)實(shí)戰(zhàn)篇【內(nèi)容|附件下載方法】(javamail API電子郵件實(shí)例)

引言:

  JavaMail jar包下載地址:http://java.sun.com/PRoducts/javamail/downloads/index.html

  此篇是緊隨上篇文章而封裝出來的,閱讀本篇章建議先閱讀上一篇 -->javamail模擬郵箱功能發(fā)送電子郵件-中級(jí)實(shí)戰(zhàn)篇【新增附件發(fā)送方法】(javamail API電子郵件實(shí)例)

  在上一篇中,講解了郵件發(fā)送的兩個(gè)基本方法(HTML和附件),并且引入了兩個(gè)新類MultipartBodyPart兩類,整體結(jié)構(gòu)比較緊湊,郵件的服務(wù)實(shí)體類和發(fā)送的業(yè)務(wù)方法耦合在一起,本篇章節(jié)中將再次對(duì)模塊進(jìn)行拆分,來實(shí)現(xiàn)簡(jiǎn)單責(zé)任原則。新優(yōu)化為:郵件基礎(chǔ)父類,郵件基礎(chǔ)服務(wù)類,發(fā)送郵件業(yè)務(wù)類,收取郵件業(yè)務(wù)類,下面會(huì)為大家列出詳細(xì)列表。

  既然本章節(jié)主要講解的是郵件的接收|查看,就先來分析下郵件的發(fā)送和讀取有什么本質(zhì)上的區(qū)別(總結(jié)的不一定全面,請(qǐng)見諒~)。

  相同之處是:他們都需要初始化服務(wù)實(shí)體類里的各大屬性,如:propertis文件、Message消息、session郵件會(huì)話等,在操作附件時(shí)都用到了io流的操作。

  不同之處是:郵件發(fā)送會(huì)用到Transport通道,協(xié)議使用的是SMTP協(xié)議,而郵件接收則用到的是Store容器類,且協(xié)議一般廣泛使用POP(最新為POP3)協(xié)議,這種協(xié)議需要用戶自定義設(shè)置里面開啟才能使用,并且目前該協(xié)議只支持收件箱的讀取(吐槽下 ‘-.-’ ,要能讀私密文件夾,那豈不***)。

javax.mail.Store:容器類,由它來訪問用戶保存在服務(wù)器上的各個(gè)郵件夾

示例結(jié)構(gòu):

  本篇示例代碼分了4類(都是在前一章節(jié)基礎(chǔ)上進(jìn)行拆分的,并且把test測(cè)試都融合在各自的業(yè)務(wù)類里面【簡(jiǎn)單main方法】)

  • EmailEntity 類 郵件基礎(chǔ)父類 【和上一章相同】 點(diǎn)我查看上一章節(jié) 
  • EmailServiceEnity 類 郵件服務(wù)支持類,繼承郵件基礎(chǔ)父類,并聲明其他必要的私有屬性(propertis文件、Message消息、Session郵件會(huì)話等)
  • SendEmailService 類 郵件發(fā)送業(yè)務(wù)類,封裝郵件發(fā)送的兩個(gè)方法(HTML和附件)
  • LookEmailService 類 郵件接收|查看業(yè)務(wù)類,封裝郵件查看方法(正文閱讀和附件下載)

實(shí)例代碼演示:

  **************復(fù)制此四個(gè)類可直接跑測(cè)試**************注釋部分我盡可能詳細(xì)講解每個(gè)方法的作用**************

EmailEntity 類 (有復(fù)制之前章節(jié)的可忽略此類)

package com.cplatform.movie.back.javamail;import javax.mail.Authenticator;import javax.mail.PassWordAuthentication;/** * 郵件基礎(chǔ)實(shí)體類 * @author liuyt * @date  2014-10-24 下午2:12:10 */public class EmailEntity extends Authenticator {    /**     * 用戶名(登錄郵箱)     */    protected static String username;    /**     * 密碼     */    protected static String password;    /**     * 初始化郵箱地址和密碼     * @param username 郵箱     * @param password 密碼     */    public EmailEntity(String username, String password) {        EmailEntity.username = "這里填寫發(fā)件箱地址";        EmailEntity.password = "這里填寫發(fā)件箱密碼";    }    /**     * 重寫自我檢驗(yàn)方法     */    @Override    protected PasswordAuthentication getPasswordAuthentication() {        return new PasswordAuthentication(username, password);    }        String getPassword() {        return password;    }        String getUsername() {        return username;    }    public void setPassword(String password) {        EmailEntity.password = password;    }    public void setUsername(String username) {        EmailEntity.username = username;    }}
EmailEntity 基礎(chǔ)實(shí)體類,點(diǎn)擊可展開閱讀

EmailServiceEnity類 (較之前章節(jié)有拆分操作)

package com.cplatform.movie.back.javamail;import java.io.UnsupportedEncodingException;import java.util.Properties;import javax.mail.Message;import javax.mail.MessagingException;import javax.mail.NoSuchProviderException;import javax.mail.Session;import javax.mail.Transport;import javax.mail.internet.InternetAddress;import javax.mail.internet.MimeMessage;import com.cplatform.movie.back.javamail.SimpleEmailFunction.MyAuthenricator;/** * 郵件服務(wù)支持類 * @author liuyt * @date  2014-10-24 下午2:11:38 */public class EmailServiceEnity extends EmailEntity{    // java.util.propertis 類    private transient Properties props;    // 一個(gè)郵件會(huì)話    private transient Session session;    // 郵件消息    private transient MimeMessage message;    // 郵件傳輸對(duì)象    private Transport transport;    // 郵件發(fā)送內(nèi)容    private String content;    // 郵件內(nèi)容格式    private final String CONTENT_TYPE_HTML = "text/html;charset=utf-8";    // 端口號(hào)     private final static String MAIL_PORT = "25";    // 郵箱協(xié)議常量    public static final  String MAIL_PROTOCOL_SMTP = "smtp";    public static final  String MAIL_PROTOCOL_POP3 = "pop3";    // 郵箱所使用的協(xié)議    private String mailProtocol;    // 郵箱服務(wù)器列表    private String hostPort;    //////////////////分//////////////////界/////////////////////線/////////////////////////////            /**     * 實(shí)參構(gòu)造     * @param  mailToaddress  收件人地址,多個(gè)以逗號(hào)隔開     * @param  content               郵件內(nèi)容     * @throws MessagingException      * @throws UnsupportedEncodingException      */    public EmailServiceEnity(String mailToaddress, String content, String mailProtocol) throws UnsupportedEncodingException, MessagingException {        super(username, password);        this.setMailProtocol(mailProtocol);        this.setHostPort(mailProtocol +"."+ username.split("@")[1]);        this.content = content;        this.session = this.initSession();        this.message = this.initMessage(this.getSession(), mailToaddress);        // 這里需要對(duì)協(xié)議進(jìn)行判斷,SMTP:為發(fā)送協(xié)議(初始化Transport)    POP3:則為接收協(xié)議(只能初始化Store,在接收郵件章節(jié)用到)        if(this.getMailProtocol().equals(MAIL_PROTOCOL_SMTP)){            this.transport = this.initTransport(this.getSession());        }    }        /**     * 初始化perps文件     * @return     */    public Properties initPrope() {        // 初始化props文件        props = new Properties();        props.setProperty("mail.transport.protocol", this.getMailProtocol());//發(fā)送郵件協(xié)議        props.put("mail.smtp.auth", "true");        //需要驗(yàn)證        props.put("mail.smtp.host", this.getHostPort());    //服務(wù)器地址          return props;    }        /**     * 初始化session會(huì)話     * @return     */    public Session initSession() {        session = Session.getInstance(this.initPrope(),new MyAuthenricator(username, password));        session.setDebug(true);        return session;    }        /**     * 初始化Message消息     * @param session     * @return     * @throws MessagingException     * @throws UnsupportedEncodingException     */    public MimeMessage initMessage(Session session, String mailToaddress) throws MessagingException, UnsupportedEncodingException {        message = new MimeMessage(session);                // 設(shè)置發(fā)件人地址        message.setFrom(new InternetAddress(username, "要顯示的發(fā)件人名稱"));                // 設(shè)置郵件主題        message.setSubject("主題:默認(rèn)主題");                // 設(shè)置郵件發(fā)送內(nèi)容和內(nèi)容的content-type        message.setContent(content.toString(),this.CONTENT_TYPE_HTML);                // 設(shè)置郵件接收人地址        if(mailToaddress.trim().length() > 0) {            String [] address = mailToaddress.split(",");            for(int i=0; i<address.length; i++) {                // addRecipient(該方法為添加收件人列表,參數(shù)一為類型:TO-收件人,CC-抄送,參數(shù)二為一個(gè)郵件地址)                message.addRecipient(Message.RecipientType.TO, new InternetAddress(address[i].trim()));                // 下面方法為傳遞一個(gè)收件地址字符串 (二者方法任選其一即可)                message.addRecipients(Message.RecipientType.CC, address[i].trim());            }        }        return message;    }        /**     * 初始化Transport     * @param session     * @return     * @throws NoSuchProviderException     */    public Transport initTransport(Session session) throws NoSuchProviderException {        transport = session.getTransport();         return transport;    }            /***************** 提供必要的get set方法支持  ************飄逸的分割線****************/    public Session getSession() {        return session;    }    public void setSession(Session session) {        this.session = session;    }    public MimeMessage getMessage() {        return message;    }    public void setMessage(MimeMessage message) {        this.message = message;    }    public Properties getProps() {        return props;    }    public  String getContentTypeHtml() {        return CONTENT_TYPE_HTML;    }    public static String getMailPort() {        return MAIL_PORT;    }    public String getHostPort() {        return hostPort;    }    public void setHostPort(String hostPort) {        this.hostPort = hostPort;    }    public Transport getTransport() {        return transport;    }    public void setTransport(Transport transport) {        this.transport = transport;    }    public void setProps(Properties props) {        this.props = props;    }    public String getContent() {        return content;    }    public void setContent(String content) {        this.content = content;    }    public String getCONTENT_TYPE_HTML() {        return CONTENT_TYPE_HTML;    }    public static String getMailProtocolSmtp() {        return MAIL_PROTOCOL_SMTP;    }    public static String getMailProtocolPop3() {        return MAIL_PROTOCOL_POP3;    }    public String getMailProtocol() {        return mailProtocol;    }    public void setMailProtocol(String mailProtocol) {        this.mailProtocol = mailProtocol;    }        }

SendEmailService 類

package com.cplatform.movie.back.javamail;import java.io.File;import java.io.UnsupportedEncodingException;import javax.activation.DataHandler;import javax.activation.FileDataSource;import javax.mail.BodyPart;import javax.mail.Message;import javax.mail.MessagingException;import javax.mail.Multipart;import javax.mail.internet.MimeBodyPart;import javax.mail.internet.MimeMultipart;import com.sun.xml.internal.messaging.saaj.packaging.mime.internet.MimeUtility;/** * 郵件發(fā)送業(yè)務(wù)類 * @author liuyt * @date  2014-10-26 上午11:17:45 */public class SendEmailService {    private EmailServiceEnity serviceEnity;        /**     * 發(fā)送HTML內(nèi)容郵件 (包括TEXT格式)     * @throws MessagingException      */    public void senDHTMLOrText() throws MessagingException {        this.send();    }        /**     * 附件發(fā)送      * @param file        java.io.File     * @param fileName    附件名     * @throws MessagingException     * @throws UnsupportedEncodingException     */    public void sendFile(File file, String fileName) throws MessagingException, UnsupportedEncodingException {        // 獲得Message實(shí)例        Message message = serviceEnity.getMessage();                // 創(chuàng)建multipart容器用來容納bodyPart(部件)        Multipart multipart = new MimeMultipart();                /**         * 創(chuàng)建一個(gè)BodyPart內(nèi)容報(bào)文         * 每個(gè)消息都有多個(gè)部分組成,每個(gè)部分是一個(gè)BodyPart報(bào)文部分,多個(gè)BodyPart部分又同時(shí)組成一個(gè)Multipart的容器         */        BodyPart messageBodyPart = new MimeBodyPart();                // 設(shè)置該報(bào)文的內(nèi)容        messageBodyPart.setContent(serviceEnity.getContent(),serviceEnity.getCONTENT_TYPE_HTML());                // 添加bodyPart報(bào)文部分到multiPart容器        multipart.addBodyPart(messageBodyPart);        // 創(chuàng)建一個(gè)附件報(bào)文        messageBodyPart = new MimeBodyPart();                // 文件源        FileDataSource fds = new FileDataSource(file);                // 設(shè)置郵件的內(nèi)含附件 (設(shè)置數(shù)據(jù)源為復(fù)件)        messageBodyPart.setDataHandler(new DataHandler(fds));                // 設(shè)置附件的文件名,需進(jìn)行編碼,否則文件名會(huì)亂碼        messageBodyPart.setFileName(MimeUtility.encodeText(fileName));                // 添加到容器        multipart.addBodyPart(messageBodyPart);        // 添加報(bào)文容器到消息實(shí)例        message.setContent(multipart);                // 發(fā)送消息        this.send();    }        /**     * 發(fā)送     * 推薦使用方法一,因?yàn)榉椒ǘ绻占藶槎鄠€(gè)的話,會(huì)為每個(gè)人都打開一個(gè)Transport通道再關(guān)閉     * 而方法一在發(fā)送過程中一直保持連接通常,所有操作完成后才關(guān)閉     * @throws MessagingException     */    public void send() throws MessagingException {        Message message = serviceEnity.getMessage();        // 方法一        serviceEnity.getTransport().connect();        serviceEnity.getTransport().sendMessage(message, message.getAllRecipients());        serviceEnity.getTransport().close();                // 方法二        // Transport.send(this.getMessage());    }        // main 方法測(cè)試    public static void main(String[] args) {        SendEmailService service;        EmailServiceEnity enity;        // 多個(gè)收件人中間以逗號(hào)間隔        String mailToaddress = "418874847@QQ.com,12450374@qq.com";                // 正文(內(nèi)容)部分        String content = "點(diǎn)擊進(jìn)入» <a href='http://m.survivalescaperooms.com/liuyitian'>劉一天的博客</a>";                try {            service = new SendEmailService();            enity = new EmailServiceEnity(mailToaddress, content, EmailServiceEnity.MAIL_PROTOCOL_SMTP);            service.setServiceEnity(enity);            service.sendHtmlOrText(); // 測(cè)試HTML文本                        /**             * 切勿使用同一個(gè)EmailServiceEnity實(shí)例來發(fā)送不同內(nèi)容,如有需要就再初始化一個(gè)新實(shí)例(否則附件發(fā)送失敗且亂碼)             * 因?yàn)槊總€(gè)實(shí)例在發(fā)送完郵件后就會(huì)關(guān)閉Transport             */            enity = new EmailServiceEnity(mailToaddress, content, EmailServiceEnity.MAIL_PROTOCOL_SMTP);            service.setServiceEnity(enity);            // 傳入一個(gè)絕對(duì)位置的文件路徑            File file = new File("d:/data/adimg/20141022/09/ad_20141022094708943.jpg");            service.sendFile(file,"測(cè)試附件發(fā)送.jpg"); // 測(cè)試復(fù)件發(fā)送                    } catch (UnsupportedEncodingException e1) {            e1.printStackTrace();        } catch (MessagingException e1) {            e1.printStackTrace();        }    }        public EmailServiceEnity getServiceEnity() {        return serviceEnity;    }    public void setServiceEnity(EmailServiceEnity serviceEnity) {        this.serviceEnity = serviceEnity;    }}

LookEmailService 類

package com.cplatform.movie.back.javamail;import java.io.DataInputStream;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import javax.mail.BodyPart;import javax.mail.Folder;import javax.mail.Message;import javax.mail.MessagingException;import javax.mail.Multipart;import javax.mail.Store;import javax.mail.internet.MimeUtility;/** * 查看|接收郵件業(yè)務(wù)類 * @author liuyt * @date  2014-10-24 下午2:04:48 */public class LookEmailService {    private transient EmailServiceEnity emailService;        public void lookEmail() throws MessagingException, IOException, InterruptedException {                /**         * 接收郵件時(shí),郵箱的協(xié)議為POP3,SMTP為郵件傳輸協(xié)議,這里別搞混了         * 并且檢查你的郵箱設(shè)置POP3功能是否開啟         */        emailService = new EmailServiceEnity("", "",EmailServiceEnity.MAIL_PROTOCOL_POP3);                /**         *  javax.mail.Store類用于連接郵件接收服務(wù)器,并訪問郵件接收服務(wù)器上的各個(gè)郵箱夾         *  javax.mail.Folder類表示郵件夾         *  通過一個(gè)Session我們可以拿到一個(gè)郵箱對(duì)應(yīng)的Store         */        Store store = emailService.getSession().getStore(emailService.getMailProtocol());        store.connect(emailService.getHostPort(), EmailServiceEnity.username, EmailServiceEnity.password);                /**         *     通過Store拿到收件箱文件夾         *  INBOX 標(biāo)識(shí)獲取到郵件夾里的收件箱  (對(duì)于POP3協(xié)議僅INBOX可用--蛋疼哦)          *  并以只讀方式打開收件箱         */        Folder folder = store.getFolder("INBOX");        folder.open(Folder.READ_ONLY);                /**         * 讀取到的郵件是存在Message里面,有不同的獲取方法         * 方法一:獲取的是全部郵件,返回一個(gè)Message數(shù)組         * 方法二:獲取指定條目的郵件(1表示郵箱里面的第一封郵件,也就是最早的一封)         * 還有很多方法,如起始位置和結(jié)束位置......不一一列舉         */         Message[] messages = folder.getMessages();    // 方法一,得到全部郵件數(shù)組         Message message = folder.getMessage(messages.length);    // 方法二                  System.out.println("郵件接收時(shí)間:"+message.getSentDate());         System.out.println("郵件發(fā)送者:"+message.getFrom()[0]);         System.out.println("郵件主題:"+message.getSubject());         System.out.println("郵件內(nèi)容:"+message.getContent()); // 內(nèi)存地址         System.out.println("***********************飄逸的分割線*****************************");                  // 得到郵件的Multipart(內(nèi)容總部件--【包涵附件】)         Multipart multipart = (Multipart) message.getContent();         int count = multipart.getCount();    // 部件個(gè)數(shù)         for(int i=0; i<count; i++) {             // 單個(gè)部件     注意:?jiǎn)蝹€(gè)部件有可能又為一個(gè)Multipart,層層嵌套             BodyPart part = multipart.getBodyPart(i);             // 單個(gè)部件類型             String type = part.getContentType().split(";")[0];             /**              * 類型眾多,逐一判斷,其中TEXT、HTML類型可以直接用字符串接收,其余接收為內(nèi)存地址              * 可能不全,如有沒判斷住的,請(qǐng)自己打印查看類型,在新增判斷              */             if(type.equals("multipart/alternative")) {        // HTML (文本和超文本組合)                 System.out.println("超文本:" + part.getContent().toString());             }else if(type.equals("text/plain")) {    // 純文本                 System.out.println("純文本:" + part.getContent().toString());             }else if(type.equals("text/html")){    // HTML標(biāo)簽元素                 System.out.println("HTML元素:" + part.getContent().toString());             }else if(type.equals("multipart/related")){    // 內(nèi)嵌資源 (包涵文本和超文本組合)                 System.out.println("內(nèi)嵌資源:" + part.getContent().toString());             }else if(type.contains("application/")) {        // 應(yīng)用附件 (zip、xls、docx等)                 System.out.println("應(yīng)用文件:" + part.getContent().toString());             }else if(type.contains("image/")) {            // 圖片附件 (jpg、gpeg、gif等)                 System.out.println("圖片文件:" + part.getContent().toString());             }             /*****************************************獲取郵件內(nèi)容方法***************************************************/             /**              * 附件下載              * 這里針對(duì)image圖片類型附件做下載操作,其他類型附件同理              */             if(type.contains("image/")) {                 // 打開附件的輸入流                 DataInputStream in = new DataInputStream(part.getInputStream());                 // 一個(gè)文件輸出流                 FileOutputStream out = null;                 // 獲取附件名                 String fileName = part.getFileName();                 // 文件名解碼                 fileName = MimeUtility.decodeText(fileName);                 // 根據(jù)附件名創(chuàng)建一個(gè)File文件                 File file = new File("d:/data/" + fileName);                 // 查看是否有當(dāng)前文件                 Boolean b = file.exists();                 if(!b) {                    out = new FileOutputStream(file);                    int data;                     // 循環(huán)讀寫                     while((data=in.read()) != -1) {                         out.write(data);                     }                     System.out.println("附件:【" + fileName + "】下載完畢,保存路徑為:" + file.getPath());                 }                                  // 關(guān)流                 if(in != null) {                    in.close();                 }                 if(out != null) {                    out.close();                 }             }                          /**              * 獲取超文本復(fù)合內(nèi)容              * 他本是又是一個(gè)Multipart容器              * 此時(shí)郵件會(huì)分為TEXT(純文本)正文和HTML正文(HTML標(biāo)簽元素)              */             if(type.equals("multipart/alternative")) {                 Multipart m = (Multipart) part.getContent();                for (int k=0; k<m.getCount(); k++) {                     if(m.getBodyPart(k).getContentType().startsWith("text/plain")) {                         // 處理文本正文                        System.out.println("TEXT文本內(nèi)容:"+"/n" + m.getBodyPart(k).getContent().toString().trim()+"/n");                     } else {                         // 處理 HTML 正文                         System.out.println("HTML文本內(nèi)容:"+"/n" + m.getBodyPart(k).getContent()+"/n");                     }                }             }                      }                 /**         * 最后千萬別忘記了關(guān)閉         */        folder.close(false); // false為不更新郵件,true為更新,一般在刪除郵件后使用        store.close();    }        // main 方法簡(jiǎn)單測(cè)試    public static void main(String[] args) {        try {            new LookEmailService().lookEmail();        } catch (IOException  e) {            e.printStackTrace();        } catch (MessagingException e) {            e.printStackTrace();        } catch (InterruptedException e) {            e.printStackTrace();        }    }}

  到此處本章的代碼部分全部貼出來了,篇幅可能有點(diǎn)長(zhǎng),只是把現(xiàn)有的功能都貼出來了,方便做對(duì)比。

本章小結(jié):

  • 對(duì)代碼再次進(jìn)行拆分,分為實(shí)體類、業(yè)務(wù)類支持類、發(fā)送業(yè)務(wù)類、接收業(yè)務(wù)類
  • 對(duì)郵件的兩大功能(收/發(fā))做簡(jiǎn)單對(duì)比
  • 簡(jiǎn)單責(zé)任原則,業(yè)務(wù)類里面能拆分的功能都進(jìn)行拆分,各負(fù)其責(zé),test方法和業(yè)務(wù)類融合,方便在本類進(jìn)行測(cè)試
  • 對(duì)于郵件接收,由于內(nèi)容Content-type類型眾多,可能沒有完全判斷住(具體問題具體分析)
  • 常用的郵件協(xié)議:SMTP和POP3協(xié)議簡(jiǎn)單說明(詳細(xì)還請(qǐng)度娘腦補(bǔ))
  • 其他細(xì)節(jié):(附件編碼問題,正文格式聲明,設(shè)置收件人方法【多種】)
  • 未涉及:其他功能。如:刪除、回復(fù)、轉(zhuǎn)發(fā)等(之后陸續(xù)更新)

javamail API 系列篇:   

  1.  javamail模擬郵箱功能發(fā)送電子郵件-基礎(chǔ)實(shí)戰(zhàn)篇
  2.  javamail模擬郵箱功能發(fā)送電子郵件-中級(jí)實(shí)戰(zhàn)篇【新增附件發(fā)送方法】
  3.  javamail模擬郵箱功能獲取郵件內(nèi)容-中級(jí)實(shí)戰(zhàn)篇【內(nèi)容|附件下載方法】 
  4. javamail模擬郵箱功能--郵件回復(fù)-中級(jí)實(shí)戰(zhàn)篇【郵件回復(fù)方法】
  5. javamail模擬郵箱功能--郵件刪除-中級(jí)實(shí)戰(zhàn)篇【郵件標(biāo)記方法】

                          寫作不易,難免有疏漏和錯(cuò)誤,還請(qǐng)慷慨指正,覺得有幫助幫忙推薦哦。

  ps:歡迎轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)注明出處:http://m.survivalescaperooms.com/liuyitian/p/4051922.html


                                            每天多學(xué)一點(diǎn)點(diǎn) 代碼少敲一點(diǎn)點(diǎn)

  


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 探索| 璧山县| 成安县| 宾川县| 湟源县| 辽阳县| 城固县| 依安县| 房山区| 曲靖市| 溧水县| 江阴市| 怀柔区| 阳东县| 天门市| 泸西县| 江津市| 澎湖县| 武邑县| 合江县| 江北区| 崇州市| 高平市| 凌云县| 仙居县| 高唐县| 天门市| 鱼台县| 聂拉木县| 沾化县| 法库县| 怀远县| 新乡市| 靖江市| 运城市| 墨脱县| 桃园县| 陵水| 苍南县| 安陆市| 望谟县|