Trabalhando com Mensagens do Servidor

Obtendo Informações da Caixa de Correio

Podemos obter informações sobre a caixa de correio, como o número de mensagens e o tamanho da caixa, usando o getMailBoxSize e getMailBoxInfo métodos de Pop3Client classe.

Também é possível obter o número de mensagens usando o MessageCount propriedade e o tamanho usando o OccupiedSize propriedade do Pop3MailBoxInfo classe. O código de exemplo a seguir mostra como obter informações sobre a caixa de correio. Ele demonstra como:

  1. Crie um Pop3Client.
  2. Conectar a um servidor POP3.
  3. Obter o tamanho da caixa de correio.
  4. Obter informações da caixa de correio.
  5. Obter o número de mensagens na caixa de correio.
  6. Obter o tamanho ocupado.
// 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);

Obtendo a Contagem de E‑mails na Caixa de Correio

O trecho de código a seguir mostra como contar as mensagens de e‑mail em uma caixa de correio.

// 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 permite que desenvolvedores trabalhem com e‑mails de várias maneiras. Por exemplo, podem recuperar informações de cabeçalho antes de decidir baixar um e‑mail. Ou podem recuperar e‑mails de um servidor e salvá‑los sem analisá‑los (mais rápido) ou após a análise (mais lento). Este artigo mostra como recuperar e converter e‑mails.

Recuperando Informações dos Cabeçalhos de E‑mail

Os cabeçalhos de e‑mail podem nos fornecer informações sobre uma mensagem que podemos usar para decidir se devemos ou não recuperar a mensagem completa. Normalmente, as informações de cabeçalho contêm remetente, assunto, data de recebimento, etc. (Os cabeçalhos de e‑mail são descritos em detalhe em Personalizando Cabeçalhos de E‑mail. Esse tópico trata especificamente do envio de e‑mail com SMTP, mas as informações de cabeçalho de e‑mail permanecem válidas para e‑mails POP3). Os exemplos a seguir mostram como recuperar cabeçalhos de e‑mail de um servidor POP3 pelo número de sequência da mensagem.

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

Recuperando Mensagens de E‑mail

O Pop3Client o componente de classe fornece a capacidade de recuperar mensagens de e‑mail do servidor POP3 e analisá‑las em um MailMessage instância com a ajuda de MailMessage componentes. O MailMessage classe contém várias propriedades e métodos para manipular o conteúdo de e‑mail. Usando fetchMessage método do Pop3Client classe, você pode obter um MailMessage instância diretamente do servidor POP3. O trecho de código a seguir mostra como recuperar uma mensagem de e‑mail completa do servidor 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();
}

Recuperando Informações Resumidas da Mensagem usando ID Único

O Cliente POP3 da API pode recuperar informações resumidas da mensagem do servidor usando o ID único da mensagem. Isso fornece acesso rápido às informações resumidas da mensagem sem precisar recuperar a mensagem completa do servidor primeiro. O trecho de código a seguir mostra como recuperar informações resumidas da mensagem.

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

Listando Mensagens com MultiConnection

Pop3Client fornece um UseMultiConnection propriedade que pode ser usada para criar múltiplas conexões para operações intensas. Você também pode definir o número de conexões a ser usado durante o modo multiconexão usando Pop3Client.ConnectionsQuantity. O trecho de código a seguir demonstra o uso do modo multiconexão para listar mensagens e compara seu desempenho com o modo de conexão única.

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

Obtendo Mensagens do Servidor e salvando no Disco

Salvar Mensagem no Disco sem Analisar

Se quiser baixar mensagens de e‑mail do servidor POP3 sem analisá‑las, use o Pop3Client classe saveMessage função. O saveMessage função não analisa a mensagem de e‑mail, portanto é mais rápida que o fetchMessage função. O trecho de código a seguir mostra como salvar uma mensagem pelo seu número de sequência, neste caso, número 1. O saveMessage método salva a mensagem no formato EML original sem analisá‑la.

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

Analisar Mensagem Antes de Salvar

O trecho de código a seguir usa o Pop3Client fetchMessage método para recuperar uma mensagem de um servidor POP3 pelo seu número de sequência e, em seguida, salvar a mensagem no disco usando o assunto como nome do arquivo.

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

Busca de Mensagens em Grupo

Pop3Client fornece um fetchMessages método que aceita um iterável de Números de Sequência ou ID Único e retorna uma lista de MailMessage. O trecho de código a seguir demonstra o uso do fetchMessages método para buscar mensagens por Números de Sequência e ID Único.

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

Filtrando Mensagens por Remetente, Destinatário ou Data

O Pop3Client classe, descrita em Conectando a um Servidor POP3, fornece o listMessages método que obtém todas as mensagens de uma caixa de correio. Para obter apenas mensagens que correspondam a alguma condição, use o sobrecarregado listMessages método que recebe MailQuery como argumento. O MailQuery classe fornece várias propriedades para especificar as condições da consulta, por exemplo, data, assunto, remetente, destinatário etc. O MailQueryBuilder classe é usada para construir a expressão de busca. Primeiro, todas as condições e restrições são definidas e então MailQuery é preenchido com a consulta desenvolvida por MailQueryBuilder. O MailQuery objeto de classe é usado por Pop3Client para extrair as informações filtradas do servidor. Este artigo mostra como filtrar mensagens de e‑mail de uma caixa de correio. O primeiro exemplo ilustra como filtrar mensagens com base em data e assunto. Também mostramos como filtrar por outros critérios e como construir consultas mais complexas. Ele demonstra a aplicação de filtro de Data e Hora para recuperar e‑mails específicos da caixa de correio. Além disso, mostra como aplicar filtragem sensível a maiúsculas/minúsculas.

Filtrando Mensagens da Caixa de Correio

Para filtrar mensagens de uma caixa de correio:

  1. Conectar e fazer login em um servidor POP3.
  2. Crie uma instância de MailQuery e definir as propriedades desejadas.
  3. Chame o Pop3Client.listMessages(MailQuery query) método e passar o MailQuery nos parâmetros para obter apenas as mensagens filtradas.

O trecho de código a seguir mostra como conectar a uma caixa de correio POP3 e obter mensagens que chegaram hoje e têm a palavra "newsletter" no assunto.

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

Obtendo Mensagens que Atendem a Critérios Específicos

Os exemplos de código acima filtra mensagens com base no assunto e data do e‑mail. Também podemos usar outras propriedades para definir outras condições suportadas. Abaixo estão alguns exemplos de definição de condições usando MailQuery.

Os trechos de código a seguir mostram como filtrar e‑mails por outros critérios:

  • Encontrar e‑mails entregues hoje.
  • Encontrar e‑mails recebidos dentro de um intervalo.
  • Encontrar e‑mails de um remetente específico.
  • Encontrar e‑mails enviados de um domínio específico.
  • Encontrar e‑mails enviados a um destinatário específico.

Data de Hoje

O trecho de código a seguir mostra como encontrar e‑mails entregues hoje.

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

Intervalo de Datas

O trecho de código a seguir mostra como encontrar e‑mails recebidos dentro de um intervalo.

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

Remetente Específico

O trecho de código a seguir mostra como encontrar e‑mails de um remetente específico.

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

Domínio Específico

O trecho de código a seguir mostra como encontrar e‑mails enviados de um domínio específico.

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

Destinatário Específico

O trecho de código a seguir mostra como encontrar e‑mails enviados a um destinatário específico.

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

Construindo consultas complexas

Se diferentes MailQueryBuilder as propriedades são definidas em declarações separadas, então todas as condições seriam atendidas. Por exemplo, se quisermos obter mensagens entre um intervalo de datas e de um host específico, precisamos escrever três declarações.

Combinando consultas com AND

O trecho de código a seguir mostra como combinar consultas com 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());

Combinando consultas com OR

MailQueryBuilder fornece o ou método que aceita dois MailQuery instâncias como parâmetros. Ele obtém as mensagens que correspondem a qualquer uma das duas condições especificadas. O trecho de código a seguir mostra como filtrar mensagens que têm "test" no assunto ou "noreply@host.com" como remetente. O trecho de código a seguir mostra como combinar consultas com 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"));

Aplicando Filtros Sensíveis a Maiúsculas/Minúsculas

A API também fornece a capacidade de filtrar e‑mails da caixa de correio com base em um critério sensível a maiúsculas/minúsculas. Os métodos a seguir permitem buscar e‑mails especificando a flag sensível a maiúsculas/minúsculas.

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