【发布时间】:2019-05-28 07:51:36
【问题描述】:
我不是 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()
【问题讨论】:
-
我想你会发现
user_Password不是你想的那样。 -
user_Password 是我创建的变量,因此用户登录凭据不会被硬编码。
-
user_Password不是字符串,但您正尝试像使用它一样使用它。将print(user_Password)添加到您的代码中,您会发现它不是您所期望的。 -
好的,我添加了
print(user_Password),它返回的正是我在输入框中输入的内容。你在说什么? -
那是不可能的。在上面的代码中,
user_Password是一个函数,而不是一个字符串。您将user_Password设置为Two.get。Two.get是一个函数。您需要将user_Password设置为函数的result:Two.get()。注意尾随的()。