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 os métodos GetMailBoxSize() e GetMailBoxInfo().
- 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 usando a propriedade MessageCount e o tamanho usando a propriedade OccupiedSize. O código de exemplo a seguir mostra como obter informações sobre a caixa de correio. Ele mostra como:
- Crie 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.
Obtendo a contagem de emails na caixa de correio
O trecho de código a seguir mostra como contar as mensagens de e‑mail em uma caixa de correio.
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 email podem nos fornecer informações sobre uma mensagem de email que podemos usar para decidir se devemos ou não recuperar a mensagem completa. Tipicamente, as informações de cabeçalho contêm remetente, assunto, data de recebimento etc. (Os cabeçalhos de email são descritos em detalhes em Customizando Cabeçalhos de Email. Esse tópico trata especificamente do envio de email via SMTP, mas as informações de cabeçalho permanecem válidas para emails POP3). Os exemplos a seguir mostram como recuperar cabeçalhos de email de um servidor POP3 usando o número de sequência da mensagem.
Recuperando Mensagens de E‑mail
O componente de classe Aspose.Email.Pop3 fornece 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. Ao usar a função FetchMessage da classe Pop3Client, você pode obter uma instância de MailMessage diretamente do servidor POP3. O trecho de código a seguir mostra como recuperar uma mensagem de email completa do servidor POP3.
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 exclusivo da mensagem. Isso fornece acesso rápido às informações resumidas da mensagem sem precisar primeiro recuperar a mensagem completa do servidor. O trecho de código a seguir mostra como recuperar informações resumidas da mensagem.
Listando Mensagens com MultiConnection
Para operações de alta carga, Aspose.Email oferece a propriedade ‘use_multi_connection’ do Pop3Client classe para usar múltiplas conexões ao recuperar emails. Contudo, usar esse modo não necessariamente leva ao aumento de desempenho. O trecho de código a seguir mostra como estabelecer uma conexão a um servidor POP3, configurar o cliente para permitir até 5 conexões simultâneas e habilitar o modo de múltiplas conexões para recuperar informações sobre as mensagens presentes no servidor:
import aspose.email as ae
client = ae.clients.pop3.Pop3Client("host", 995, "username", "password", ae.clients.SecurityOptions.AUTO)
client.connections_quantity = 5
client.use_multi_connection = ae.clients.MultiConnectionMode.ENABLE
message_info_coll = client.list_messages()
Obtendo Mensagens do Servidor e salvando no Disco
Salvar Mensagem no Disco sem Analisar
Se você quiser 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 trecho de código a seguir 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.
Analisar Mensagem Antes de Salvar
Use o método ‘fetch_message’ do objeto cliente criado usando Pop3Client classe para recuperar a mensagem com um número de sequência específico. O exemplo de código abaixo demonstra como recuperar uma mensagem específica e salvá‑la usando seu assunto como nome de arquivo, chamando o método ‘save’ no objeto msg:
import aspose.email as ae
client = ae.clients.pop3.Pop3Client("host", 995, "username", "password", ae.clients.SecurityOptions.AUTO)
# Fetch the message by its sequence number and Save the message using its subject as the file name
msg = client.fetch_message(1)
msg.save("first-message_out.eml", ae.SaveOptions.default_eml)
Filtrando Mensagens por Remetente, Destinatário ou Data
A classe Pop3Client, descrita em Conectando a um Servidor POP3, fornece o método list_messages() que obtém todas as mensagens de uma caixa de correio. Para obter apenas mensagens que correspondam a alguma condição, use o método sobrecarregado ListMessages() que aceita um MailQuery como argumento. A classe MailQuery oferece várias propriedades para especificar as condições da consulta, por exemplo, data, assunto, remetente, destinatário etc. A classe MailQueryBuilder é usada para construir a expressão de pesquisa. Primeiro, todas as condições e restrições são definidas e, em seguida, o MailQuery é preenchido com a consulta desenvolvida pelo MailQueryBuilder. O objeto da classe MailQuery é usado pelo Pop3Client para extrair as informações filtradas do servidor. Este artigo mostra como filtrar mensagens de email 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 também demonstra a aplicação do filtro de Data e Hora para recuperar emails específicos da caixa de correio. Além disso, mostra como aplicar filtragem sensível a maiúsculas e 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.list_messages(MailQuery query) e passe 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 que contêm a palavra "newsletter" no assunto.
Obtendo Mensagens que Atendem a Critérios Específicos
Aspose.Email também possibilita criar critérios de busca complexos para consultar e filtrar mensagens de email. Para isso, use o MailQueryBuilder classe e suas propriedades. Os critérios de busca são os seguintes:
- Buscar mensagens por data de entrega.
- Buscar mensagens dentro de um intervalo.
- Buscar mensagens de um remetente específico.
- Buscar mensagens de um domínio específico.
- Buscar mensagens para um destinatário específico.
Data de hoje
Para buscar mensagens por data de entrega, use a propriedade ‘internal_date’ como mostrado no exemplo de código abaixo:
import aspose.email as ae
from datetime import datetime
builder = ae.tools.search.MailQueryBuilder()
builder.internal_date.on(datetime.now())
Intervalo de datas
Para buscar mensagens dentro de um intervalo de datas, use a mesma propriedade ‘internal_date’ especificando o intervalo de datas como mostrado no exemplo de código abaixo:
import aspose.email as ae
from datetime import datetime, timedelta
builder = ae.tools.search.MailQueryBuilder()
# Emails that arrived in last 7 days
builder.internal_date.before(datetime.now())
builder.internal_date.since(datetime.today() - timedelta(days=7))
Remetente Específico
Para buscar mensagens de um remetente específico, use a propriedade ‘from_address’ como mostrado no exemplo de código abaixo:
import aspose.email as ae
builder = ae.tools.search.MailQueryBuilder()
builder.from_address.contains("saqib.razzaq@127.0.0.1")
Domínio específico
Para buscar mensagens de um domínio específico, use a propriedade ‘from_address’ como mostrado no exemplo de código abaixo:
import aspose.email as ae
builder = ae.tools.search.MailQueryBuilder()
builder.from_address.contains("SpecificHost.com")
Destinatário específico
Para buscar mensagens para um destinatário específico, use a propriedade ’to’ como mostrado no exemplo de código abaixo:
import aspose.email as ae
builder = ae.tools.search.MailQueryBuilder()
builder.to.contains("recipient")
Construindo consultas complexas
Às vezes é necessário atender a mais de uma consulta. Aspose.Email possibilita isso combinando consultas em várias instruções. Crie um MailQueryBuilder objeto e usar suas propriedades para construir consultas específicas.
Combinando consultas com AND
O trecho de código a seguir mostra como combinar consultas com AND.
import aspose.email as ae
from datetime import datetime, timedelta
builder = ae.tools.search.MailQueryBuilder()
builder.internal_date.before(datetime.now())
builder.internal_date.since(datetime.today() - timedelta(days=7))
builder.from_address.contains("SpecificHost.com")
Combinando consultas com OR
O trecho de código a seguir mostra como combinar consultas com OR.
import aspose.email as ae
builder = ae.tools.search.MailQueryBuilder()
builder.either(builder.subject.contains("test"), builder.from_address.contains("noreply@host.com"))
Aplicando Filtros Sensíveis a Maiúsculas/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 da StringComparisonField classe fornece a capacidade de pesquisar emails especificando flags sensíveis a maiúsculas e minúsculas.
Método Aspose.Email.StringComparisonField.contains(value, ignore_case) Método Aspose.Email.StringComparisonField.equals(value, ignore_case) Método Aspose.Email.StringComparisonField.not_contains(value, ignore_case) Método Aspose.Email.StringComparisonField.not_equals(value, ignore_case)
O trecho de código a seguir mostra como implementar esse recurso em seu projeto:
import aspose.email as ae
builder = ae.tools.search.MailQueryBuilder()
builder.from_address.contains("noreply@host.com", True)