Verificar emails com Phyton3.
import os
import csv
from verify_email import verify_email
# Pede o nome do arquivo CSV ou o caminho da pasta contendo os arquivos
caminho = input("Digite o caminho do arquivo CSV ou da pasta contendo os arquivos: ")
# Verifica se o caminho é um arquivo ou uma pasta
if os.path.isfile(caminho):
arquivos = [caminho]
elif os.path.isdir(caminho):
arquivos = [os.path.join(caminho, arquivo) for arquivo in os.listdir(caminho) if arquivo.endswith('.csv')]
else:
print("Caminho inválido.")
exit()
# Cria um arquivo para armazenar os e-mails válidos
with open('emails_validos.txt', 'w') as arquivo_saida:
for arquivo in arquivos:
# Abre o arquivo CSV contendo os e-mails
with open(arquivo, 'r') as arquivo_csv:
leitor_csv = csv.reader(arquivo_csv)
# Ler cada linha do arquivo CSV e verificar o e-mail
for linha in leitor_csv:
email = linha[0]
resultado = verify_email(email)
# Exibir o resultado da verificação e gravar no arquivo de saída
if resultado:
print(email, "é um e-mail válido.")
arquivo_saida.write(email + '\n')
else:
print(email, "é um e-mail inválido.")
# Exibe uma mensagem informando que o processo foi concluído
print("Verificação concluída.")
Aqui está o que cada parte do código faz:
import os- Importa o móduloospara trabalhar com caminhos de arquivos e pastas.caminho = input("Digite o caminho do arquivo CSV ou da pasta contendo os arquivos: ")- Pede ao usuário para digitar o caminho do arquivo CSV ou da pasta contendo os arquivos.if os.path.isfile(caminho):- Verifica se o caminho digitado é um arquivo.arquivos = [caminho]- Se for um arquivo, adiciona o caminho à listaarquivos.elif os.path.isdir(caminho):- Verifica se o caminho digitado é uma pasta.arquivos = [os.path.join(caminho, arquivo) for arquivo in os.listdir(caminho) if arquivo.endswith('.csv')]- Se for uma pasta, adiciona todos os arquivos com extensão.csvà listaarquivos.else:- Se o caminho digitado não for um arquivo ou uma pasta, exibe uma mensagem de erro e encerra o programa.with open('emails_validos.txt', 'w') as arquivo_saida:- Cria um arquivo para armazenar os e-mails válidos e o abre para escrita.arquivo_saida.write(email + '\n')- Grava o e-mail válido no arquivo de saída, seguido por uma nova linha.print("Verificação concluída.")- Exibe uma mensagem informando que o processo foi concluído.
Quanto à velocidade da verificação, a biblioteca verify_email faz uma verificação em tempo real, o que pode levar algum tempo para verificar grandes listas de e-mails.
import csv
import re
import dns.resolver
def validate_email(email):
# Verifica se o email está em um formato válido
pattern = re.compile(r"[^@]+@[^@]+\.[^@]+")
if not pattern.match(email):
return False
# Obtém o domínio do email
domain = email.split('@')[1]
# Verifica se o domínio tem um registro MX
try:
dns.resolver.query(domain, 'MX')
except dns.resolver.NoAnswer:
return False
return True
# Abrir o arquivo CSV contendo os e-mails
with open('lista_de_emails.csv', 'r') as arquivo_csv:
leitor_csv = csv.reader(arquivo_csv)
# Ler cada linha do arquivo CSV e verificar o e-mail
for linha in leitor_csv:
email = linha[0]
resultado = validate_email(email)
# Exibir o resultado da verificação
if resultado:
print(email, "é um e-mail válido.")
else:
print(email, "é um e-mail inválido.")
Neste exemplo, a função validate_email é utilizada para
verificar cada e-mail da lista lida do arquivo CSV. O resultado da
verificação é então impresso no console. Você pode modificar o código
para imprimir os e-mails válidos em um arquivo, como você mencionou
anteriormente.
import os
import re
import csv
import socket
def is_valid_email(email):
"""Verifica se um e-mail é válido usando regex e DNS lookup"""
# Validar sintaxe do email usando regex
regex = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$'
if not re.match(regex, email):
return False
# Verificar se o domínio existe
try:
domain = email.split('@')[1]
socket.gethostbyname(domain)
except:
return False
return True
# Perguntar o nome do arquivo de entrada
while True:
input_file = input("Digite o nome do arquivo contendo a lista de e-mails: ")
if not os.path.isfile(input_file):
print("Arquivo não encontrado. Tente novamente.")
else:
break
# Perguntar o nome do arquivo de saída
output_file = os.path.splitext(input_file)[0] + ".validos.csv"
# Abrir o arquivo CSV contendo os e-mails
with open(input_file, 'r') as arquivo_csv, open(output_file, 'w', newline='') as output_csv:
leitor_csv = csv.reader(arquivo_csv)
escritor_csv = csv.writer(output_csv)
# Ler cada linha do arquivo CSV e verificar o e-mail
for linha in leitor_csv:
email = linha[0]
resultado = is_valid_email(email)
# Escrever o email válido no arquivo de saída
if resultado:
escritor_csv.writerow([email])
print(email, "é um e-mail válido.")
print("Verificação de e-mails concluída. E-mails válidos foram salvos em", output_file) Nessa nova versão, o usuário é perguntado pelo nome do arquivo de entrada contendo a lista de e-mails. Depois, o programa assume que o arquivo de saída terá o mesmo nome, mas com ".validos.csv" adicionado ao final.
O arquivo de saída é criado e aberto em modo de escrita. Cada e-mail válido encontrado é adicionado ao arquivo de saída usando o writerow do módulo csv.
Ao final da execução, o programa exibe uma mensagem informando o nome do arquivo de saída onde os e-mails válidos foram salvos.
"capaz de verificar a sintaxe dos endereços de e-mail e fazer uma
verificação básica de conectividade para determinar se o servidor de
e-mail está disponível"
Busca emails dentro dos arquivos.
import csv
import os
def verificar_email_em_arquivos(pasta):
arquivos_csv = [arquivo for arquivo in os.listdir(pasta) if arquivo.endswith('.csv')]
email_procurado = input("Digite o e-mail que deseja procurar: ")
encontrado = False
for arquivo in arquivos_csv:
caminho_arquivo = os.path.join(pasta, arquivo)
with open(caminho_arquivo, 'r') as arquivo_csv:
leitor_csv = csv.reader(arquivo_csv)
for linha in leitor_csv:
if email_procurado in linha:
print(f"O e-mail {email_procurado} foi encontrado no arquivo {arquivo}.")
encontrado = True
break
if not encontrado:
print(f"O e-mail {email_procurado} não foi encontrado em nenhum arquivo CSV na pasta {pasta}.")
# Exemplo de uso
pasta_dos_arquivos = '.'
verificar_email_em_arquivos(pasta_dos_arquivos)
Nenhum comentário:
Postar um comentário