2016-05-24 1 views
1

J'ai codé un programme Java pour obtenir l'UID d'un message de POP3folder dans Java. mais l'uid est toujours nul.UID d'un message de POP3Folder est toujours NULL

Glimpse de mon code est,

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]); 

ce uid est retourné comme nulle.

J'ai lu la méthode getuid du POP3Folder et a constaté que le soutien UIDL ne sont pas disponibles dans le POP3Store, le code est

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

}

Dans POP3Store supportsUidl est modifié par les capacités du Protocal dans la méthode getPort ,

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

S'il vous plaît me suggérer la solution pour obtenir UID.

Répondre

0

Vous devez utiliser un serveur POP3 qui prend en charge les UID. Il semble que votre serveur POP3 ne fonctionne pas. Quand vous regardez le JavaMail debug output, quelles capacités le serveur indique-t-il qu'il supporte?

Vous pouvez également get rid of the socket factory settings, you don't need them.

+0

Après l'impression est de débogage je suis arrivé, en utilisant javaxmail 1.5.7 DEBUG POP3: mail.pop3.disabletop: false DEBUG POP3: mail.pop3.apop.enable: false DEBUG POP3: mail.pop3.disablecapa : false DEBUG POP3: connexion à l'hôte "pop.zoho.com", port 995, isSSL false + OK POP3 mx.zohomail.com serveur v1.0 prêt <[email protected]> CAPA + OK USER . DEBUG POP3: serveur ne prend pas en charge TOP, désactiver DEBUG POP3: trace de commande d'authentification supprimé DEBUG POP3: commande d'authentification a réussi C: NOOP S: + OK UID est nulle –

+0

La mise en forme de la sortie de débogage est sorte de foiré dans votre commentaire, il est préférable si vous éditez votre question et l'ajouter là. Il n'y a pas JavaMail 1.5.7 donc je ne sais pas quelle version vous utilisez vraiment; les versions récentes incluent le numéro de version dans la sortie de débogage. En outre, la sortie de débogage "C:" et "S:" provient d'une très ancienne version de JavaMail. Il devrait être sur chaque ligne de la sortie du protocole, donc je ne sais pas ce qui se passe là-bas. Pourtant, d'après ce que je peux voir, il est assez clair que le serveur ne supporte pas les UID, et JavaMail ne peut rien y faire. –

+0

Vous devriez vraiment vous assurer d'avoir une version récente et cohérente de JavaMail. Vous utilisez peut-être une très ancienne version. –