Risolto Verifica forma, dominio e utente di una email, bloccato nel creare un loop.

mrcamarium

Utente Silver
7 Gennaio 2022
107
24
6
56
Ultima modifica:
Allo script che già ho realizzato ho aggiunto anche la possibilità di verificare la forma, il dominio e utente di una email, ma mi sono bloccato nel creare un loop.
Python:
"""
Con il comando VRFY e EXPN è possibile la verifica di indirizzi email residenti sul server di posta.
Dal momento che viene spesso usato per scopi di intrusione e spam, molte società lo disabilitano di
default.
"""
# Importo le librerie
import smtplib, colorama, time, re
from email_validator import validate_email
from colorama import Fore #BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE
from colorama import Style #DIM, NORMAL, BRIGHT, RESET_ALL
# Variabili
verde = Fore.GREEN
reset = Style.RESET_ALL
blu = Fore.BLUE
rosso = Fore.LIGHTRED_EX #Colora Rosso e rende il testo brillante
opaco = Style.DIM
brillante = Style.BRIGHT
giallo = Fore.YELLOW
#Info
print(blu + brillante + "Version 0.4.3" + reset)
print(blu + opaco + "Codice by - Mr. Camarium")
print(blu + "Youtube - mrcamarium" + reset)
time.sleep(1) #Pausa
def verifica_sintassi(email): #Definisco una funzione che controlla la sintassi di un indirizzo email
  regex = "^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$" #Uso una regex per verificare che l'email abbia il formato corretto
  return bool(re.match(regex, email)) #Restituisco True se l'email è valida, False altrimenti
def verifica_dominio(email): #Definisco una funzione che controlla l'esistenza del dominio di un indirizzo email
        try:
         return validate_email(email)
        except:
         return False #Se lo stato è diverso, restituisco False
def verifica_esistenza(email): #Definisco una funzione che controlla l'esistenza di un indirizzo email
  nome, dominio = email.split("@") #Divido l'email in nome utente e dominio
  smtp = smtplib.SMTP() #Creo un oggetto SMTP per connettermi al server del dominio
  try:
    smtp.connect("mail." + dominio) #Provo a connettermi al server e a inviare un comando HELO
    smtp.helo()
    codice, messaggio = smtp.vrfy(nome) #Provo a inviare un comando VRFY con il nome utente
    smtp.quit() #Chiudo la connessione
    return codice == 250 #Restituisco True se il codice è 250 (OK)
  except:
    return False #Se il codice è diverso, restituisco False
email = input("Inserisci l'indirizzo email da verificare: ") #Chiedo all'utente di inserire un indirizzo email da verificare
print("Controllo in corso...")
if verifica_sintassi(email): #Controllo la sintassi dell'email
  print(verde + "L'email ha una sintassi valida.")
  if verifica_dominio(email): #Controllo il dominio dell'email
   print(verde + 'Dominio Valido' + reset)
   if verifica_esistenza(email): #Controllo l'esistenza dell'email
    print(verde + "L'email esiste ed è funzionante." + reset)
   else:
    print(rosso + "L'email non esiste o non è funzionante. " + giallo + "(PS alcuni provider disabilitano VRFY e EXPN)" + reset)
  else:
   print(rosso + "Dominio Inesistente" + reset)
else:
  print(rosso + "L'email ha una sintassi non valida." + reset)
ho provato a usare il metodo che mi è stato consigliato ma dovunque metto questo codice non ottengo risultati
Python:
scelta = input("Vuoi verificare un altro indirizzo? Scegliere y/n > ")
        if (scelta == 'n'):
            print("Uscita in corso...")
            # Pausa
            time.sleep(1)
            break
alla fine esce sempre dal programma. Ovviamente ho usato
while True:
ma restituisce errori nel codice.
Messaggio unito automaticamente:

Python:
def main(): #Definisco una funzione che controlla l'esistenza di un indirizzo email
 while True:
  email = input("Inserisci l'indirizzo email da verificare: ") #Chiedo all'utente di inserire un indirizzo email da verificare
  print("Controllo in corso...")
  if verifica_sintassi(email): #Controllo la sintassi dell'email
   print(verde + "L'email ha una sintassi valida.")
  if verifica_dominio(email): #Controllo il dominio dell'email
   print(verde + 'Dominio Valido' + reset)
   if verifica_esistenza(email): #Controllo l'esistenza dell'email
    print(verde + "L'email esiste ed è funzionante." + reset)
   else:
    print(rosso + "L'email non esiste o non è funzionante. " + giallo + "(PS alcuni provider disabilitano VRFY e EXPN)" + reset)
  else:
   print(rosso + "Dominio Inesistente" + reset)
 else:
print(rosso + "L'email ha una sintassi non valida." + reset)
scelta = input("Vuoi verificare un altro indirizzo? Scegliere y/n > ")
if (scelta == 'n'):
            print("Uscita in corso...")
            # Pausa
            time.sleep(1)
break
main() #main
anche cosi non va bene
 
Ultima modifica:
Lavorando sui rientri sono riuscito a risolvere il problema del break
Python:
def main(): #Definisco una funzione main per il loop
 while True:
   email = input("Inserisci l'indirizzo email da verificare: ") #Chiedo all'utente di inserire un indirizzo email da verificare
   print("Controllo in corso...")
   if verifica_sintassi(email): #Controllo la sintassi dell'email
    print(verde + "L'email ha una sintassi valida.")
    if verifica_dominio(email): #Controllo il dominio dell'email
     print(verde + 'Dominio Valido' + reset)
     if verifica_esistenza(email): #Controllo l'esistenza dell'email
      print(verde + "L'email esiste ed è funzionante." + reset)
     else:
      print(rosso + "L'email non esiste o non è funzionante. " + giallo + "(PS alcuni provider disabilitano VRFY e EXPN)" + reset)
    else:
     print(rosso + "Dominio Inesistente" + reset)
   else:
    print(rosso + "L'email ha una sintassi non valida." + reset)
   scelta = input("Vuoi verificare un altro indirizzo? Scegliere y/n > ")
   if (scelta == 'n'):
            print("Uscita in corso...")
            # Pausa
            time.sleep(1)
   break
main() #main
adesso non riseco a capire dove inserire input("Vuoi verificare un altro indirizzo? Scegliere y/n > ")
Messaggio unito automaticamente:

Risolto, il problema erano i rientri.