Verbindung zum IMAP‑Server

Die ImapClient Klasse ermöglicht Anwendungen, IMAP‑Postfächer über das IMAP‑Protokoll zu verwalten. Die ImapClient Klasse wird verwendet, um sich mit IMAP‑Mail‑Servern zu verbinden und E‑Mails in den IMAP‑Ordnern zu verwalten. Um sich mit einem IMAP‑Server zu verbinden

  1. Erstellen Sie eine Instanz von dem ImapClient Klasse.
  2. Hostname, Benutzernamen und Passwort angeben im ImapClient constructor.

Sobald das ImapClient Instanz wird initialisiert, der nächste Aufruf einer Operation mit dieser Instanz stellt die Verbindung zum Server her. Das folgende Code‑Snippet zeigt, wie man mit den obigen Schritten eine Verbindung zu einem IMAP‑Server herstellt.

// 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");

Verbindung mit SSL‑aktiviertem IMAP‑Server

Verbindung mit IMAP‑Server beschrieb, wie man in vier einfachen Schritten eine Verbindung zu einem IMAP‑Server herstellt:

  1. Erstellen Sie eine Instanz von dem ImapClient Klasse.
  2. Hostname, Benutzernamen und Passwort angeben.
  3. Port angeben.
  4. Geben Sie das Sicherheitsoptionen.

Der Vorgang zum Verbinden mit einem SSL‑aktivierten IMAP‑Server ist ähnlich, erfordert jedoch das Setzen einiger weiterer Eigenschaften:

Das folgende Code‑Snippet zeigt, wie man

  1. Legen Sie einen Benutzernamen, ein Passwort und einen Port fest.
  2. Sicherheitsoption festlegen.
// 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);

Verbindung zu einem Server über Proxy herstellen

Proxy‑Server werden häufig verwendet, um mit der Außenwelt zu kommunizieren. In solchen Fällen können E‑Mail‑Clients nicht über das Internet kommunizieren, ohne die Proxy‑Adresse anzugeben. Aspose.Email unterstützt die Versionen 4, 4a und 5 des SOCKS‑Proxy‑Protokolls. Dieser Artikel liefert ein funktionierendes Beispiel zum Zugriff auf das Postfach über einen Proxy‑Mail‑Server. So greifen Sie über einen Proxy‑Server auf das Postfach zu:

  1. Initialisieren SocksProxy mit den erforderlichen Angaben, also Proxy‑Adresse, Port und SOCKS‑Version.
  2. Initialisieren ImapClient mit Hostadresse, Benutzernamen, Passwort und weiteren Einstellungen.
  3. Setzen Sie den Client SocksProxy Eigenschaft zu dem SocksProxy Objekt, das oben erstellt wurde.

Das folgende Code‑Snippet zeigt, wie man ein Postfach über einen Proxy‑Server abruft.

// 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());
}

Verbindung zum Server über HTTP‑Proxy

// 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();
}

Authentifizierungsmechanismus anpassen

Abrufen der Liste von Authentifizierungsmechanismen, die vom IMAP‑Server unterstützt werden, mittels getSupportedAuthentication Methode des ImapClient Klasse. Diese Methode ermöglicht es dem Client zu bestimmen, welche Authentifizierungsmethoden für den Aufbau einer sicheren Verbindung mit dem Server verfügbar sind. Anschließend kann mit der setAllowedAuthentication Methode, die die Aufzählung der vom Benutzer zulässigen Authentifizierungstypen abruft (oder setzt), um den am besten geeigneten Authentifizierungsmechanismus für die Client‑Server‑Kommunikation auszuwählen. Damit können Sie die Authentifizierungsmethode für den Mail‑Client explizit festlegen.

Das folgende Code‑Beispiel zeigt, wie die Authentifizierung des E‑Mail‑Clients angepasst wird:

imapClient.setAllowedAuthentication(ImapKnownAuthenticationType.Plain);

Verbindung zum Server im Nur‑Lese‑Modus

Die ImapClient Klasse stellt ein ReadOnly Eigenschaft, die, wenn sie auf true gesetzt wird, anzeigt, dass keine Änderungen am permanenten Zustand des Postfachs vorgenommen werden dürfen. Das folgende Codebeispiel demonstriert die Verwendung von ImapClient.ReadOnly Eigenschaft. Sie ermittelt die Anzahl ungelesener Nachrichten, holt dann eine Nachricht und ermittelt anschließend erneut die Anzahl ungelesener Nachrichten im Nur‑Lese‑Modus. Die Anzahl bleibt gleich, was zeigt, dass der permanente Zustand des Postfachs nicht verändert wurde.

// 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");
}

CRAM‑MD5‑Authentifizierung zum Verbinden mit einem Server verwenden

Um eine sichere Authentifizierung und Kommunikation mit dem IMAP‑Server zu gewährleisten, können Sie die Verwendung von CRAM‑MD5 als zulässige Authentifizierungsmethode für den IMAP‑Client festlegen und erzwingen. Das folgende Code‑Snippet zeigt, wie man den erlaubten Authentifizierungstyp konfiguriert für ImapClient:

imapClient.setAllowedAuthentication(ImapKnownAuthenticationType.CramMD5);

Mail‑Server-Anmeldeinformationen ohne Senden einer E‑Mail validieren

Manchmal ist es notwendig, Anmeldeinformationen zu überprüfen, ohne eine E‑Mail zu senden. Aspose.Email bietet die validateCredentials() Methode, um diesen Vorgang auszuführen. Wenn die Validierung erfolgreich ist, wird der Code innerhalb der if‑Anweisung ausgeführt, typischerweise um weitere Aktionen durchzuführen oder Daten vom IMAP‑Server abzurufen. Das folgende Code‑Snippet demonstriert die Validierung von Anmeldeinformationen ohne eine E‑Mail zu senden:

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

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

Wie man einen Timeout für E‑Mail‑Operationen festlegt

Jeder E‑Mail‑Vorgang benötigt je nach vielen Faktoren (Netzwerkverzögerungen, Datenmenge, Server‑Leistung usw.) gewisse Zeit. Sie können für alle E‑Mail‑Vorgänge einen Timeout festlegen. Das nachstehende Code‑Beispiel zeigt, wie Sie das mit dem Timeout Eigenschaft. Hinweis: Sie sollten keine großen Werte setzen, um lange Wartezeiten in Ihrer Anwendung zu vermeiden.

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

    // some code...
}

Wie man das Begrüßungs‑Timeout einschränkt

Der IMAP‑Client kann im automatischen Modus eine Verbindung herstellen. In diesem Modus durchläuft der IMAP‑Client alle möglichen Verbindungsparameter, bis die Verbindung aufgebaut ist. Ein IMAP‑Server sendet bei einer korrekten Verbindung einen Begrüßungsstring an den Client. Server können implizite oder explizite (START TLS) SSL/TLS‑Verbindungsinitiierung verwenden. Stimmen die Verbindungsmodi nicht überein (z. B. wartet der Server auf eine implizite SSL‑Verbindung, der Client versucht jedoch eine nicht gesicherte oder explizite SSL‑Verbindung), sendet der Server keinen Begrüßungsstring und der Benutzer wartet lange, bis ein Timeout den Begrüßungsstring erreicht, und der Client wechselt zur nächsten Verbindungsoption. Um dieses Problem zu vermeiden, wurde GreetingTimeout eingeführt. Diese Eigenschaft ermöglicht es, das Timeout für den Begrüßungsstring festzulegen und die Zeit für die automatische Verbindungsherstellung zu verkürzen.

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