Travailler avec les messages du serveur

Obtention des informations de la boîte aux lettres

Nous pouvons obtenir des informations sur la boîte aux lettres, telles que le nombre de messages et la taille de la boîte aux lettres, à l’aide du getMailBoxSize et getMailBoxInfo méthodes de la Pop3Client classe.

Il est également possible d’obtenir le nombre de messages à l’aide du MessageCount propriété et la taille à l’aide de OccupiedSize propriété du Pop3MailBoxInfo classe. Le code d’exemple suivant montre comment obtenir des informations sur la boîte aux lettres. Il montre comment :

  1. Créez un Pop3Client.
  2. Se connecter à un serveur POP3.
  3. Obtenir la taille de la boîte aux lettres.
  4. Obtenir les informations de la boîte aux lettres.
  5. Obtenir le nombre de messages dans la boîte aux lettres.
  6. Obtenir la taille occupé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);

Obtention du nombre de messages dans la boîte aux lettres

Le snippet de code suivant montre comment compter les messages e‑mail dans une boîte aux lettres.

// 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 permet aux développeurs de travailler avec les e‑mails de nombreuses manières. Par exemple, ils peuvent récupérer les informations d’en‑tête avant de décider de télécharger un e‑mail. Ou ils peuvent récupérer les e‑mails depuis un serveur et les enregistrer sans les analyser (plus rapide) ou après les avoir analysés (plus lent). Cet article montre comment récupérer et convertir les e‑mails.

Récupération des informations des en‑têtes d’e‑mail

Les en‑têtes d’e‑mail peuvent nous fournir des informations sur un message que nous pouvons utiliser pour décider de récupérer ou non le message complet. Typiquement, les informations d’en‑tête contiennent l’expéditeur, l’objet, la date de réception, etc. (Les en‑têtes d’e‑mail sont décrites en détail dans Personnalisation des en‑têtes d’e‑mail. Ce sujet porte spécifiquement sur l’envoi d’un e‑mail avec SMTP, mais les informations du contenu de l’en‑tête restent valides pour les e‑mails POP3). Les exemples suivants montrent comment récupérer les en‑têtes d’e‑mail depuis un serveur POP3 par le numéro de séquence du message.

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

Récupération des messages électroniques

Le Pop3Client le composant de classe offre la capacité de récupérer les messages électroniques depuis le serveur POP3, et de les analyser en un MailMessage instance avec l’aide de MailMessage composants. Le MailMessage la classe contient plusieurs propriétés et méthodes pour manipuler le contenu des e‑mails. En utilisant fetchMessage méthode du Pop3Client classe, vous pouvez obtenir un MailMessage instance directement depuis le serveur POP3. Le fragment de code suivant vous montre comment récupérer un message e‑mail complet depuis le serveur POP3.

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

Récupération des informations récapitulatives d’un message à l’aide d’un Id unique

Le client POP3 de l’API peut récupérer les informations récapitulatives d’un message depuis le serveur en utilisant l’identifiant unique du message. Cela permet d’accéder rapidement aux informations résumées du message sans d’abord récupérer le message complet depuis le serveur. Le fragment de code suivant vous montre comment récupérer les informations récapitulatives d’un message.

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

Lister les messages avec MultiConnection

Pop3Client fournit un UseMultiConnection propriété qui peut être utilisée pour créer plusieurs connexions pour des opérations intensives. Vous pouvez également définir le nombre de connexions à utiliser pendant le mode multiconnection en utilisant Pop3Client.ConnectionsQuantity. Le fragment de code suivant démontre l’utilisation du mode multiconnection pour lister les messages et compare ses performances avec le mode connexion unique.

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

Récupération des messages du serveur et enregistrement sur disque

Enregistrer le message sur le disque sans analyse

Si vous souhaitez télécharger les messages e‑mail depuis le serveur POP3 sans les analyser, utilisez le Pop3Client classe saveMessage fonction. Le saveMessage fonction ne parse pas le message e‑mail, il est donc plus rapide que le fetchMessage fonction. Le snippet de code suivant montre comment enregistrer un message par son numéro de séquence, dans ce cas, le numéro 1. Le saveMessage méthode enregistre le message au format EML original sans l’analyser.

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

Analyser le message avant l’enregistrement

Le snippet de code suivant utilise le Pop3Client fetchMessage méthode pour récupérer un message depuis un serveur POP3 par son numéro de séquence, puis enregistrer le message sur le disque en utilisant l’objet comme nom de fichier.

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

Récupération groupée des messages

Pop3Client fournit un fetchMessages méthode qui accepte un itérable de Numéros de séquence ou d’ID unique et renvoie une liste de MailMessage. Le snippet de code suivant démontre l’utilisation du fetchMessages méthode pour récupérer les messages par Numéros de séquence et ID unique.

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

Filtrage des messages par expéditeur, destinataire ou date

Le Pop3Client classe, décrite dans Connexion à un serveur POP3, fournit le listMessages méthode qui récupère tous les messages d’une boîte aux lettres. Pour obtenir uniquement les messages correspondant à une condition, utilisez le surchargé listMessages méthode qui prend MailQuery comme argument. Le MailQuery la classe fournit diverses propriétés pour spécifier les conditions de la requête, par exemple, date, objet, expéditeur, destinataire, etc. Le MailQueryBuilder la classe est utilisée pour construire l’expression de recherche. D’abord, toutes les conditions et contraintes sont définies puis MailQuery est rempli avec la requête développée par MailQueryBuilder. Le MailQuery objet de classe est utilisé par Pop3Client pour extraire les informations filtrées du serveur. Cet article montre comment filtrer les messages e‑mail d’une boîte aux lettres. Le premier exemple illustre le filtrage des messages selon une date et un objet. Nous montrons également comment filtrer sur d’autres critères et comment construire des requêtes plus complexes. Il montre aussi l’application d’un filtre Date et Heure pour récupérer les e‑mails spécifiques de la boîte aux lettres. De plus, il montre comment appliquer un filtrage sensible à la casse.

Filtrage des messages de la boîte aux lettres

Pour filtrer les messages d’une boîte aux lettres :

  1. Se connecter et s’authentifier à un serveur POP3.
  2. Créez une instance de MailQuery et définir les propriétés souhaitées.
  3. Appelez le Pop3Client.listMessages(MailQuery query) méthode et passer le MailQuery dans les paramètres pour obtenir uniquement les messages filtrés.

Le snippet de code suivant montre comment se connecter à une boîte aux lettres POP3 et récupérer les messages arrivés aujourd’hui et contenant le mot "newsletter" dans l’objet.

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

Obtention des messages répondant à des critères spécifiques

Les exemples de code ci‑dessus filtre les messages en fonction de l’objet et de la date du e‑mail. Nous pouvons également utiliser d’autres propriétés pour définir d’autres conditions prises en charge. Voici quelques exemples de définition des conditions avec MailQuery.

Les snippets de code qui suivent montrent comment filtrer les e‑mails selon d’autres critères :

  • Trouver les e‑mails livrés aujourd’hui.
  • Trouver les e‑mails reçus dans une plage.
  • Trouver les e‑mails d’un expéditeur spécifique.
  • Trouver les e‑mails envoyés depuis un domaine spécifique.
  • Trouver les e‑mails envoyés à un destinataire spécifique.

Date d’aujourd’hui

Le snippet de code suivant montre comment trouver les e‑mails livrés aujourd’hui.

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

Plage de dates

Le snippet de code suivant montre comment trouver les e‑mails reçus dans une plage.

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

Expéditeur spécifique

Le snippet de code suivant montre comment trouver les e‑mails d’un expéditeur spécifique.

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

Domaine spécifique

Le snippet de code suivant montre comment trouver les e‑mails envoyés depuis un domaine spécifique.

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

Destinataire spécifique

Le snippet de code suivant montre comment trouver les e‑mails envoyés à un destinataire spécifique.

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

Construire des requêtes complexes

Si différent MailQueryBuilder les propriétés sont définies dans des instructions séparées, puis toutes les conditions seraient satisfaites. Par exemple, si nous voulons obtenir les messages entre une plage de dates et d’un hôte spécifique, nous devons écrire trois instructions.

Combiner des requêtes avec AND

Le snippet de code suivant montre comment combiner des requêtes avec AND.

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

Combiner des requêtes avec OR

MailQueryBuilder fournit le ou méthode qui prend deux MailQuery instances en tant que paramètres. Elle récupère les messages qui correspondent à l’une ou l’autre des deux conditions spécifiées. Le snippet de code suivant montre comment filtrer les messages qui ont soit "test" dans l’objet, soit "noreply@host.com" comme expéditeur. Le snippet de code suivant montre comment combiner des requêtes avec OR.

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

Application de filtres sensibles à la casse

L’API offre également la capacité de filtrer les e‑mails de la boîte aux lettres en fonction d’un critère sensible à la casse. Les méthodes suivantes permettent de rechercher des e‑mails en spécifiant le drapeau sensible à la casse.

  • Méthode StringComparisonField.contains(String value, boolean ignoreCase)
  • Méthode StringComparisonField.equals(String value, boolean ignoreCase)
  • Méthode StringComparisonField.notContains(String boolean, bool ignoreCase)
  • Méthode 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);