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 de correio, utilizando os métodos getMailBoxSize e getMailBoxInfo da classe Pop3Client.
- O método getMailBoxSize retorna o tamanho da caixa de correio em bytes.
- O método getMailBoxInfo retorna um objeto do tipo Pop3MailBoxInfo.
Também é possível obter o número de mensagens utilizando a propriedade MessageCount e o tamanho utilizando a propriedade OccupiedSize da classe Pop3MailBoxInfo. O seguinte código de exemplo mostra como obter informações sobre a caixa de correio. Ele mostra como:
- Criar um Pop3Client.
- Conectar a um servidor POP3.
- Obter o tamanho da caixa de correio.
- Obter informações da caixa de correio.
- Obter o número de mensagens na caixa de correio.
- Obter o tamanho ocupado.
// Para exemplos completos e arquivos de dados, acesse https://github.com/aspose-email/Aspose.Email-for-Java
Pop3Client client = new Pop3Client();
// Especifique host, nome de usuário, senha, porta e opções de segurança para seu cliente
client.setHost("pop.gmail.com");
client.setUsername("your.username@gmail.com");
client.setPassword("your.password");
client.setPort(995);
client.setSecurityOptions(SecurityOptions.Auto);
// Obter o tamanho da caixa de correio, Obter informações da caixa de correio, número de mensagens na caixa de correio
long nSize = client.getMailboxSize();
System.out.println("O tamanho da caixa de correio é " + nSize + " bytes.");
Pop3MailboxInfo info = client.getMailboxInfo();
int nMessageCount = info.getMessageCount();
System.out.println("O número de mensagens na caixa de correio é " + nMessageCount);
long nOccupiedSize = info.getOccupiedSize();
System.out.println("O tamanho ocupado é " + nOccupiedSize);
Obtendo a Contagem de Emails na Caixa de Correio
O seguinte trecho de código mostra como contar as mensagens de email em uma caixa de correio.
// Para exemplos completos e arquivos de dados, acesse 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("Contagem de mensagens: " + i);
} catch (Pop3Exception ex) {
System.out.println("Erro:" + ex.toString());
}
Aspose.Email permite que os desenvolvedores trabalhem com emails de várias maneiras diferentes. Por exemplo, eles podem recuperar informações do cabeçalho antes de decidir se devem ou não baixar um email. Ou eles podem recuperar emails de um servidor e salvá-los sem analisá-los (mais rápido) ou após analisá-los (mais lento). Este artigo mostra como recuperar e converter emails.
Recuperando Informações dos Cabeçalhos de Email
Os cabeçalhos de email podem nos fornecer informações sobre uma mensagem de email que podemos usar para decidir se devemos ou não recuperar a mensagem de email completa. Normalmente, as informações do cabeçalho contêm remetente, assunto, data de recebimento, etc. (Os cabeçalhos de email são descritos em detalhes em Personalizando Cabeçalhos de Email. Esse assunto é especificamente sobre enviar um email com SMTP, mas as informações do conteúdo do cabeçalho de email permanecem válidas para emails POP3). Os seguintes exemplos mostram como recuperar cabeçalhos de email de um servidor POP3 pelo número de sequência da mensagem.
// Para exemplos completos e arquivos de dados, acesse https://github.com/aspose-email/Aspose.Email-for-Java
// Crie uma instância da classe Pop3Client
Pop3Client client = new Pop3Client();
// Especifique host, nome de usuário, senha, porta e opções de segurança para seu cliente
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++) {
// Exibir chave e valor na coleção de cabeçalho
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 Email
A classe Pop3Client proporciona a capacidade de recuperar mensagens de email do servidor POP3 e analisá-las em uma instância de MailMessage com a ajuda dos componentes MailMessage. A classe MailMessage contém várias propriedades e métodos para manipular o conteúdo do email. Usando o método fetchMessage da classe Pop3Client, você pode obter uma instância de MailMessage diretamente do servidor POP3. O seguinte trecho de código mostra como recuperar uma mensagem de email completa do servidor POP3.
// Para exemplos completos e arquivos de dados, acesse https://github.com/aspose-email/Aspose.Email-for-Java
// Crie uma instância da classe Pop3Client
Pop3Client client = new Pop3Client();
// Especifique host, nome de usuário, senha, porta e opções de segurança para seu cliente
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();
// Crie uma instância da classe MailMessage e recupere a mensagem
MailMessage message;
for (int i = 1; i <= messageCount; i++) {
message = client.fetchMessage(i);
System.out.println("De:" + message.getFrom());
System.out.println("Assunto:" + message.getSubject());
System.out.println(message.getHtmlBody());
}
} catch (Exception ex) {
System.out.println(ex.getMessage());
} finally {
client.dispose();
}
Recuperando Informações Resumidas de Mensagens 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 primeiro recuperar a mensagem completa do servidor. O seguinte trecho de código mostra como recuperar informações resumidas da mensagem.
// Para exemplos completos e arquivos de dados, acesse https://github.com/aspose-email/Aspose.Email-for-Java
String uniqueId = "id único de uma mensagem do servidor";
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 uma propriedade UseMultiConnection que pode ser usada para criar várias conexões para operações pesadas. Você também pode definir o número de conexões a serem usadas durante o modo de multiconexão usando Pop3Client.ConnectionsQuantity. O seguinte trecho de código demonstra o uso do modo de multiconexão para listar mensagens e compara seu desempenho com o modo de conexão única.
// Para exemplos completos e arquivos de dados, acesse https://github.com/aspose-email/Aspose.Email-for-Java
// Crie uma instância da classe Pop3Client
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("multiConnectionModeTimeSpan: " + multiConnectionModeTimeSpan);
System.out.println("singleConnectionModeTimeSpan: " + singleConnectionModeTimeSpan);
double performanceRelation = singleConnectionModeTimeSpan / multiConnectionModeTimeSpan;
System.out.println("Relação de Desempenho: " + performanceRelation);
Buscando Mensagens do Servidor e Salvando no Disco
Salvar Mensagem no Disco sem Análise
Se você deseja baixar mensagens de email do servidor POP3 sem analisá-las, use a função saveMessage da classe Pop3Client. A função saveMessage não analisa a mensagem de email, portanto, é mais rápida que a função fetchMessage. O seguinte trecho de código mostra como salvar uma mensagem pelo seu número de sequência, neste caso, o número 1. O método saveMessage salva a mensagem no formato EML original sem analisá-la.
// Para exemplos completos e arquivos de dados, acesse https://github.com/aspose-email/Aspose.Email-for-Java
// O caminho para o diretório de arquivos.
String dataDir = "pop3/";
String dstEmail = dataDir + "InsertHeaders.eml";
// Crie uma instância da classe Pop3Client
Pop3Client client = new Pop3Client();
// Especifique host, nome de usuário, senha, porta e opções de segurança para seu cliente
client.setHost("pop.gmail.com");
client.setUsername("your.username@gmail.com");
client.setPassword("your.password");
client.setPort(995);
client.setSecurityOptions(SecurityOptions.Auto);
try {
// Salvar mensagem no disco pelo número de sequência da mensagem
client.saveMessage(1, dstEmail);
client.dispose();
} catch (Exception ex) {
System.out.println(ex.getMessage());
}
System.out.println("Mensagens de email recuperadas usando POP3 ");
Analisar Mensagem Antes de Salvar
O seguinte trecho de código utiliza o método fetchMessage da classe Pop3Client para recuperar uma mensagem de um servidor POP3 pelo seu número de sequência e, em seguida, salvar a mensagem no disco utilizando o assunto como nome do arquivo.
// Para exemplos completos e arquivos de dados, acesse https://github.com/aspose-email/Aspose.Email-for-Java
// O caminho para o diretório de arquivos.
String dataDir = "pop3/";
// Crie uma instância da classe Pop3Client
Pop3Client client = new Pop3Client();
// Especifique host, nome de usuário, senha, porta e opções de segurança para seu cliente
client.setHost("pop.gmail.com");
client.setUsername("your.username@gmail.com");
client.setPassword("your.password");
client.setPort(995);
client.setSecurityOptions(SecurityOptions.Auto);
try {
// Buscar a mensagem pelo seu número de sequência e salvar a mensagem usando seu assunto como nome do arquivo
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();
}
Grupo de Mensagens
Pop3Client fornece um método fetchMessages que aceita um iterável de números de sequência ou ID únicos e retorna uma lista de MailMessage. O seguinte trecho de código demonstra o uso do método fetchMessages para buscar mensagens por números de sequência e ID únicos.
// Para exemplos completos e arquivos de dados, acesse https://github.com/aspose-email/Aspose.Email-for-Java
// Crie uma instância da classe Pop3Client
Pop3Client pop3Client = new Pop3Client();
pop3Client.setHost("<HOST>");
pop3Client.setPort(995);
pop3Client.setUsername("<USERNAME>");
pop3Client.setPassword("<PASSWORD>");
Pop3MessageInfoCollection messageInfoCol = pop3Client.listMessages();
System.out.println("Contagem do ListMessages: " + 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
A classe Pop3Client, descrita em Conectando a um Servidor POP3, fornece o método listMessages que obtém todas as mensagens de uma caixa de correio. Para obter apenas mensagens que correspondem a alguma condição, use o método sobrecarregado listMessages que aceita MailQuery como argumento. A classe MailQuery fornece várias propriedades para especificar as condições da consulta, como data, assunto, remetente, destinatário, etc. A classe MailQueryBuilder é utilizada para construir a expressão de pesquisa. Primeiro, todas as condições e restrições são definidas e depois MailQuery é preenchido com a consulta desenvolvida pelo MailQueryBuilder. O objeto da classe MailQuery é utilizado pelo Pop3Client para extrair as informações filtradas do servidor. Este artigo mostra como filtrar mensagens de email a partir de uma caixa de correio. O primeiro exemplo ilustra como filtrar mensagens com base em uma data e um assunto. Também mostramos como filtrar por outros critérios e como construir consultas mais complexas. Também demonstra a aplicação de filtro de Data e Hora para recuperar emails específicos da caixa de correio. Além disso, também mostra como aplicar filtragem que diferencia maiúsculas de minúsculas.
Filtrando Mensagens da Caixa de Correio
Para filtrar mensagens de uma caixa de correio:
- Conecte-se e faça login em um servidor POP3.
- Crie uma instância de MailQuery e defina as propriedades desejadas.
- Chame o método Pop3Client.listMessages(MailQuery query) e passe o MailQuery como parâmetro para obter apenas as mensagens filtradas.
O seguinte trecho de código mostra como conectar a uma caixa de correio POP3 e obter mensagens que chegaram hoje e possuem a palavra “newsletter” no assunto.
// Para exemplos completos e arquivos de dados, acesse https://github.com/aspose-email/Aspose.Email-for-Java
// Conecte-se e faça login no POP3
String host = "host";
int port = 110;
String username = "user@host.com";
String password = "password";
Pop3Client client = new Pop3Client(host, port, username, password);
// Defina condições, Assunto contém "Newsletter", Emails que chegaram hoje
MailQueryBuilder builder = new MailQueryBuilder();
builder.getSubject().contains("Newsletter");
builder.getInternalDate().on(new Date());
// Construa a consulta e obtenha a lista de mensagens
MailQuery query = builder.getQuery();
Pop3MessageInfoCollection messages = client.listMessages(query);
System.out.println("Pop3: " + messages.size() + " mensagem(s) encontrada(s).");
Obtendo Mensagens que Atendam a Critérios Específicos
Os exemplos de código acima filtram mensagens com base no assunto do email e na data. Podemos usar outras propriedades para definir outras condições suportadas também. Abaixo estão alguns exemplos de como definir as condições usando MailQuery.
Os trechos de código que seguem mostram como filtrar emails por outros critérios:
- Encontrar emails entregues hoje.
- Encontrar emails recebidos dentro de um intervalo.
- Encontrar emails de um remetente específico.
- Encontrar emails enviados de um domínio específico.
- Encontrar emails enviados para um destinatário específico.
Data de Hoje
O seguinte trecho de código mostra como encontrar emails entregues hoje.
// Para exemplos completos e arquivos de dados, acesse https://github.com/aspose-email/Aspose.Email-for-Java
// Emails que chegaram hoje
MailQueryBuilder builder = new MailQueryBuilder();
builder.getInternalDate().on(new Date());
Intervalo de Datas
O seguinte trecho de código mostra como encontrar emails recebidos dentro de um intervalo.
// Para exemplos completos e arquivos de dados, acesse https://github.com/aspose-email/Aspose.Email-for-Java
// Emails que chegaram nos últimos 7 dias
Calendar calendar = Calendar.getInstance();
builder.getInternalDate().before(calendar.getTime());
calendar.add(Calendar.DATE, -7);
builder.getInternalDate().since(calendar.getTime());
Remetente Específico
O seguinte trecho de código mostra como encontrar emails de um remetente específico.
// Para exemplos completos e arquivos de dados, acesse https://github.com/aspose-email/Aspose.Email-for-Java
// Obter emails de remetente específico
builder.getFrom().contains("saqib.razzaq@127.0.0.1");
Domínio Específico
O seguinte trecho de código mostra como encontrar emails enviados de um domínio específico.
// Para exemplos completos e arquivos de dados, acesse https://github.com/aspose-email/Aspose.Email-for-Java
// Obter emails de domínio específico
builder.getFrom().contains("SpecificHost.com");
Destinatário Específico
O seguinte trecho de código mostra como encontrar emails enviados para um destinatário específico.
// Para exemplos completos e arquivos de dados, acesse https://github.com/aspose-email/Aspose.Email-for-Java
// Obter emails enviados para destinatário específico
builder.getTo().contains("recipient");
Construindo Consultas Complexas
Se diferentes propriedades do MailQueryBuilder forem definidas em declarações separadas, todas as condições serão correspondidas. 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 seguinte trecho de código mostra como combinar consultas com AND.
// Para exemplos completos e arquivos de dados, acesse https://github.com/aspose-email/Aspose.Email-for-Java
// Emails de host específico, obter todos os emails que chegaram antes de hoje e todos os emails que chegaram desde 7 dias atrás
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 método or que aceita duas instâncias de MailQuery como parâmetros. Ele obtém as mensagens que correspondem a qualquer uma das duas condições especificadas. O seguinte trecho de código mostra como filtrar mensagens que têm “teste” no assunto ou “noreply@host.com” como remetente. O seguinte trecho de código mostra como combinar consultas com OR.
// Para exemplos completos e arquivos de dados, acesse https://github.com/aspose-email/Aspose.Email-for-Java
// Especifique condição OR
builder.or(builder.getSubject().contains("test"), builder.getFrom().contains("noreply@host.com"));
Aplicando Filtros que Diferenciam Maiúsculas de Minúsculas
A API também fornece a capacidade de filtrar emails da caixa de correio com base em um critério sensível a maiúsculas e minúsculas. Os seguintes métodos fornecem a capacidade de pesquisar emails especificando o sinalizador de sensibilidade a maiúsculas e 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)
// Para exemplos completos e arquivos de dados, acesse https://github.com/aspose-email/Aspose.Email-for-Java
// IgnoreCase é True
MailQueryBuilder builder1 = new MailQueryBuilder();
builder1.getFrom().contains("tesT", true);
MailQuery query1 = builder1.getQuery();
Pop3MessageInfoCollection messageInfoCol1 = client.listMessages(query1);