2012-03-31 60 views
2

晚安SO通过java在Gmail中阅读POP3邮件

我试图制作一段可以通过POP协议检索邮件的精彩代码。我到目前为止已遵循RFC1939(POP规范)。

而实际上它的工作与我的虚拟主机的POP3服务器(这是不支持SSL),但使用Gmail时,我得到的是空的反应:(

我想这是一个的“突破”,它的SSL的一部分。

在我的“开放式”功能,创建套接字我有这样的:

public void open() throws UnknownHostException, IOException 
{ 
    if(this.SSL) 
    { 
     SSLSocketFactory fac = (SSLSocketFactory) SSLSocketFactory.getDefault(); 
     this.s = fac.createSocket(this.in_host, this.in_port); 
    } 
    else 
    { 
     this.s = new Socket(this.in_host, this.in_port); 
    } 

    this.out = new PrintWriter(s.getOutputStream(), true); 
    this.in = new BufferedReader(new InputStreamReader(s.getInputStream())); 
} 

其中SSL是指示连接一个布尔值应该是通过SSL,并且s是插座in_host和。是主机(pop.gmail.com)和端口(995)。 outin是我写入和读取的流。

其中最糟糕的部分是它不会抛出任何错误。我通常会得到答案,我只是得到一个空字符串。

问题是:如何通过SSL/TLS连接到POP服务器,最好是Gmail服务器?

回答

3

大约是这样的内容:

public void connect() throws Exception { 

    String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory"; 

    Properties pop3Props = new Properties(); 

    pop3Props.setProperty("mail.pop3.socketFactory.class", SSL_FACTORY); 
    pop3Props.setProperty("mail.pop3.socketFactory.fallback", "false"); 
    pop3Props.setProperty("mail.pop3.port", "995"); 
    pop3Props.setProperty("mail.pop3.socketFactory.port", "995"); 

    URLName url = new URLName("pop3", "pop.gmail.com", 995, "", 
      username, password); 

    session = Session.getInstance(pop3Props, null); 
    store = new POP3SSLStore(session, url); 
    store.connect(); 

} 

更多信息请参阅本article

+0

我试图避免使用javax.mail.Message和javax.mail.Folder:/但是,它的工作原理,因为它应该,它只是不符合我的需要:) – f2lollpll 2012-03-31 21:39:37