Usando atributos e filtros de e-mail¶
Conforme mostrado anteriormente na seção buscando algumas mensagens de email, podemos usar atributos diferentes em um filtro ao recuperar alguns e-mails.
O método search¶
Uma maneira de procurar emails usando filtros é através do método search
, neste caso deve-se passar uma string completa referente ao critério a ser usado. Dessa forma, torna-se responsabilidade do usuário usar os atributos e a sintaxe corretamente.
Busca Avançada¶
Temos a possibilidade de criar buscas avançadas manualmente usando um único atributo ou combinando diferentes atributos.
Usando um único atributo¶
Basicamente, a estrutura da string de critérios é composta pelo nome do atributo em letras maiúsculas seguidas pelo valor do atributo entre aspas. Você também pode usar a string entre ()
para torná-la mais organizada.
Em geral, para cada atributo, a estrutura usada será algo assim: '(NOME_ATRIBUTO "valor_do_seu_atributo")'.
# Cria busca considerando apenas o assunto do e-mail
busca_assunto = '(SUBJECT "Mensagem de teste")'
# Procura todos os e-mails que têm "mensagem de teste" como assunto
busca_mensagens_1 = email.search(busca_assunto)
# Cria busca considerando apenas o endereço que enviou o e-mail
busca_from = '(FROM "test@email.com")'
# Procura todos os e-mails enviados a partir do endereço "test@email.com"
busca_mensagens_2 = email.search(busca_from)
Usando vários atributos¶
Além de usar atributos individualmente, também é possível combinar vários atributos na mesma sequência de critérios.
Basicamente, isso seria equivalente a uma operação AND. Somente mensagens que correspondem a todos os critérios serão retornadas.
Também é possível fazer operações OR, para buscar mensagens por um atributo ou outro. Nesse caso, basta inserir OR
no início da string e manter os critérios da mesma maneira.
Tabela de atributos do metodo search¶
Veja na tabela atributos mais comuns utilizados no metodo search
para criar strings de busca:
Atributo | Descrição | Tipo de valor |
---|---|---|
SEEN/UNSEEN |
com/sem a flag Visto | str |
FROM |
endereço do remetente do e-mail | str |
TO |
destinatário do endereço como TO | str |
CC |
destinatário de endereço como CC | str |
BCC |
destinatário do endereço como BCC | str |
SUBJECT |
o assunto do e-mail | str |
BODY |
contém o texto no corpo do e-mail | str |
ON |
a data do e-mail está dentro da data especificada | str |
SINCE |
a data do e-mail está dentro ou depois da data especificada | str |
BEFORE |
a data do e-mail é anterior à data especificada | str |
Dica
Veja mais detalhes sobre os atributos que podem ser usados neste link. Lembrando que no método search
, todos atributos são do tipo str
.
O método filter_by¶
Em alguns casos, o caminho acima pode ficar um pouco confuso ou gerar dúvidas ao construir a string do filtro. Portanto, é possível usar o método filter_by
como um "atalho" para fazer os filtros.
from botcity.plugins.email import MailFilters
from datetime import datetime
# Você pode visualizar e selecionar um atributo usando: Mailfilters.<ATTRIBUTE_NAME>
# Procura todos os e-mails enviados pelo endereço: joao@email.com
mensagens = email.filter_by(MailFilters.FROM, "joao@email.com")
# Procura todos os e-mails que ainda não foram lidos
mensagens = email.filter_by(MailFilters.SEEN, False)
# Procura todos os e-mails recebidos na data: 15/02/2022
mensagens = email.filter_by(MailFilters.ON_DATE, datetime(2022, 2, 15).date())
Nesse caso, não é necessário se preocupar com a sintaxe da sequência do filtro, basta passar o atributo desejado no filtro e o valor que esse atributo deve ter.
Tabela de atributos do metodo filter_by¶
Os atributos que podem ser usados são definidos na classe MailFilters
como uma enumeração, a tabela a seguir mostra os atributos definidos e que tipos de valores eles podem receber:
Atributo | Descrição | Tipo de valor |
---|---|---|
SEEN |
com/sem a flag Visto | bool |
FROM |
endereço do remetente do e-mail | str |
TO |
destinatário do endereço como TO | str |
CC |
destinatário de endereço como CC | str |
BCC |
destinatário do endereço como BCC | str |
SUBJECT |
o assunto do e-mail | str |
TEXT_CONTENT |
contém o texto no corpo do e-mail | str |
ON_DATE |
a data do e-mail está dentro da data especificada | date |
DATE_GREATER_THAN |
a data do e-mail está dentro ou depois da data especificada | date |
DATE_LESS_THAN |
a data do e-mail é anterior à data especificada | date |