Łączenie się z serwerem IMAP

Ten ImapClient klasa umożliwia aplikacjom zarządzanie skrzynkami IMAP przy użyciu protokołu IMAP. ImapClient klasa jest używana do łączenia się z serwerami poczty IMAP i zarządzania e‑mailami w folderach IMAP. Aby połączyć się z serwerem IMAP

  1. Utwórz instancję ImapClient klasa.
  2. Określ nazwę hosta, nazwę użytkownika i hasło w konstruktor ImapClient.

Po ImapClient instancja jest inicjowana, kolejne wywołanie dowolnej operacji przy użyciu tej instancji połączy się z serwerem. Poniższy fragment kodu pokazuje, jak połączyć się z serwerem IMAP, stosując powyższe kroki.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Create an imapclient with host, user and password
ImapClient client = new ImapClient("localhost", "user", "password");

Łączenie z serwerem IMAP z włączonym SSL

Łączenie z serwerem IMAP opisano, jak połączyć się z serwerem IMAP w czterech prostych krokach:

  1. Utwórz instancję ImapClient klasa.
  2. Podaj nazwę hosta, nazwę użytkownika i hasło.
  3. Określ port.
  4. Określ Opcje zabezpieczeń.

Proces łączenia się z serwerem IMAP z włączonym SSL jest podobny, ale wymaga ustawienia kilku dodatkowych właściwości:

Poniższy fragment kodu pokazuje, jak

  1. Ustaw nazwę użytkownika, hasło i port.
  2. Ustaw opcję bezpieczeństwa.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Create an instance of the ImapClient class
ImapClient client = new ImapClient("imap.domain.com", 993, "user@domain.com", "pwd");

// Set the security mode to implicit
client.setSecurityOptions(SecurityOptions.SSLImplicit);

Łączenie z serwerem przez proxy

Serwery proxy są powszechnie używane do komunikacji ze światem zewnętrznym. W takich przypadkach klienci poczty nie mogą komunikować się z Internetem bez podania adresu proxy. Aspose.Email obsługuje wersje 4, 4a i 5 protokołu SOCKS proxy. Ten artykuł zawiera działający przykład dostępu do skrzynki pocztowej przy użyciu serwera proxy poczty. Aby uzyskać dostęp do skrzynki pocztowej przez serwer proxy:

  1. Inicjalizuj SocksProxy z wymaganymi informacjami, czyli adresem proxy, portem i wersją SOCKS.
  2. Inicjalizuj ImapClient z adresem hosta, nazwą użytkownika, hasłem i innymi ustawieniami.
  3. Ustaw klienta SocksProxy właściwość do SocksProxy obiekt utworzony powyżej.

Poniższy fragment kodu pokazuje, jak pobrać skrzynkę pocztową za pośrednictwem serwera proxy.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Connect and log in to IMAP and set SecurityOptions
ImapClient client = new ImapClient("imap.domain.com", "username", "password");
client.setSecurityOptions(SecurityOptions.Auto);

String proxyAddress = "192.168.203.142"; // proxy address
int proxyPort = 1080; // proxy port
SocksProxy proxy = new SocksProxy(proxyAddress, proxyPort, SocksVersion.SocksV5);

// Set the proxy
client.setProxy(proxy);

try {
    client.selectFolder("Inbox");
} catch (java.lang.RuntimeException ex) {
    System.out.println(ex.getMessage());
}

Łączenie się z serwerem przez proxy HTTP

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
HttpProxy proxy = new HttpProxy("18.222.124.59", 8080);
final ImapClient client = new ImapClient("imap.domain.com", "username", "password");
try {
    client.setProxy(proxy);
    client.selectFolder("Inbox");
} finally {
    if (client != null)
        client.dispose();
}

Dostosuj mechanizm uwierzytelniania

Pobierz listę mechanizmów uwierzytelniania obsługiwanych przez serwer IMAP przy użyciu getSupportedAuthentication metoda ImapClient klasa. Ta metoda pozwala klientowi określić, które metody uwierzytelniania są dostępne do ustanowienia bezpiecznego połączenia z serwerem. Następnie, używając setAllowedAuthentication metoda, która pobiera (lub ustawia) wyliczenie typów uwierzytelniania dozwolonych przez użytkownika, wybierz najbardziej odpowiedni mechanizm uwierzytelniania dla komunikacji klient‑serwer. Umożliwia to explicite ustawienie metody uwierzytelniania dla klienta poczty.

Poniższy przykład kodu pokazuje, jak dostosować uwierzytelnianie klienta e‑mail:

imapClient.setAllowedAuthentication(ImapKnownAuthenticationType.Plain);

Łączenie się z serwerem w trybie tylko do odczytu

Ten ImapClient klasa zapewnia ReadOnly właściwość, która po ustawieniu na true, oznacza, że nie powinny być wprowadzane żadne zmiany w trwałym stanie skrzynki pocztowej. Poniższy przykład kodu demonstruje użycie ImapClient.ReadOnly właściwości. Pobiera liczbę nieprzeczytanych wiadomości, następnie pobiera jedną wiadomość i ponownie pobiera liczbę nieprzeczytanych wiadomości w trybie tylko do odczytu. Liczba nieprzeczytanych wiadomości pozostaje taka sama, co wskazuje, że trwały stan skrzynki pocztowej nie został zmieniony.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
ImapClient imapClient = new ImapClient();
imapClient.setHost("<HOST>");
imapClient.setPort(993);
imapClient.setUsername("<USERNAME>");
imapClient.setPassword("<PASSWORD>");
imapClient.setSupportedEncryption(EncryptionProtocols.Tls);
imapClient.setSecurityOptions(SecurityOptions.SSLImplicit);

ImapQueryBuilder imapQueryBuilder = new ImapQueryBuilder();
imapQueryBuilder.hasNoFlags(ImapMessageFlags.isRead()); /* get unread messages. */
MailQuery query = imapQueryBuilder.getQuery();

imapClient.setReadOnly(true);
imapClient.selectFolder("Inbox");
ImapMessageInfoCollection messageInfoCol = imapClient.listMessages(query);
System.out.println("Initial Unread Count: " + messageInfoCol.size());
if (messageInfoCol.size() > 0) {
    imapClient.fetchMessage(messageInfoCol.get_Item(0).getSequenceNumber());

    messageInfoCol = imapClient.listMessages(query);
    // This count will be equal to the initial count
    System.out.println("Updated Unread Count: " + messageInfoCol.size());
} else {
    System.out.println("No unread messages found");
}

Użycie uwierzytelniania CRAM-MD5 do połączenia z serwerem

Aby zapewnić bezpieczną autoryzację i komunikację z serwerem IMAP, możesz określić i wymusić użycie CRAM-MD5 jako dozwolonej metody uwierzytelniania dla klienta IMAP. Poniższy fragment kodu pokazuje, jak skonfigurować dozwolony typ uwierzytelniania dla ImapClient:

imapClient.setAllowedAuthentication(ImapKnownAuthenticationType.CramMD5);

Weryfikacja poświadczeń serwera poczty bez wysyłania e‑maila

Czasami konieczne jest zweryfikowanie poświadczeń bez wysyłania e‑maila. Aspose.Email zapewnia validateCredentials() metoda służąca do wykonania tej operacji. Jeśli weryfikacja zakończy się sukcesem, kod wewnątrz instrukcji if zostaje wykonany, zwykle używany do dalszych działań lub pobierania danych z serwera IMAP. Poniższy fragment kodu demonstruje weryfikację poświadczeń bez wysyłania e‑maila:

try (ImapClient imapClient = new ImapClient(
        server.ImapUrl, server.ImapPort, "username", "password", SecurityOptions.Auto)) {
    imapClient.setTimeout(4000);

    if (imapClient.validateCredentials()) {
        // to do something
    }
}

Jak ustawić limit czasu dla operacji e‑mail

Każda operacja e‑mail zajmuje pewien czas w zależności od wielu czynników (opóźnienia sieciowe, rozmiar danych, wydajność serwera itp.). Możesz ustawić limit czasu dla wszystkich operacji e‑mail. Poniższy przykład kodu pokazuje, jak to zrobić przy użyciu Limit czasu właściwość. Uwaga: nie należy ustawiać dużych wartości, aby uniknąć długiego oczekiwania w aplikacji.

try (ImapClient imapClient = new ImapClient("host", 993, "username", "password", SecurityOptions.SSLImplicit))
{
    imapClient.setTimeout(60000); // 60 seconds

    // some code...
}

Jak ograniczyć GreetingTimeout

Klient IMAP może używać trybu automatycznego do nawiązania połączenia. W tym trybie klient IMAP przechodzi wszystkie możliwe parametry połączenia, aż połączenie zostanie ustanowione. Serwer IMAP w przypadku poprawnego połączenia wysyła do klienta ciąg powitalny. Serwery mogą używać połączeń SSL/TLS implicite lub explicite (START TLS). Jeśli tryb połączenia jest niezgodny (np. serwer oczekuje połączenia SSL implicite, a klient próbuje nawiązać połączenie niezabezpieczone lub SSL explicite), serwer nie wyśle ciągu powitalnego i użytkownik będzie czekał długo, aż upłynie limit czasu, po czym klient przejdzie do kolejnej opcji połączenia. Aby uniknąć tego problemu, wprowadzono właściwość GreetingTimeout. Umożliwia ona ustawienie limitu czasu na otrzymanie ciągu powitalnego i skrócenie czasu automatycznego ustanawiania połączenia.

ImapClient imapClient = new ImapClient();
imapClient.setGreetingTimeout(4000);