晚上好
我正在尝试制作能够通过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_host
和in_port
是主机(pop.gmail.com)和端口(995)。 out
和in
是我写入和读取的流。
最糟糕的部分之一是它不会抛出任何错误。在我通常得到回复的地方,我只得到一个空字符串。
问题是:如何通过SSL / TLS连接到POP服务器,最好是Gmail服务器?
答案 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。