通过java在Gmail中通过POP3阅读邮件

时间:2012-03-31 20:34:08

标签: java sockets ssl

晚上好

我正在尝试制作能够通过POP协议检索消息的精彩代码。到目前为止,我一直关注RFC1939(POP规范)。

实际上它正在使用我的网站主机的POP3服务器(不是通过SSL)。但是当访问GMail时,我得到的只是空响应:(

我认为这是SSL部分“打破”它。

在我创建Socket的“open”函数中,我有这个:

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是bool,表示连接应该通过SSL,s是Socket。 in_hostin_port是主机(pop.gmail.com)和端口(995)。 outin是我写入和读取的流。

最糟糕的部分之一是它不会抛出任何错误。在我通常得到回复的地方,我只得到一个空字符串。

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

1 个答案:

答案 0 :(得分: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