我编写了一个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的解决方案。
答案 0 :(得分:0)
您需要使用支持UID的POP3服务器。您的POP3服务器似乎没有。当你查看JavaMail debug output时,服务器说它支持哪些功能?
您也可以get rid of the socket factory settings, you don't need them。