Sono rimasto bloccato per un loop

di il
9 risposte

Sono rimasto bloccato per un loop

Ho completato questo script, funziona ma devo creare un loop, ho provato in diversi modi ma non riesco a trovare una soluzione.

"""
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 1.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)  

9 Risposte

  • Re: Sono rimasto bloccato per un loop

    Devi fare un loop per cosa?

    Non ti pare un po' generico indicare che devi fare un loop?

  • Re: Sono rimasto bloccato per un loop

    Scusa hai ragione, do per scontato che gli altri stanno nella mi mente (DSA) piazzando il codice:

    scelta = input("Vuoi verificare un altro indirizzo? Scegliere y/n > ")
            if (scelta == 'n'):
                print("Uscita in corso...")

    vorrei ottenere la possibilità di uscire o rifar partire lo script, ma ho provato in diversi modi ma non riesco a trovare una soluzione.

  • Re: Sono rimasto bloccato per un loop

    Ciclo while

    https://www.ionos.it/digitalguide/siti-web/programmazione-del-sito-web/ciclo-while-in-python/

  • Re: Sono rimasto bloccato per un loop

    24/10/2023 - oregon ha scritto:


    Ciclo while

    https://www.ionos.it/digitalguide/siti-web/programmazione-del-sito-web/ciclo-while-in-python/

    il ciclo while lo conosco già in un'altra occasione lo ho usato:

    def verifica_Dominio():
        while True:
            email = input("Inserisci Email da controllare: ")
            try:
                validate_email(email)
                print(verde + 'Dominio Valido' + reset)
            except:
                print(rosso + "Dominio Non Valido" + reset)
            scelta = input("Vuoi verificare un altro indirizzo? Scegliere y/n > ")
            if (scelta == 'n'):
                print("Uscita in corso...")
                # Pausa
                time.sleep(1)
                break
    #main
    verifica_Dominio()

    ma adesso in questo nuovo caso ho più def ovunque inserisco while True: non funziona

  • Re: Sono rimasto bloccato per un loop

    24/10/2023 - MrCamarium ha scritto:


    ma adesso in questo nuovo caso ho più def ovunque inserisco while True: non funziona

    Il while True: andrà inserito in testa al blocco indentato di istruzioni che devi ripetere ciclicamente: dove altro vorresti metterlo?

  • Re: Sono rimasto bloccato per un loop

    Facendo cosi ho due errori:

    def main(): #Definisco una funzione main
     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()

    "break" può essere usato solo all'interno di un ciclo

  • Re: Sono rimasto bloccato per un loop

    24/10/2023 - MrCamarium ha scritto:


    "break" può essere usato solo all'interno di un ciclo

    Ed è giusto: “break” serve nel ciclo “while” per uscire da quel ciclo, quindi se lo metti fuori dal ciclo non ha senso.

    La programmazione non va intesa come una libera espressione d'arte combinatoria di parole chiave di un linguaggio: richiede un approccio rigoroso, il rispetto della sintassi e una conoscenza minima di quello che si sta scrivendo, quindi non si può andare a tentativi mettendo un “while” qui o là, spostando dentro un “break” oppure fuori, in breve tirando a indovinare confidando che magicamente si trovi la combinazione che fa funzionare il programma.

    Bisogna ragionare, fare mente locale su ciò che si deve fare e scrivere le istruzioni che implementano l'algoritmo ideato.

    Il flusso delle operazioni è chiaro mentalmente? Ci hai già pensato oppure no? Il resto del codice proviene da qualche altra fonte, cioè è opera tua o l'ha scritto ChatGPT? Non che ci sia qualcosa di male, ma occorre comunque analizzare cosa propone lo strumento di turno per capire se è OK o diverso da quello che ci si aspetta.

  • Re: Sono rimasto bloccato per un loop

    Il codice l'ho elaborato con degli esempi e modelli che ho sul mio PC, ho provato a usare un ChatGPT ma il codice non era al caso mio.

  • Re: Sono rimasto bloccato per un loop

    Risolto ****

    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...")
          time.sleep(1) #Pausa
          break
    main() #main
Devi accedere o registrarti per scrivere nel forum
9 risposte