Arbeiten mit Nachrichten vom Server

Abrufen von Postfach‑Informationen

Wir können Informationen über das Postfach, wie die Anzahl der Nachrichten und die Größe des Postfachs, mit dem getMailBoxSize und getMailBoxInfo Methoden der Pop3Client Klasse.

Es ist auch möglich, die Nachrichtenanzahl mit dem MessageCount Eigenschaft und die Größe mittels OccupiedSize Eigenschaft des Pop3MailBoxInfo Klasse. Der folgende Beispielcode zeigt, wie man Informationen über das Postfach erhält. Er zeigt, wie man:

  1. Erstellen Sie ein Pop3Client.
  2. Verbindung zu einem POP3‑Server herstellen.
  3. Größe des Postfachs abrufen.
  4. Postfach‑Info abrufen.
  5. Erhalte die Anzahl der Nachrichten im Postfach.
  6. Erhalte die belegte Größe.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java

Pop3Client client = new Pop3Client();
// Specify host, username, password, Port and SecurityOptions for your client
client.setHost("pop.gmail.com");
client.setUsername("your.username@gmail.com");
client.setPassword("your.password");
client.setPort(995);
client.setSecurityOptions(SecurityOptions.Auto);

// Get the size of the mailbox, Get mailbox info, number of messages in the mailbox
long nSize = client.getMailboxSize();
System.out.println("Mailbox size is " + nSize + " bytes.");
Pop3MailboxInfo info = client.getMailboxInfo();
int nMessageCount = info.getMessageCount();
System.out.println("Number of messages in mailbox are " + nMessageCount);
long nOccupiedSize = info.getOccupiedSize();
System.out.println("Occupied size is " + nOccupiedSize);

Abrufen der E‑Mail‑Anzahl im Postfach

Das folgende Code‑Snippet zeigt, wie man die E‑Mail‑Nachrichten in einem Postfach zählt.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
Pop3Client client = new Pop3Client("pop3.server.com", "username", "password");
try {
    client.setSecurityOptions(SecurityOptions.Auto);
    int i = client.getMessageCount();
    System.out.println("Message count: " + i);
} catch (Pop3Exception ex) {
    System.out.println("Error:" + ex.toString());
}

Aspose.Email ermöglicht Entwicklern, auf vielfältige Weise mit E‑Mails zu arbeiten. Beispielsweise können sie Header‑Informationen abrufen, bevor sie entscheiden, ob sie eine E‑Mail herunterladen. Oder sie können E‑Mails von einem Server abrufen und diese ohne Parsing (schneller) oder nach dem Parsing (langsamer) speichern. Dieser Artikel zeigt, wie man E‑Mails abruft und konvertiert.

Abrufen von E‑Mail‑Header‑Informationen

E‑Mail‑Header können uns Informationen über eine E‑Mail‑Nachricht liefern, die wir nutzen können, um zu entscheiden, ob wir die gesamte Nachricht abrufen wollen oder nicht. Typischerweise enthalten die Header Angaben zu Absender, Betreff, Empfangsdatum usw. (E‑Mail‑Header werden ausführlich beschrieben in Anpassen von E‑Mail‑Headern. Dieses Thema behandelt speziell das Senden einer E‑Mail mit SMTP, aber die Informationen zum E‑Mail‑Header bleiben auch für POP3‑E‑Mails gültig). Die folgenden Beispiele zeigen, wie man E‑Mail‑Header von einem POP3‑Server anhand der Nachrichtensequenznummer abruft.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Create an instance of the Pop3Client class
Pop3Client client = new Pop3Client();

// Specify host, username. password, Port and SecurityOptions for your client
client.setHost("pop.gmail.com");
client.setUsername("your.username@gmail.com");
client.setPassword("your.password");
client.setPort(995);
client.setSecurityOptions(SecurityOptions.Auto);
try {
    HeaderCollection headers = client.getMessageHeaders(1);
    for (int i = 0; i < headers.size(); i++) {
        // Display key and value in the header collection
        System.out.print(headers.getKey(i));
        System.out.print(" : ");
        System.out.println(headers.get(i));
    }
} catch (Exception ex) {
    System.out.println(ex.getMessage());
} finally {
    client.dispose();
}

Abrufen von E‑Mail‑Nachrichten

Die Pop3Client Klassenkomponente bietet die Möglichkeit, E‑Mail‑Nachrichten vom POP3‑Server abzurufen und in ein MailMessage Instanz mit Hilfe von MailMessage Komponenten. Die MailMessage Klasse enthält mehrere Eigenschaften und Methoden zum Manipulieren von E‑Mail‑Inhalten. Durch die Verwendung von fetchMessage Methode des Pop3Client Klasse, Sie können ein MailMessage Instanz direkt vom POP3‑Server. Das folgende Code‑Snippet zeigt, wie Sie eine komplette E‑Mail‑Nachricht vom POP3‑Server abrufen.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Create an instance of the Pop3Client class
Pop3Client client = new Pop3Client();

// Specify host, username, password, Port and SecurityOptions for your client
client.setHost("pop.gmail.com");
client.setUsername("your.username@gmail.com");
client.setPassword("your.password");
client.setPort(995);
client.setSecurityOptions(SecurityOptions.Auto);
try {
    int messageCount = client.getMessageCount();
    // Create an instance of the MailMessage class and Retrieve message
    MailMessage message;
    for (int i = 1; i <= messageCount; i++) {
        message = client.fetchMessage(i);
        System.out.println("From:" + message.getFrom());
        System.out.println("Subject:" + message.getSubject());
        System.out.println(message.getHtmlBody());
    }
} catch (Exception ex) {
    System.out.println(ex.getMessage());
} finally {
    client.dispose();
}

Abrufen von Nachrichten‑Zusammenfassungsinformationen mittels eindeutiger ID

Der POP3‑Client der API kann zusammenfassende Nachrichteninformationen vom Server mittels der eindeutigen ID der Nachricht abrufen. Dies ermöglicht schnellen Zugriff auf Kurzinfos der Nachricht, ohne die komplette Nachricht zuerst vom Server zu holen. Das folgende Code‑Snippet zeigt, wie Sie Nachrichten‑Zusammenfassungsinformationen abrufen.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
String uniqueId = "unique id of a message from server";
Pop3Client client = new Pop3Client("host.domain.com", 456, "username", "password");
client.setSecurityOptions(SecurityOptions.Auto);
Pop3MessageInfo messageInfo = client.getMessageInfo(uniqueId);

if (messageInfo != null) {
    System.out.println(messageInfo.getSubject());
    System.out.println(messageInfo.getDate());
}

Nachrichten mit MultiConnection auflisten

Pop3Client bietet ein UseMultiConnection Eigenschaft, die verwendet werden kann, um mehrere Verbindungen für umfangreiche Vorgänge zu erstellen. Sie können auch die Anzahl der Verbindungen festlegen, die im Multi‑Connection‑Modus verwendet werden sollen, indem Sie Pop3Client.ConnectionsQuantity. Das folgende Code‑Snippet demonstriert die Verwendung des Multi‑Connection‑Modus zum Auflisten von Nachrichten und vergleicht dessen Leistung mit dem Einzel‑Verbindungs‑Modus.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Create an instance of the Pop3Client class
Pop3Client pop3Client = new Pop3Client();
pop3Client.setHost("<HOST>");
pop3Client.setPort(995);
pop3Client.setUsername("<USERNAME>");
pop3Client.setPassword("<PASSWORD>");

pop3Client.setConnectionsQuantity(5);
pop3Client.setUseMultiConnection(MultiConnectionMode.Enable);
long multiConnectionModeStartTime = System.currentTimeMillis();
Pop3MessageInfoCollection messageInfoCol1 = pop3Client.listMessages();
long multiConnectionModeTimeSpan = System.currentTimeMillis() - multiConnectionModeStartTime;

pop3Client.setUseMultiConnection(MultiConnectionMode.Disable);
long singleConnectionModeStartTime = System.currentTimeMillis();
Pop3MessageInfoCollection messageInfoCol2 = pop3Client.listMessages();
long singleConnectionModeTimeSpan = System.currentTimeMillis() - singleConnectionModeStartTime;

System.out.println("multyConnectionModeTimeSpan: " + multiConnectionModeTimeSpan);
System.out.println("singleConnectionModeTimeSpan: " + singleConnectionModeTimeSpan);
double performanceRelation = singleConnectionModeTimeSpan / multiConnectionModeTimeSpan;
System.out.println("Performance Relation: " + performanceRelation);

Abrufen von Nachrichten vom Server und Speichern auf Disk

Nachricht ohne Parsing auf Disk speichern

Wenn Sie E‑Mail‑Nachrichten vom POP3‑Server ohne Parsing herunterladen möchten, verwenden Sie die Pop3Client Klasse saveMessage Funktion. Die saveMessage Funktion parsed die E‑Mail nicht, daher ist sie schneller als die fetchMessage Funktion. Das folgende Code‑Snippet zeigt, wie man eine Nachricht anhand ihrer Sequenznummer speichert, in diesem Fall Nummer 1. Die saveMessage Methode speichert die Nachricht im ursprünglichen EML‑Format ohne sie zu parsen.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// The path to the File directory.
String dataDir = "pop3/";
String dstEmail = dataDir + "InsertHeaders.eml";

// Create an instance of the Pop3Client class
Pop3Client client = new Pop3Client();

// Specify host, username, password, Port and SecurityOptions for your client
client.setHost("pop.gmail.com");
client.setUsername("your.username@gmail.com");
client.setPassword("your.password");
client.setPort(995);
client.setSecurityOptions(SecurityOptions.Auto);

try {
    // Save message to disk by message sequence number
    client.saveMessage(1, dstEmail);
    client.dispose();
} catch (Exception ex) {
    System.out.println(ex.getMessage());
}
System.out.println("Retrieved email messages using POP3 ");

Nachricht vor dem Speichern parsen

Das folgende Code‑Snippet verwendet die Pop3Client fetchMessage Methode, um eine Nachricht von einem POP3‑Server anhand ihrer Sequenznummer abzurufen und dann die Nachricht auf Disk zu speichern, wobei der Betreff als Dateiname verwendet wird.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// The path to the File directory.
String dataDir = "pop3/";

// Create an instance of the Pop3Client class
Pop3Client client = new Pop3Client();

// Specify host, username and password, Port and SecurityOptions for your client
client.setHost("pop.gmail.com");
client.setUsername("your.username@gmail.com");
client.setPassword("your.password");
client.setPort(995);
client.setSecurityOptions(SecurityOptions.Auto);

try {
    // Fetch the message by its sequence number and Save the message using its subject as the file name
    MailMessage msg = client.fetchMessage(1);
    msg.save(dataDir + "first-message_out.eml", SaveOptions.getDefaultEml());
    client.dispose();
} catch (Exception ex) {
    System.out.println(ex.getMessage());
} finally {
    client.dispose();
}

Gruppenabfrage von Nachrichten

Pop3Client bietet ein fetchMessages Methode, die ein Iterable von Sequenznummern oder eindeutiger ID akzeptiert und eine Liste von MailMessage. Das folgende Code‑Snippet demonstriert die Verwendung von fetchMessages Methode zum Abrufen von Nachrichten mittels Sequenznummern und eindeutiger ID.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Create an instance of the Pop3Client class
Pop3Client pop3Client = new Pop3Client();
pop3Client.setHost("<HOST>");
pop3Client.setPort(995);
pop3Client.setUsername("<USERNAME>");
pop3Client.setPassword("<PASSWORD>");

Pop3MessageInfoCollection messageInfoCol = pop3Client.listMessages();
System.out.println("ListMessages Count: " + messageInfoCol.size());

List<Integer> sequenceNumberAr = new ArrayList<Integer>();
List<String> uniqueIdAr = new ArrayList<String>();
for (Pop3MessageInfo mi : messageInfoCol) {
    sequenceNumberAr.add(mi.getSequenceNumber());
    uniqueIdAr.add(mi.getUniqueId());
}

for (MailMessage m : pop3Client.fetchMessagesBySequences(sequenceNumberAr)) {
    System.out.println("FetchMessages-sequenceNumberAr : " + m.getSubject());
}

for (MailMessage m : pop3Client.fetchMessagesByUids(uniqueIdAr)) {
    System.out.println("FetchMessages-uniqueIdAr : " + m.getSubject());
}

Filtern von Nachrichten nach Absender, Empfänger oder Datum

Die Pop3Client Klasse, beschrieben in Verbindung zu einem POP3‑Server herstellen, stellt die listMessages Methode, die alle Nachrichten aus einem Postfach holt. Um nur Nachrichten zu erhalten, die einer Bedingung entsprechen, verwende die überladene listMessages Methode, die nimmt MailQuery als Argument. Die MailQuery Klasse bietet verschiedene Eigenschaften zur Angabe der Suchbedingungen, z. B. Datum, Betreff, Absender, Empfänger usw. Die MailQueryBuilder Klasse wird verwendet, um den Suchausdruck zu erstellen. Zuerst werden alle Bedingungen und Einschränkungen gesetzt und dann MailQuery wird gefüllt mit der von MailQueryBuilder. Die MailQuery Klassenobjekt wird verwendet von Pop3Client um die gefilterten Informationen vom Server zu extrahieren. Dieser Artikel zeigt, wie man E‑Mail‑Nachrichten aus einem Postfach filtert. Das erste Beispiel illustriert das Filtern nach Datum und Betreff. Wir zeigen außerdem das Filtern nach anderen Kriterien und das Erstellen komplexerer Abfragen. Es wird zudem die Anwendung von Datums‑ und Zeit‑Filtern gezeigt, um bestimmte E‑Mails aus dem Postfach abzurufen. Zusätzlich wird gezeigt, wie man case‑sensitive Filter anwendet.

Filtern von Nachrichten aus dem Postfach

Um Nachrichten aus einem Postfach zu filtern:

  1. Verbinden und Anmelden an einem POP3‑Server.
  2. Erstellen Sie eine Instanz von MailQuery und die gewünschten Eigenschaften setzen.
  3. Rufen Sie die Pop3Client.listMessages(MailQuery query) Methode und übergeben Sie die MailQuery in Parametern, um nur die gefilterten Nachrichten zu erhalten.

Das folgende Code‑Snippet zeigt, wie man sich mit einem POP3‑Postfach verbindet und Nachrichten abruft, die heute eingegangen sind und das Wort "newsletter" im Betreff haben.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Connect and log in to POP3
String host = "host";
int port = 110;
String username = "user@host.com";
String password = "password";
Pop3Client client = new Pop3Client(host, port, username, password);

// Set conditions, Subject contains "Newsletter", Emails that arrived today
MailQueryBuilder builder = new MailQueryBuilder();
builder.getSubject().contains("Newsletter");
builder.getInternalDate().on(new Date());
// Build the query and Get list of messages
MailQuery query = builder.getQuery();
Pop3MessageInfoCollection messages = client.listMessages(query);
System.out.println("Pop3: " + messages.size() + " message(s) found.");

Abrufen von Nachrichten, die bestimmte Kriterien erfüllen

Die obigen Code‑Beispiele filtert Nachrichten basierend auf Betreff und Datum der E‑Mail. Wir können weitere Eigenschaften nutzen, um weitere unterstützte Bedingungen zu setzen. Nachfolgend einige Beispiele zum Setzen der Bedingungen mit MailQuery.

Die folgenden Code‑Snippets zeigen, wie man E‑Mails nach anderen Kriterien filtert:

  • E‑Mails, die heute zugestellt wurden, finden.
  • E‑Mails innerhalb eines Zeitraums finden.
  • E‑Mails von einem bestimmten Absender finden.
  • E‑Mails von einer bestimmten Domäne finden.
  • E‑Mails an einen bestimmten Empfänger finden.

Heutiges Datum

Das folgende Code‑Snippet zeigt, wie man E‑Mails, die heute zugestellt wurden, findet.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Emails that arrived today
MailQueryBuilder builder = new MailQueryBuilder();
builder.getInternalDate().on(new Date());

Datumsbereich

Das folgende Code‑Snippet zeigt, wie man E‑Mails innerhalb eines Zeitraums findet.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Emails that arrived in last 7 days
Calendar calendar = Calendar.getInstance();

builder.getInternalDate().before(calendar.getTime());
calendar.add(Calendar.DATE, -7);
builder.getInternalDate().since(calendar.getTime());

Bestimmter Absender

Das folgende Code‑Snippet zeigt, wie man E‑Mails von einem bestimmten Absender findet.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Get emails from specific sender
builder.getFrom().contains("saqib.razzaq@127.0.0.1");

Bestimmte Domäne

Das folgende Code‑Snippet zeigt, wie man E‑Mails von einer bestimmten Domäne findet.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Get emails from specific domain
builder.getFrom().contains("SpecificHost.com");

Bestimmter Empfänger

Das folgende Code‑Snippet zeigt, wie man E‑Mails an einen bestimmten Empfänger findet.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Get emails sent to specific recipient
builder.getTo().contains("recipient");

Komplexe Abfragen erstellen

Falls unterschiedlich MailQueryBuilder Eigenschaften werden in separaten Anweisungen gesetzt, dann würden alle Bedingungen erfüllt. Zum Beispiel, wenn wir Nachrichten zwischen einem Datumsbereich und von einem bestimmten Host erhalten wollen, müssen wir drei Anweisungen schreiben.

Abfragen mit AND kombinieren

Das folgende Code‑Snippet zeigt, wie man Abfragen mit AND kombiniert.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Emails from specific host, get all emails that arrived before today and all emails that arrived since 7 days ago
builder.getFrom().contains("SpecificHost.com");

Calendar calendar = Calendar.getInstance();

builder.getInternalDate().before(calendar.getTime());
calendar.add(Calendar.DATE, -7);
builder.getInternalDate().since(calendar.getTime());

Abfragen mit OR kombinieren

MailQueryBuilder stellt die oder Methode, die zwei MailQuery Instanzen als Parameter. Sie holt die Nachrichten, die einer der beiden angegebenen Bedingungen entsprechen. Das folgende Code‑Snippet zeigt, wie man Nachrichten filtert, die entweder "test" im Betreff oder "noreply@host.com" als Absender haben. Das folgende Code‑Snippet zeigt, wie man Abfragen mit OR kombiniert.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Specify OR condition
builder.or(builder.getSubject().contains("test"), builder.getFrom().contains("noreply@host.com"));

Anwenden von case‑sensitive Filtern

Die API bietet zudem die Möglichkeit, E‑Mails im Postfach anhand eines case‑sensitive Kriteriums zu filtern. Die folgenden Methoden ermöglichen die Suche von E‑Mails mit Angabe eines case‑sensitive‑Flags.

  • Method StringComparisonField.contains(String value, boolean ignoreCase)
  • Method StringComparisonField.equals(String value, boolean ignoreCase)
  • Method StringComparisonField.notContains(String boolean, bool ignoreCase)
  • Method StringComparisonField.notEquals(String boolean, bool ignoreCase)
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// IgnoreCase is True
MailQueryBuilder builder1 = new MailQueryBuilder();
builder1.getFrom().contains("tesT", true);
MailQuery query1 = builder1.getQuery();
Pop3MessageInfoCollection messageInfoCol1 = client.listMessages(query1);