2016-05-24 7 views
1

私はJavaプログラムをコーディングして、JavaのPOP3folderからメッセージのUIDを取得しました。 uidは常にnullです。私のコードのPOP3Folderからのメッセージの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がヌルとして返されます。

IはPOP3FolderのGETUID方法を読み取り、UIDLサポートがPOP3Storeに利用できないことを見出し、コードはPOP3Store supportsUidlで

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

}

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

UIDをサポートするPOP3サーバーを使用する必要があります。 POP3サーバーには表示されません。 JavaMail debug outputを見ると、サーバーがサポートしている機能は何ですか?

get rid of the socket factory settings, you don't need themでもかまいません。

+0

javaxmail 1.5.7 DEBUGのPOP3使用して、私が得たデバッグプリントを以下に示します。mail.pop3.disabletop:偽 DEBUGのPOP3:mail.pop3.apop.enable:偽 DEBUGのPOP3:mail.pop3.disablecapaを:false DEBUG POP3:ホスト "pop.zoho.com"に接続しています。ポート995はSSLです。 + OK POP3 mx.zohomail.com v1.0サーバー準備中<[email protected]> CAPA + OK ユーザー 。 DEBUGのPOP3:サーバーはそれを無効にし、TOPをサポートしていません DEBUGのPOP3:NOOP S:+ OK UIDが –

+0

は、デバッグ出力のフォーマットがあるnullの認証コマンド Cを成功:認証コマンドトレースが DEBUG POP3を抑えますあなたのコメントに間違ったものがある場合は、質問を編集して追加する方が良いでしょう。 JavaMail 1.5.7はありませんので、実際に使っているバージョンがわかりません。最近のバージョンには、デバッグ出力にバージョン番号が含まれています。また、 "C:"と "S:"デバッグ出力は非常に古いバージョンのJavaMailからのものです。それはプロトコルの出力のすべての行になければならないので、私は何が起こっているのか分からない。それでも、私が見るところでは、サーバがUIDをサポートしていないことは明らかであり、JavaMailがそのことについて何もできることはありません。 –

+0

JavaMailの最新の一貫性のあるバージョンを使用していることを確認してください。非常に古いバージョンを使用している可能性があります。 –

関連する問題