如何在POP3中获得多行响应

时间:2014-10-10 02:09:44

标签: java sockets pop3

    try{
        smtpSocket= new Socket("pop.rediffmail.com",110);
        os=new DataOutputStream(smtpSocket.getOutputStream());
        is=new BufferedReader(new InputStreamReader(smtpSocket.getInputStream()));
        System.out.print("Inbox List": \n");
        os.writeBytes("list\r\n");
        System.out.println(is.readLine());

本程序未显示所有邮件列表。怎么解决?

1 个答案:

答案 0 :(得分:1)

阅读RFC 1939,它定义了POP3协议。特别是,请阅读section 3,它告诉您如何阅读多行响应:

  

对某些命令的响应是多行的。在这些情况下,哪个      在发送第一行后,会在下面清楚地显示      响应和CRLF,发送任何其他行,每个终止      通过CRLF对。当响应的所有行都已发送时,a      最后一行被发送,包括一个终止八位字节(十进制代码      046,"。")和CRLF对。如果是多行响应的任何行      从终止八位字节开始,该行是#34;字节填充"通过      预先终止八位字节到响应的那一行。      因此,多行响应以五个八位字节终止      " CRLF.CRLF&#34 ;.检查多行响应时,客户端会检查      查看该行是否以终止八位字节开头。如果是,如果      除了CRLF之外的八位字节,该行的第一个八位字节(      终止八位字节被剥夺了。如果是这样,如果CRLF立即      跟随终止字符,然后是POP的响应      服务器结束,包含" .CRLF"不考虑      多线响应的一部分。

例如:

try{
    smtpSocket= new Socket("pop.rediffmail.com",110);
    os=new DataOutputStream(smtpSocket.getOutputStream());
    is=new BufferedReader(new InputStreamReader(smtpSocket.getInputStream()));
    string line = is.readLine();
    System.out.println(line);
    if (line.startsWith("+OK")){
        System.out.println("Inbox List:");
        os.writeBytes("list\r\n");
        line = is.readLine();
        System.out.println(line);
        if (line.startsWith("+OK")){
            do {
                line = is.readLine();
                if (line == ".") break;
                if (line.startsWith("."))
                    line = line.substring(1);
                System.out.println(line);
            }
            while (true);
        } 
    }