Java-E-Mail: Session
Unter dem code verwendet, um zu verbinden und Operationen auf einen IMAP-Ordner.
Also meine Frage ist, über die javax.mail.Session
was wäre in diesem Fall neu jeden zweiten (je nach Schlaf-und Laufzeit von checkInbox()).
Ich bin mir sicher, dass dies nicht eine gute Lösung, vor allem den Abruf von IMAP ist, ist ein bisschen dumm, aber ich konnte nicht die IMAP listener
läuft.
Neuerstellung der Sitzung nicht jeder ausführen, möglicherweise die bessere Lösung, aber wie weiß ich, Wann ein session is closed
oder kann ich es schließen, auf Zweck? Aber es gibt nichts wie Session.close()
oder ist die Session als NULL? Oder gibt es eine definierte timeout auf eine Sitzung...
Quelle:
final String port = "993";
Properties prop = new Properties();
//I assume there is some redundancy here but this didn't cause any problems so far
prop.setProperty("mail.imaps.starttls.enable", "true");
prop.setProperty("mail.imaps.port", port);
/** This part can be removed
* prop.setProperty("mail.imaps.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
* prop.setProperty("mail.imaps.socketFactory.port", port);
* prop.setProperty("mail.imaps.socketFactory.fallback", "false");
*/
prop.setProperty("mail.imap.ssl.enable", "true");
prop.setProperty("mail.debug", "false");
//Create a session before you loop since the configuration doesn't change
Session session = Session.getInstance(prop);
//Nearly loop forever in Prod
while(true){
//Check the INBOX and do some other stuff
Store store = session.getStore("imaps");
store.connect(host, user, pw);
//... the operations on the session ...
store.close();
//Sleep a bit try & catch removed
Thread.sleep(1000);
}
Alles in allem muss ich sagen, es ist wirklich schwer zu finden, gute Beispiele und Dokumentation für javax.E-mail (neben den API und die FAQ)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Session nur verwaltet Konfigurations-Informationen; es gibt keine Notwendigkeit, um es zu schließen. So lange, wie Sie Ihre Konfiguration nicht ändern, können Sie die Session-einmal am Anfang und kurz halten, es zu benutzen.
Verbindungen, auf der anderen Seite, sind teuer und müssen sorgfältig verwaltet werden von der Anwendung. Eine Verbindung wird verwendet für das Speichern und für jeden Ordner öffnen. Eine Verbindung kann jederzeit beendet werden, durch den server oder durch einen Netzwerkfehler. Wenn eine Verbindung ist nicht aktiv verwendet wird, sollten Sie es schließen.
Haben, finden Sie die JavaMail-spec und die Beispielanwendungen, die auf die JavaMail-Projekt-Seite? Sie werden helfen, eine Menge einfache Fragen, aber das connection-management ist eine erweiterte Ausgabe.
Oh, und Sie können entfernen Sie alle socket-Werk-Zeug und Ihre Anwendung einfacher.