Buscar e Filtrar Emails IMAP em Python
Para recuperar todas as mensagens de uma caixa de correio, Aspose.Email fornece o método ’list_messages’ do ImapClient classe. Para buscar apenas as mensagens que atendam a condições específicas, você pode usar o método sobrecarregado ’list_messages’ que aceita um MailQuery como argumento. O MailQuery classe oferece várias propriedades para definir essas condições, como data, assunto, remetente e destinatário.
O primeiro exemplo de código demonstra como filtrar mensagens com base tanto na data quanto no assunto. Exemplos adicionais mostram filtragem por outros critérios e a construção de consultas mais complexas. Além disso, a API suporta critérios de busca sensíveis a maiúsculas/minúsculas para filtragem precisa e permite especificar a codificação da string de busca ao filtrar mensagens da caixa de correio.
Filtrar e Buscar Mensagens do Servidor IMAP
Criar uma Consulta IMAP Simples
Use o trecho de código a seguir para conectar a uma caixa de correio IMAP e obter mensagens que chegaram hoje e têm a palavra "newsletter" no assunto.
- Conecte ao servidor IMAP usando a porta 993 com o nome de usuário e senha.
- Selecione a pasta "Inbox" para trabalhar com emails recebidos.
- Crie uma instância de ImapQueryBuilder para construir uma consulta de busca.
- Especifique critérios de busca, por exemplo, que o assunto dos emails contenha "Newsletter" e que a data interna corresponda à data de hoje.
- Gere a consulta de busca recuperando‑a do construtor.
- Use a consulta para listar mensagens que atendem aos critérios.
- Imprima o número total de mensagens que correspondem aos critérios de busca.
Criar critérios de pesquisa complexos
Aspose.Email também permite criar critérios de pesquisa complexos para consultar e filtrar mensagens de e‑mail, como data de entrega, dentro de um intervalo, remetente específico, domínio específico ou destinatário específico. Para isso, use a MailQueryBuilder classe e suas propriedades. Os exemplos de código abaixo mostrarão como buscar mensagens por critérios específicos.
Filtrar e-mails pela data de hoje
Para buscar mensagens por data de entrega, use a propriedade ‘internal_date’ da MailQueryBuilder classe conforme 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())
Filtrar Emails por 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))
Filtrar e-mails por remetente específico
Para buscar mensagens de um remetente específico, use a propriedade ‘from_address’ do MailQueryBuilder classe conforme 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")
Filtrar Emails por 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")
Filtrar Emails por 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")
Filtrar Mensagens por Data Interna
Construa uma consulta com as condições especificadas, como "internal date" e "subject contains". "internal date" refere‑se à data e hora em que uma mensagem de email foi recebida ou adicionada ao servidor de email e pode ser definida usando a propriedade ‘internal_date’ do ImapQueryBuilder classe. O exemplo de código abaixo demonstra como buscar emails específicos da caixa de entrada com base em critérios de assunto e data:
import aspose.email as ae
from datetime import datetime
client = ae.clients.imap.ImapClient("imap.domain.com", 993, "user@domain.com", "pwd")
client.select_folder("Inbox")
# Set conditions, Subject contains "Newsletter", Emails that arrived today
builder = ae.clients.imap.ImapQueryBuilder()
builder.subject.contains("Newsletter")
builder.internal_date.on(datetime.now())
# Build the query and Get list of messages
query = builder.get_query()
messages = client.list_messages(query)
for info in messages:
print(f"Internal Date: {info.internal_date}")
Filtrar Mensagens por Flags de Palavras‑Chave Personalizadas
Crie uma consulta para pesquisar uma caixa de correio IMAP por emails contendo flags de palavras‑chave personalizadas, especificamente "custom1" e "custom2". Para construir uma consulta, use o ImapQueryBuilder classe que filtra emails ao recuperá‑los de um servidor IMAP.
Para começar, crie uma instância do construtor de consultas. Usando o has_flags método, adicione condições para incluir apenas os emails que possuem as flags de palavra‑chave IMAP especificadas. Palavras‑chave personalizadas no IMAP, também chamadas de flags definidas pelo usuário, permitem que os usuários marquem ou categorizem emails para vários propósitos, como marcar seu status.
O trecho de código a seguir ilustra como criar uma consulta para recuperar emails com base em flags de palavras‑chave personalizadas:
builder = ae.clients.imap.ImapQueryBuilder()
builder.has_flags(ae.clients.imap.ImapMessageFlags.keyword("custom1"))
builder.has_flags(ae.clients.imap.ImapMessageFlags.keyword("custom2"))
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.
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.
- StringComparisonField.contains(value, ignore_case)
- StringComparisonField.equals(value, ignore_case)
- StringComparisonField.not_contains(value, ignore_case)
- StringComparisonField.not_equals(value, ignore_case)
O trecho de código a seguir mostra como implementar esse recurso em seu projeto:
builder = ae.tools.search.MailQueryBuilder()
builder.from_address.contains("noreply@host.com", True)
Executar Consultas de Busca Personalizadas
Crie uma consulta de busca para uma caixa de correio IMAP que filtre emails com base em um critério de busca do Gmail personalizado — especificamente, emails que têm anexos.
Comece criando uma instância de ImapQueryBuilder, que ajuda a construir consultas de busca IMAP complexas. Use o custom_search método para adicionar uma string de busca específica do Gmail ao construtor de consultas.
A string de busca X-GM-RAW "has:attachment" utiliza o atributo IMAP estendido do Gmail X-GM-RAW, permitindo o uso da poderosa sintaxe de busca webmail do Gmail em consultas IMAP. Aqui, o operador has:attachment retorna todos os emails que contêm anexos.
O trecho de código a seguir demonstra como filtrar emails para obter todas as mensagens com anexos:
builder = ae.clients.imap.ImapQueryBuilder()
builder.custom_search("X-GM-RAW \"has:attachment\"")
mailQuery = builder.get_query()
Este método permite filtragem avançada específica do Gmail para obter emails direcionados.