来自POP3Folder的消息的UID始终为空

时间:2016-05-24 14:23:12

标签: java email javamail pop3

我编写了一个java程序来获取java中POP3文件夹的消息的UID。但是uid总是空的。

我的代码的一瞥是,

String protocol="pop3";
Properties props = new Properties();
String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";
props.setProperty("mail.pop3.socketFactory.class",SSL_FACTORY);
props.setProperty("mail.pop3.socketFactory.fallback","false");
props.setProperty("mail.pop3.socketFactory.port",popPort);
props.setProperty("mail.pop3.port", popPort);
props.setProperty("mail.debug","true");

Session session = Session.getDefaultInstance(props,null);
store = session.getStore(protocol); 
store.connect(popServer,Integer.parseInt(popPort),userName,passwd);
folder = ((POP3Store)store).getFolder("INBOX");
folder.open(Folder.READ_WRITE);

Message[] msgs = folder.getMessages(1,1);
String uid = ((POP3Folder)folder).getUID(msgs[0]);

此uid返回为null。

我已经阅读了POP3Folder的getUID方法,发现POP3Store中没有UIDL支持,代码是

public synchronized String getUID(Message msg) throws MessagingException {
checkOpen();
POP3Message m = (POP3Message)msg;
try {
    if (!((POP3Store)store).supportsUidl)
return null;

}

在POP3Store中,supportUidl由getPort方法中的protocal功能改变,

p = new Protocol(host, portNum, session.getDebug(),
    session.getDebugOut(), session.getProperties(), "mail." + name,
    isSSL);
capabilities = p.getCapabilities();
supportsUidl = capabilities == null|| capabilities.containsKey("UIDL");

请建议我获取UID的解决方案。

1 个答案:

答案 0 :(得分:0)

您需要使用支持UID的POP3服务器。您的POP3服务器似乎没有。当你查看JavaMail debug output时,服务器说它支持哪些功能?

您也可以get rid of the socket factory settings, you don't need them