Отправка электронной почты не работает в flask python

#python #html #sqlite #flask #sqlalchemy

Вопрос:

Поэтому я написал некоторый код, чтобы, когда кто-то вводит свой адрес электронной почты, ему отправлялось электронное письмо с кодом, и когда он вводит этот код на веб-страницу, он проверяет свою учетную запись, отмечая столбец в базе данных под названием проверено как 1 (по умолчанию установлено значение 0). Но когда я набираю электронное письмо и нажимаю «Отправить», оно не работает, в нем говорится о внутренней ошибке сервера.Сервер обнаружил внутреннюю ошибку и не смог выполнить ваш запрос. Либо сервер перегружен, либо в приложении произошла ошибка. Итак, я просмотрел сообщение об ошибке в visual studio, и вот оно :

 [2021-06-22 09:50:55,369] ERROR in app: Exception on /verify [POST]
Traceback (most recent call last):
  File "C:UsersuSDDEAppDataRoamingPythonPython38site-packagesflaskapp.py", line 2447, in wsgi_app
    response = self.full_dispatch_request()
  File "C:UsersuSDDEAppDataRoamingPythonPython38site-packagesflaskapp.py", line 1952, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "C:UsersuSDDEAppDataRoamingPythonPython38site-packagesflaskapp.py", line 1821, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "C:UsersuSDDEAppDataRoamingPythonPython38site-packagesflask_compat.py", line 39, in reraise
    raise value
  File "C:UsersuSDDEAppDataRoamingPythonPython38site-packagesflaskapp.py", line 1950, in full_dispatch_request
    rv = self.dispatch_request()
  File "C:UsersuSDDEAppDataRoamingPythonPython38site-packagesflaskapp.py", line 1936, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "C:UsersuSDDEiptutorialapproutes.py", line 507, in verify
    mail.send(msg)
  File "C:UsersuSDDEAppDataRoamingPythonPython38site-packagesflask_mail.py", line 491, in send
    with self.connect() as connection:
  File "C:UsersuSDDEAppDataRoamingPythonPython38site-packagesflask_mail.py", line 144, in __enter__
    self.host = self.configure_host()
  File "C:UsersuSDDEAppDataRoamingPythonPython38site-packagesflask_mail.py", line 165, in configure_host
    host.login(self.mail.username, self.mail.password)
  File "C:Program FilesPython38libsmtplib.py", line 721, in login
    (code, resp) = self.auth(
  File "C:Program FilesPython38libsmtplib.py", line 633, in auth
    (code, resp) = self.docmd("AUTH", mechanism   " "   response)
  File "C:Program FilesPython38libsmtplib.py", line 423, in docmd
    return self.getreply()
  File "C:Program FilesPython38libsmtplib.py", line 396, in getreply
    raise SMTPServerDisconnected("Connection unexpectedly closed")
smtplib.SMTPServerDisconnected: Connection unexpectedly closed
 

Вот мой код для в моем init.py файл:

 from flask_mail import Mail
from random import *  
app = Flask(__name__)
app.config.from_object(Config)

mail = Mail(app)  
app.config["MAIL_SERVER"]='smtp.gmail.com'  
app.config["MAIL_PORT"] = 465      
app.config["MAIL_USERNAME"] = 'username@gmail.com'  
app.config['MAIL_PASSWORD'] = '*************'  
app.config['MAIL_USE_TLS'] = False  
app.config['MAIL_USE_SSL'] = True  
mail = Mail(app)  
 

Вот код в моем файле маршрутов:

  @app.route('/verify',methods = ["POST"])  
    def verify():  
      code = randint(000000,999999) 
      mail = Mail(app)   
      email = request.form["email"]   
      msg = Message('code',sender = 'username@gmail.com', recipients = [email])  
      msg.body = str(code)  
      mail.send(msg)  
      return render_template('emailverification.html')  
    @app.route('/validate',methods=["POST"])   
    def validate():  
     user_code = request.form['code']  
     if code == int(user_code):  
         
      user = User2(username='kayla', email='kayla@example.com',firstname='Kayla',surname='Horan',type='student',password='kayla123',confirmed='1',timestamp=datetime.now())
      user.set_password('kayla123')
      db.session.add(user)
      db.session.commit()
      flash('You are now a registered user!')
 

Это код на странице настроек:

 <form action="/verify" method="POST">
       <tr><td style="width:220px"> <label style="margin-right:6.3%">Enter email address:</label></td><td><input style="margin-right:2%;width:260px" type="email" name="email"></td></tr>
      <tr><td>  <input type="submit" value="Send verification email"></td></tr></form>
 

Это код на странице подтверждения электронной почты:

 <form action = "/validate" method="post">   
 <h4> The verification code has been sent to the email address. Please check the email for the confirmation.</h4>  
 Enter confirmation code: <input type="text" name="code">  
 <input type="submit" value="Submit">  
 </form>  
 

Так почему же это не работает?? Что не так с моим кодом??

Комментарии:

1. Это проблема не с вашим кодом, а с настройками gmail: support.google.com/accounts/answer/6010255?hl=en#zippy=