【发布时间】:2016-05-24 14:23:12
【问题描述】:
我编写了一个 java 程序来从 java 中的 POP3folder 获取消息的 UID。但 uid 始终为 null。
我的代码一瞥是,
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 supportsUidl 被协议在 getPort 方法中的能力改变,
p = new Protocol(host, portNum, session.getDebug(),
session.getDebugOut(), session.getProperties(), "mail." + name,
isSSL);
capabilities = p.getCapabilities();
supportsUidl = capabilities == null|| capabilities.containsKey("UIDL");
请建议我获取 UID 的解决方案。
【问题讨论】:
标签: java email jakarta-mail pop3