Lavorare con i messaggi dal server

Ottenere informazioni sulla casella di posta

Possiamo ottenere informazioni sulla casella di posta, come il numero di messaggi e la dimensione della casella, usando il getMailBoxSize e getMailBoxInfo metodi di Pop3Client classe.

È anche possibile ottenere il numero di messaggi usando il MessageCount proprietà e la dimensione usando il OccupiedSize proprietà del Pop3MailBoxInfo classe. Il seguente esempio di codice mostra come ottenere informazioni sulla casella di posta. Mostra come:

  1. Crea un Pop3Client.
  2. Connettersi a un server POP3.
  3. Ottieni la dimensione della casella di posta.
  4. Ottieni informazioni sulla casella di posta.
  5. Ottieni il numero di messaggi nella casella di posta.
  6. Ottieni la dimensione occupata.
// 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);

Ottenere il conteggio delle email nella casella di posta

Il seguente frammento di codice mostra come contare i messaggi email in una casella di posta.

// 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 consente agli sviluppatori di lavorare con le email in molteplici modi. Ad esempio, possono recuperare le informazioni delle intestazioni prima di decidere se scaricare un’email. Oppure possono recuperare email da un server e salvarle senza analizzarle (più veloce) o dopo l’analisi (più lento). Questo articolo mostra come recuperare e convertire le email.

Recupero delle informazioni delle intestazioni email

Le intestazioni delle email possono fornirci informazioni su un messaggio email che possiamo usare per decidere se recuperare o meno l’intero messaggio email. In genere, le informazioni dell’intestazione contengono mittente, oggetto, data di ricezione, ecc. (Le intestazioni delle email sono descritte in dettaglio in Personalizzazione delle intestazioni email. Quell’argomento riguarda specificamente l’invio di un’email con SMTP, ma le informazioni del contenuto dell’intestazione dell’email rimangono valide per le email POP3). Gli esempi seguenti mostrano come recuperare le intestazioni delle email da un server POP3 tramite il numero di sequenza del messaggio.

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

Recupero dei messaggi email

Il Pop3Client il componente di classe fornisce la capacità di recuperare i messaggi email dal server POP3 e analizzarli in un MailMessage istanza con l’aiuto di MailMessage componenti. Il MailMessage la classe contiene diverse proprietà e metodi per manipolare il contenuto email. Usando fetchMessage metodo del Pop3Client classe, puoi ottenere un MailMessage istanza direttamente dal server POP3. Il seguente snippet di codice mostra come recuperare un messaggio email completo dal server 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();
}

Recupero delle informazioni di riepilogo del messaggio usando l’ID unico

Il client POP3 dell’API può recuperare le informazioni di riepilogo del messaggio dal server usando l’ID unico del messaggio. Questo fornisce un accesso rapido alle informazioni sintetiche del messaggio senza dover prima recuperare il messaggio completo dal server. Il seguente snippet di codice mostra come recuperare le informazioni di riepilogo del messaggio.

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

Elenco dei messaggi con MultiConnection

Pop3Client fornisce un UseMultiConnection proprietà che può essere usata per creare più connessioni per operazioni intensive. È inoltre possibile impostare il numero di connessioni da utilizzare durante la modalità multiconnessione usando Pop3Client.ConnectionsQuantity. Il seguente snippet di codice dimostra l’uso della modalità multiconnessione per elencare i messaggi e confronta le sue prestazioni con la modalità a singola connessione.

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

Recuperare messaggi dal server e salvarli su disco

Salva il messaggio su disco senza analisi

Se vuoi scaricare i messaggi email dal server POP3 senza analizzarli, usa il Pop3Client classe saveMessage funzione. Il saveMessage funzione non analizza il messaggio email quindi è più veloce del fetchMessage funzione. Il seguente frammento di codice mostra come salvare un messaggio per il suo numero di sequenza, in questo caso, numero 1. Il saveMessage metodo salva il messaggio nel formato EML originale senza analizzarlo.

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

Analizza il messaggio prima di salvarlo

Il seguente frammento di codice usa il Pop3Client fetchMessage metodo per recuperare un messaggio da un server POP3 tramite il suo numero di sequenza, quindi salvare il messaggio su disco usando l’oggetto come nome file.

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

Recupero di messaggi in gruppo

Pop3Client fornisce un fetchMessages metodo che accetta un iterabile di Numeri di sequenza o ID unico e restituisce una lista di MailMessage. Il seguente frammento di codice dimostra l’uso del fetchMessages metodo per recuperare messaggi per Numero di sequenza e ID unico.

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

Filtrare i messaggi per mittente, destinatario o data

Il Pop3Client classe, descritta in Connessione a un server POP3, fornisce il listMessages metodo che ottiene tutti i messaggi da una casella di posta. Per ottenere solo i messaggi che corrispondono a una condizione, usa il sovraccaricato listMessages metodo che prende MailQuery come argomento. Il MailQuery la classe fornisce varie proprietà per specificare le condizioni della query, ad esempio data, oggetto, mittente, destinatario e così via. Il MailQueryBuilder la classe è usata per costruire l’espressione di ricerca. Prima, tutte le condizioni e i vincoli sono impostati e poi MailQuery viene riempito con la query sviluppata da MailQueryBuilder. Il MailQuery l’oggetto classe è usato da Pop3Client per estrarre le informazioni filtrate dal server. Questo articolo mostra come filtrare i messaggi email da una casella di posta. Il primo esempio illustra come filtrare i messaggi in base a una data e a un oggetto. Mostriamo anche come filtrare su altri criteri e come costruire query più complesse. Mostra inoltre l’applicazione del filtro Data e Ora per recuperare le email specifiche dalla casella di posta. Inoltre, mostra come applicare il filtraggio case-sensitive.

Filtrare i messaggi dalla casella di posta

Per filtrare i messaggi da una casella di posta:

  1. Connettersi e accedere a un server POP3.
  2. Crea un’istanza di MailQuery e impostare le proprietà desiderate.
  3. Chiama il Pop3Client.listMessages(MailQuery query) metodo e passa il MailQuery nei parametri per ottenere solo i messaggi filtrati.

Il seguente frammento di codice mostra come connettersi a una casella di posta POP3 e ottenere i messaggi arrivati oggi e che contengono la parola "newsletter" nell’oggetto.

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

Ottenere messaggi che soddisfano criteri specifici

I campioni di codice sopra filtra i messaggi in base all’oggetto dell’email e alla data. Possiamo usare altre proprietà per impostare altre condizioni supportate. Di seguito alcuni esempi di impostazione delle condizioni usando MailQuery.

I frammenti di codice seguenti mostrano come filtrare le email su altri criteri:

  • Trova email consegnate oggi.
  • Trova email ricevute entro un intervallo.
  • Trova email da un mittente specifico.
  • Trova email inviate da un dominio specifico.
  • Trova email inviate a un destinatario specifico.

Data di oggi

Il seguente frammento di codice mostra come trovare email consegnate oggi.

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

Intervallo di date

Il seguente frammento di codice mostra come trovare email ricevute entro un intervallo.

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

Mittente specifico

Il seguente frammento di codice mostra come trovare email da un mittente specifico.

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

Dominio specifico

Il seguente frammento di codice mostra come trovare email inviate da un dominio specifico.

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

Destinatario specifico

Il seguente frammento di codice mostra come trovare email inviate a un destinatario specifico.

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

Costruire Query Complesse

Se diversi MailQueryBuilder le proprietà sono impostate in istruzioni separate, quindi tutte le condizioni verrebbero soddisfatte. Ad esempio, se desideriamo ottenere messaggi tra un intervallo di date e da un host specifico, dobbiamo scrivere tre istruzioni.

Combinare Query con AND

Il seguente frammento di codice mostra come combinare query con 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());

Combinare Query con OR

MailQueryBuilder fornisce il oppure metodo che prende due MailQuery istanze come parametri. Recupera i messaggi che corrispondono a una delle due condizioni specificate. Il seguente frammento di codice mostra come filtrare i messaggi che hanno "test" nell’oggetto o "noreply@host.com" come mittente. Il seguente frammento di codice mostra come combinare query con 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"));

Applicazione di filtri case sensitive

L’API fornisce anche la capacità di filtrare le email dalla casella di posta basandosi su criteri sensibili al maiuscolo/minuscolo. I metodi seguenti offrono la possibilità di cercare email specificando il flag case sensitive.

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