我正在尝试在Java中将SSL与IMAP一起使用。我不想使用IMAP类。
由于某些原因,当我发送第n条消息时,我收到的消息是n-2,而不是消息n-1。这意味着在发送第二条消息之前,我不会收到对发送的第一条消息的任何答复。在下面的最小代码中,谁能发现什么地方出了问题? (除了println,这确实很小,我想这有助于调试)

import java.io.*;
import javax.net.ssl.*;
public class Mail{
    static String server = "imap.gmail.com";
    static String user   = "[email protected]";
    static String pass   = "azerty75";
    public static void print (PrintWriter to, String text){
        System.out.println("sent : "+text);
        to.println(text+ "\r");
        to.flush();
    }

    public static void read  (BufferedReader from) throws InterruptedException, IOException {
        do {
            String line = from.readLine();
            System.out.println("received: "+line);
        } while (from.ready());
    }

    public static void main(String[] args){
        try{
            SSLSocket sslsocket = (SSLSocket) SSLSocketFactory.getDefault().createSocket(server, 993);
            System.out.println("Start connexion");

            BufferedReader from = new BufferedReader(new InputStreamReader(sslsocket.getInputStream()));
            //             read(from);

            PrintWriter to = new PrintWriter(new BufferedWriter(new OutputStreamWriter(sslsocket.getOutputStream())), true);
            print(to,"a1 login "+user+" "+pass);
            read(from);/*exepcted:
                         OK gimap ready
                         a1 OK login@host authenticated (Success)*/

            sslsocket.close();
            System.out.println("End connexion");
        }

        catch (Exception e){
            e.printStackTrace();
        }
    }
}

最佳答案

IMAP不是乒乓协议。服务器不会发送一行响应您的其中一条。

相反,您发送命令,服务器发送信息。允许服务器向您发送比您要求的更多的信息,因此您可以对一个命令获得七个响应,甚至可以在根本不发送命令的情况下获得响应,这称为未经请求的响应。奇怪的短语。某些服务器使用未经请求的响应来通知您有关新邮件的信息,其他服务器使用这些响应来通知您有关邮件的标志更改的信息,所有(几乎?)都用于通知您它们即将关闭连接。

关于java - Java,SSLSocket,未收到答案,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35712788/

10-13 03:22