Я продолжаю получать сообщение об ошибке "TypeError: должен быть str, а не байты" - PullRequest
0 голосов
/ 01 января 2019

Я не новичок в python, но я новичок в модулях Tkinter и smtplib.Я пытаюсь настроить свой собственный интерфейс электронной почты, используя tkinter в качестве GUI и smtplib для отправки электронных писем.Программа берет данные из полей ввода, затем использует их для отправки электронных писем, но продолжает выдавать эту ошибку, и я не знаю, как ее исправить ...

File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/tkinter/__init__.py", line 1699, in __call__
return self.func(*args)
File "/Users/jonbrain/PycharmProjects/GUI for Email/venv/The 
Propper GuI.py", line 39, in send_it
server.login(emailUser, user_Password)


`File"/Library/Frameworks/Python.framework/Versions/3.6/lib/
python3. 6/smtplib.py", 
line 721, in login
initial_response_ok=initial_response_ok)
File"/Library/Frameworks/Python.framework/Versions/3.6/lib/
python3.6/smtplib.py", line 631, in auth
(code, resp) = self.docmd("AUTH", mechanism + " " + response)
TypeError: must be str, not bytes

Я сделалнемного исследований;у многих людей один и тот же вопрос, но в совершенно другой ситуации (которая требует другого решения).Так вот мой код.

from tkinter import *
import smtplib


root = Tk()
root.title("Jon's Email Service")
root.geometry("800x400+0+0")

Label(root, text="Jon's Email Service", font=("arial", 
60,"bold"), fg="blue").pack()

Label(root, text="User's Email address {Has to be gmail} ",font= 
("arial", 20,), fg="black").pack()

One = Entry(root,width=40, bg="white")
One.pack()

Label(root, text="User's Gmail Password", font=("arial", 
20,),fg="black").pack()

Two = Entry(root, width=40, bg="white")
Two.pack()

Label(root, text="Email Recipient", font=("arial", 
20,),fg="black").pack()
Three = Entry(root,width=40, bg="white")
Three.pack()
Label(root, text="The Message", font=("arial", 
20,),fg="black").pack()

Four = Entry(root, width=60, bg="white")
Four.pack()

def send_it():
    email_resipient = Three.get()
    Label(root, text="Email Is Sent!", font=("arial", 20,), 
    fg="Red").pack()
    emailUser = One.get()
    user_Password = Two.get
    msg = Four.get()
    print(emailUser)
    server = smtplib.SMTP("smtp.gmail.com", 587)
    server.starttls()
    server.login(emailUser, user_Password)
    server.sendmail(emailUser, email_resipient, msg)
    server.quit()

send = Button(root, text="Send", default='active', width = 40, 
bg = "lightblue",command = send_it).pack()

root.mainloop()

1 Ответ

0 голосов
/ 01 января 2019

После быстрого просмотра я вижу эту строку -> user_Password = Two.get без скобок на конце.В результате пароль, вероятно, не предоставляется, а является байтовым объектом, который в любом случае не является паролем.изменение строки на user_Password = Two.get(), кажется, работает для меня в моем тестировании

Это должно решить проблему, о которой спрашивает вопрос, хотя, возможно, у вас может возникнуть новая проблема smtplib.SMTPAuthenticationError: (535, b'5.7.8 Username and Password not accepted. Learn more at\n5.7.8 https://support.google.com/mail/?p=BadCredentials 196sm197509481pfc.77 - gsmtp'), которая выходит за рамки этоговопрос.

...