TheDude
TheDude

Reputation: 93

getpass.getpass() function in Python not working?

Running on Windows 7 and using PyCharm 2016.2.3 if that matters at all.

Anyway, I'm trying to write a program that sends an email to recipients, but I want the console to prompt for a password to login.

I heard that getpass.getpass() can be used to hide the input.

Here is my code:

import smtplib
import getpass

import sys

print('Starting...')

SERVER = "localhost"
FROM = "[email protected]"

while True:
    password = getpass.getpass()
    try:
        smtpObj = smtplib.SMTP(SERVER)
        smtpObj.login(FROM, password)
        break
    except smtplib.SMTPAuthenticationError:
        print("Wrong Username/Password.")
    except ConnectionRefusedError:
        print("Connection refused.")
        sys.exit()

TO = ["[email protected]"] 
SUBJECT = "Hello!"
TEXT = "msg text"

message = """\
From: %s
To: %s
Subject: %s

%s
""" % (FROM, ", ".join(TO), SUBJECT, TEXT)

smtpObj.sendmail(FROM, TO, message)
smtpObj.close()
print("Successfully sent email")

But when I run my code, here is the output:

 Starting...
 /Nothing else appears/

I know the default prompt for getpass() is 'Password:' but I get the same result even when I pass it a prompt string.

Any suggestions?

EDIT: The code continues to run indefinitely after it prints the string, but nothing else appears and no emails are sent.

Upvotes: 9

Views: 29091

Answers (2)

guerda
guerda

Reputation: 24069

For PyCharm 2018.3 Go to 'Edit Configurations' and then select 'Emulate terminal in output console'.

enter image description here

Answer provided by Abhyudaya Sharma

Upvotes: 23

UnholySheep
UnholySheep

Reputation: 4096

The problem you have is that you are launching it via PyCharm, which has it's own console (and is not the console used by getpass)

Running the code via a command prompt should work

Upvotes: 19

Related Questions