Dwukrotne logowanie się na tą samą skrzynkę pocztową

0

Kiedy loguję się tylko raz na skrzynkę (korzystając z Javamail) wszystko jest OK - wiadomości są sczytywane.
Napisałem jednak kod, który umożliwia się zalogować i jeżeli to logowanie się nie powiedzie (bo hasło (trzymane w zmiennej password) było blednę), program próbuje się jeszcze raz zalogować używając innego, już na pewno dobrego hasła (trzymane w zmiennej password_decrypted), to przy drugiej próbie logowania program nie łączy się ze skrzynką i wyrzuca wyjątki. Oto ten kod:

server = new URLName("imap://" + login + "@imap." + host + ":" + password + "@imap." + host + "/INBOX");
session = Session.getDefaultInstance(new Properties(), new MailAuthenticator(login, password));

try {
	folder = (IMAPFolder)session.getFolder(server);
} catch (MessagingException e1) {
	// TODO Auto-generated catch block
	//e1.printStackTrace();
}
    	
    	
if (folder == null) // jezeli logowanie sie przy pomocy pierwszego hasla sie nie powiodlo
{
	System.out.println("Logowanie sie nie powiodlo");
	server = new URLName("imap://" + login + "@imap." + host + ":" + password_decrypted + "@imap." + host + "/INBOX");
	session = Session.getDefaultInstance(new Properties(), new MailAuthenticator(login, password_decrypted));

	try {
		folder = (IMAPFolder)session.getFolder(server);
	} catch (MessagingException e1) {
		// TODO Auto-generated catch block
		e1.printStackTrace();
	}
 }


	    
try {
	folder.open(Folder.READ_ONLY);
} catch (MessagingException e) {
	// TODO Auto-generated catch block
	e.printStackTrace();
}

Wygląda na to, że gdy już raz program spróbuje się zalogować, to ma problem z ponownym zalogowaniem się. Tak jakby coś było blokowane? Może trzeba jakoś zamknąć sesję?

1

Metoda Session.getDefaultInstance(Properties props, Authenticator authenticator) tworzy nowa sesje tylko wtedy, gdy jeszcze jej nie ma. W przeciwnym wypadku zwraca to, co juz ma. Uzyj statycznej metody Session.getInstance(Properties props, Authenticator authenticator), jesli chcesz tworzyc nowa sesje. Looknij do dokumentacji po szczegoly.

BTW: zamiast sklejac URL'a, rozwaz wykorzystanie Properties, np.:

	//...
	Properties props = new Properties();
	props.setProperty("mail.imaps.host", "imap.server.net");
	props.setProperty("mail.imaps.port", "993");
	props.setProperty("mail.imaps.timeout", "5000");
	props.setProperty("mail.store.protocol", "imaps");
	
	try {
		session = Session.getInstance(props, new JMailClient.XAuthenticator("username", "password"));
		store = session.getStore("imaps");
		store.connect();
		IMAPFolder folder = (IMAPFolder)store.getFolder("INBOX");
		folder.open(Folder.READ_ONLY);
	//...
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1