Search code examples
pythonsmtplibpassword-checker

python check user input for email password loop


I would like to have my script verify that an email password is correct before proceeding with the rest of the script. I'm sure it's just a simple loop, but I can't think of an easy way to do it. Right now my script is:

import arcpy, os, sys, time, subprocess, collections, datetime, smtplib
from datetime import datetime
print("This script will check your email password to verify it is  correct.")
usr = "[email protected]"
print("Please enter the password for " + usr + ":")
psw = raw_input()


def passwordcheck(usr,psw):
    server=smtplib.SMTP('smtp.gmail.com:587')
    server.starttls()
    server.login(usr,psw)
    server.quit()
    print("Thank you. Password was correct.")


try:
    passwordcheck(usr,psw)

except:
    print("Password was incorrect.")

I'd like a simple loop to allow the user 3 attempts at entering the correct password, and then if no correct password was entered, kill the script.


Solution

  • This would make much more sense.

    def passwordcheck(usr,psw):
        server=smtplib.SMTP('smtp.gmail.com:587')
        server.starttls()
        try:
            server.login(usr,psw)
            ret = True
        except:
            ret = False
        server.quit()
        return ret
    
    for i in range(3):
        psw = raw_input("Please enter the password for " + usr + ": ")
        if passwordcheck(usr,psw) is False:
            print("Password was incorrect.")
        else:
            print("Thank you. Password was correct.")
            break
    

    Because handling the error closer to the error source and acting accordingly should (is?) considered best practice. Also, considering you kept Password was incorrect outside of the function call you should probably keep the positive output close as well (always keep similar outputs close to each other).

    So handle the error in passwordcheck and deal with the return code of the function istead.
    This is probably not a typical question for SO since there's nothing wrong with your initial code there for this is more a code review come to think of it.