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

Odpowiedz Nowy wątek
2011-09-14 21:58
R_K
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ę?

Pozostało 580 znaków

2011-09-16 00:24
ws
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);
    //...
}

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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