2015-07-10 3 views
0

Итак, я создал программу без использования javamail для соединения с gmail imaps. Мне удалось войти в систему, но я изо всех сил пытаюсь найти способ открытия папок. Я посмотрел все ответы javamail, которые я бы предпочел не использовать, поскольку я должен был сам это изучить, но я не могу найти ничего в java-api, который позволит мне открыть этот файл без использования javamail.пытается открыть папки gmail без javamail

Вот мой код:

public class CRole { 
    private BufferedReader socketSIn = null; 
    private PrintWriter socketSOut = null; 
    private Socket client; 
    public CRole(){ 
     SSLSocketFactory sslsocketfactory = (SSLSocketFactory) SSLSocketFactory.getDefault(); 
     try { 
       client = (SSLSocket) sslsocketfactory.createSocket("imap.gmail.com", 993); 
     System.out.println("Connect to Host"); 

     } 
     catch(IOException e) { 
      System.out.println("Unable to listen on ports"); 
      System.exit(+1); 
     } 
    try { 
      socketSIn = new BufferedReader(new InputStreamReader(client.getInputStream())); 
      socketSOut = new PrintWriter(client.getOutputStream(), true); 
     } 
    catch(IOException e) { 
      System.out.println("Read failed"); 
      System.exit(+1); 
     } 
} 
    public void send_connectStringToS(String payload) { 
    this.socketSOut.println(payload); 
} 
    public String receive_acceptedStringFromS() { 
    String line = ""; 
    try { 
      line = this.socketSIn.readLine(); 
    } 
    catch(IOException e) { 
      System.out.println("Input/Outpur error."); 
      System.exit(+1); 
    } 
    return line; 
} 

Существует больше кода, но я не думаю, что это действительно необходимо для этого вопроса. В принципе, я должен использовать javamail или есть альтернатива?

Также есть более быстрый способ отступа, потому что, когда я использую пробел, он всегда выходит из строя.

+1

Если вы ищете API, как вы уже догадались, Javamail - это путь. В противном случае вы могли бы попытаться создать собственную реализацию IMAP, удачи в этом. –

+1

Если вы действительно хотите это сделать с нуля, фактический протокол документируется в RFC3501. – Max

+0

Да, я читал его некоторое время и не понимал, что делать. Однако это намного проще, чем я думал. – spaga

ответ

0
public class Imaps { 
    private static BufferedReader in = null; 
    private static PrintWriter out = null; 
    private static Socket client; 
    public static void main (String []arg){ 
    SSLSocketFactory sslsocketfactory = (SSLSocketFactory) SSLSocketFactory.getDefault(); 
    try { 
     client = (SSLSocket) sslsocketfactory.createSocket("imap.gmail.com", 993); 
     System.out.println("Connect to Host"); 

    } 
    catch(IOException e) { 
     System.out.println("Unable to listen on ports"); 
     System.exit(+1); 
    } 
    try { 
     in = new BufferedReader(new InputStreamReader(client.getInputStream())); 
     out = new PrintWriter(client.getOutputStream(), true); 
     out.println("abcd CAPABILITY"); 
     String response = (String) in.readLine(); 
     System.out.println("Server: " + response); 

     out.println("efgh STARTTLS"); //tls part does not work but will not cause any problems being there. 
     response = (String) in.readLine(); 
     System.out.println("Server: " + response); 

     String payload3 = "a001 login username @gmail.com password"; 
     out.println(payload3); 

     response = (String) in.readLine(); 
     System.out.println("Server: " + response); 
     response = (String) in.readLine(); 
     System.out.println("Server: " + response); 
     response = (String) in.readLine(); 
     System.out.println("Server: " + response); 
     //should say success if you enter correct password. 


     String payload5 = "a002 select inbox"; 
     //String payload5 = "a002 select inbox"; 
     out.println(payload5); 

     response = (String) in.readLine(); 
     System.out.println("Server: " + response); 
     response = (String) in.readLine(); 
     System.out.println("Server: " + response); 
     response = (String) in.readLine(); 
     System.out.println("Server: " + response); 
     response = (String) in.readLine(); 
     System.out.println("Server: " + response); 


    } 
    catch(IOException e) { 
     System.out.println("Read failed"); 
     System.exit(+1); 
    } 

Ответ в том, что вам не нужно хранить папку где она открыта, когда вы отправляете A002 выберите почтовый ящик. После этого вы можете запросить любое сообщение, которое вы хотите, с помощью a004 fetch 1 body [text]. Обратите внимание, что номер один получит первое электронное письмо в вашей учетной записи, а не последнее.

Смежные вопросы