PYTHON: отправить письмо, используя ошибку ввода / кнопки tkinter - PullRequest
1 голос
/ 10 мая 2019

У меня есть эта программа, которая использует tkinter в качестве моего GUI. Моя программа нажимает кнопку, чтобы отправить электронное письмо. Как только они нажмут на эту кнопку, появится также запись / кнопка, чтобы пользователь мог ввести свой адрес электронной почты, чтобы отправить сообщение. После нажатия на эту кнопку сообщение отправляется на это письмо.

Однако, я получаю эту ошибку правильно, когда нажимаю на первую кнопку (Отправить письмо):

{'': (555, b'5.5.2 Syntax error. i72sm3973288itc.11 - gsmtp')}

Ошибка происходит еще до того, как я могу ввести адрес электронной почты в поле ввода. Я пытаюсь успешно ввести адрес электронной почты и отправить сообщение на это письмо, но пока не получилось.

Это мой код:

from tkinter import *
import smtplib

root = Tk()


def create_button():
    email_btn = Button(root, text="SEND AN EMAIL", fg='blue',
                       command=lambda: get_email())
    email_btn.pack()


def get_email():
    entry_email = StringVar()
    entry_email.get()

    email = Entry(root, textvariable=entry_email)
    email.pack()

    send_btn = Button(root, text="SEND", command=send_email_info(entry_email))
    send_btn.pack()


def send_email_info(entry_email):
    try:

        prompt_msg = "THIS IS A MESSAGE FOR THE EMAIL"
        user = '*****@gmail.com'
        password = '******'

        sender = entry_email.get()

        subject = "EMAIL TEST "
        message = "Subject: {} \n\n{}".format(subject, prompt_msg)
        send_to = ("{}".format(sender))

        mail = smtplib.SMTP_SSL('smtp.gmail.com', 465)
        mail.ehlo()
        mail.login(user, password)
        mail.sendmail(user, send_to, message)
        mail.close()
        print("Success Email!")
        email_cmd = Label(root, text="Email Sent!")
        email_cmd.pack()

    except Exception as x:
        print("FAILED")
        print(x)

def main():
    create_button()
    root.mainloop()

main()

1 Ответ

3 голосов
/ 10 мая 2019

Во-первых, вам не нужно entry_email.get(), он просто получает строку из виджета, и вы все равно не захватываете возвращаемое значение.Вам нужно нужно entry_email.get() вместо entry_email в качестве аргумента вашей функции для send_btn.Причина, по которой он оценивает преждевременно, заключается в том, что вы не используете функцию lambda, как вы это делаете в первой части своего кода (как вы должны делать каждый раз, когда вы включаете аргумент в свой обратный вызов своей функции).Я думаю, что вы ищете код как:

from tkinter import *
import smtplib

root = Tk()


def create_button():
    email_btn = Button(root, text="SEND AN EMAIL", fg='blue',
                       command=lambda: get_email())
    email_btn.pack()


def get_email():
    entry_email = StringVar()
    # entry_email.get() # you don't need this, it does nothing

    email = Entry(root, textvariable=entry_email)
    email.pack()
    # function below needs a lambda
    send_btn = Button(root, text="SEND", command=lambda: send_email_info(entry_email.get()))
    send_btn.pack()


def send_email_info(entry_email):
    try:

        prompt_msg = "THIS IS A MESSAGE FOR THE EMAIL"
        user = '*****@gmail.com'
        password = '******'

        sender = entry_email

        subject = "EMAIL TEST "
        message = "Subject: {} \n\n{}".format(subject, prompt_msg)
        send_to = ("{}".format(sender))

        mail = smtplib.SMTP_SSL('smtp.gmail.com', 465)
        mail.ehlo()
        mail.login(user, password)
        mail.sendmail(user, send_to, message)
        mail.close()
        print("Success Email!")
        email_cmd = Label(root, text="Email Sent!")
        email_cmd.pack()

    except Exception as x:
        print("FAILED")
        print(x)

def main():
    create_button()
    root.mainloop()

main()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...