Flask-Mail Google SSL "smtplib.smtpserverdisconconed: соединение неожиданно закрыто"Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Flask-Mail Google SSL "smtplib.smtpserverdisconconed: соединение неожиданно закрыто"

Сообщение Anonymous »

Итак, теперь, когда я добавил SSL вместо TLS, есть, по крайней мере, некоторый прогресс, но он все еще не работает. Секунды, и я получаю ошибку, которая неожиданно закрыта.from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_bcrypt import Bcrypt
from flask_login import LoginManager
from flask_mail import Mail

app = Flask(__name__)

SECRET_KEY = "SECRET_KEY"
app.config["SECRET_KEY"] = SECRET_KEY
app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///site.db"

db = SQLAlchemy(app)
bcrypt = Bcrypt(app)
login_manager = LoginManager(app)
login_manager.login_view = "login"
login_manager.login_message_category = "danger"

app.config["MAIL_SERVER"] = "smtp.gmail.com"
app.config["MAIL_PORT"] = 465
# tls is 587, ssl is 465
app.config["MAIL_USER_TLS"] = False
app.config["MAIL_USER_SSL"] = True
app.config["MAIL_USERNAME"] = "myemail"
app.config["MAIL_PASSWORD"] = "myapppassword"
mail = Mail(app)
< /code>
.
routes.py

from myapp import app, db, bcrypt, mail
from myapp.forms import (RegistrationForm, LoginForm, UpdateAccountForm, PostForm, SearchForm, RequestResetForm,
ResetPasswordForm)
from flask import render_template, redirect, flash, url_for, request
from myapp.models import Post, User
from flask_login import login_user, current_user, logout_user, login_required
import secrets
import os
from PIL import Image
from sqlalchemy import desc, asc, select
from flask_mail import Message

def send_reset_email(user):
token = user.get_reset_token()
msg = Message(subject="Password Reset Request", sender="[email protected]", recipients=[user.email])

msg.body = f"""To reset your password, visit the following link
{url_for("reset_token", token=token, _external=True)}

If you did not make this request, then simply ignore this email.
"""
mail.send(msg)

@app.route("/reset_password", methods=["GET", "POST"])
def reset_request():
if current_user.is_authenticated:
flash("You already are authenticated. Please log out in order to get to that page.", "info")
return redirect(url_for("home"))

request_form = RequestResetForm()

if request_form.validate_on_submit():
user = User.query.filter_by(email=request_form.email.data).first()
send_reset_email(user)
flash("An email has been sent with instructions to reset the password.", "info")
return redirect(url_for("login"))
return render_template("reset_request.html", title="Reset Password", request_form=request_form)

@app.route("/reset_password/", methods=["GET", "POST"])
def reset_token(token):
if current_user.is_authenticated:
flash("You already are authenticated. Please log out in order to get to that page.", "info")
return redirect(url_for("home"))

user = User.verify_reset_token(token)

if user is None:
flash("That is an invalid or expired token", "warning")
return redirect(url_for("reset_request"))

reset_form = ResetPasswordForm()

if reset_form.validate_on_submit():
hashed_password = bcrypt.generate_password_hash(reset_form.password.data).decode("utf-8")
user.password = hashed_password
db.session.commit()
flash(f"Your password has been updated", "info")
return redirect(url_for('login'))

return render_template("reset_token.html", title="Reset Password", reset_form=reset_form)

< /code>
.
models.py

from myapp import db, login_manager, app
from datetime import datetime, timezone
from flask_login import UserMixin
from itsdangerous import URLSafeTimedSerializer as Serializer

class User(db.Model, UserMixin):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(20), unique=True, nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
image_file = db.Column(db.String(20), nullable=False, default="default.jpg")
password = db.Column(db.String(60), nullable=False)

posts = db.relationship("Post", backref="author", lazy="subquery")

def get_reset_token(self, expires_sec=300):
s = Serializer(app.config["SECRET_KEY"], "salty")
return s.dumps({'user_id': self.id})

@staticmethod
def verify_reset_token(token):
s = Serializer(app.config["SECRET_KEY"])
try:
user_id = s.loads(token)["user_id"]
except:
return None
return User.query.get(user_id)

def __repr__(self):
return f"User('id={self.id}', '{self.username}', '{self.email}', '{self.image_file}')"

< /code>
и на странице HTML я просто ввожу электронное письмо, я хочу, чтобы сообщение было отправлено. < /p>
File "-\venv\Lib\site-packages\flask\app.py", line 1536, in __call__
return self.wsgi_app(environ, start_response)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "-\venv\Lib\site-packages\flask\app.py", line 1514, in wsgi_app
response = self.handle_exception(e)
^^^^^^^^^^^^^^^^^^^^^^^^
File "-\venv\Lib\site-packages\flask\app.py", line 1511, in wsgi_app
response = self.full_dispatch_request()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "-\venv\Lib\site-packages\flask\app.py", line 919, in full_dispatch_request
rv = self.handle_user_exception(e)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "-\venv\Lib\site-packages\flask\app.py", line 917, in full_dispatch_request
rv = self.dispatch_request()
^^^^^^^^^^^^^^^^^^^^^^^
File "-\venv\Lib\site-packages\flask\app.py", line 902, in dispatch_request
return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args) # type: ignore[no-any-return]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "-\routes.py", line 155, in reset_request
send_reset_email(user)
File "-\bungee_gum\routes.py", line 142, in send_reset_email
mail.send(msg)
File "-\venv\Lib\site-packages\flask_mail\__init__.py", line 539, in send
with self.connect() as connection:
File "-\venv\Lib\site-packages\flask_mail\__init__.py", line 127, in __enter__
self.host = self.configure_host()
^^^^^^^^^^^^^^^^^^^^^
File "-\venv\Lib\site-packages\flask_mail\__init__.py", line 144, in configure_host
host = smtplib.SMTP(self.mail.server, self.mail.port)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "-\AppData\Local\Programs\Python\Python312\Lib\smtplib.py", line 255, in __init__
(code, msg) = self.connect(host, port)
^^^^^^^^^^^^^^^^^^^^^^^^
File "-\AppData\Local\Programs\Python\Python312\Lib\smtplib.py", line 343, in connect
(code, msg) = self.getreply()
^^^^^^^^^^^^^^^
File "-\AppData\Local\Programs\Python\Python312\Lib\smtplib.py", line 405, in getreply
raise SMTPServerDisconnected("Connection unexpectedly closed")
smtplib.SMTPServerDisconnected: Connection unexpectedly closed

< /code>
В чем может быть проблема? Раньше, когда я использовал TLS, ошибка была что -то вроде сервера отказалась подключаться, теперь это так. Порт кажется правильным, 465 для SSL. Mail_username - мой адрес электронной почты, Mail_password - это пароль приложения для недавно созданного приложения в Google «Пароли приложений». Моя учетная запись Google должна быть в порядке, так как я использовал это приложение по электронной почте некоторое время назад.

Подробнее здесь: https://stackoverflow.com/questions/794 ... expectedly
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Javax.net.ssl.sslprotocolexception: SSL Handshake прерван: ssl = 0x7fa2258640: сбой в библиотеке SSL, обычно ошибка прот
    Anonymous » » в форуме JAVA
    0 Ответы
    48 Просмотры
    Последнее сообщение Anonymous
  • Javax.net.ssl.sslprotocolexception: SSL Handshake прерван: ssl = 0x7fa2258640: сбой в библиотеке SSL, обычно ошибка прот
    Anonymous » » в форуме Android
    0 Ответы
    37 Просмотры
    Последнее сообщение Anonymous
  • Создайте экземпляр apache.mailet.Mail из файла, сохранив при этом SMTP RCPT TO и MAIL FROM.
    Anonymous » » в форуме JAVA
    0 Ответы
    97 Просмотры
    Последнее сообщение Anonymous
  • Javax.mail в jakarta.mail, какой из них использовать
    Anonymous » » в форуме JAVA
    0 Ответы
    38 Просмотры
    Последнее сообщение Anonymous
  • Jakarta.mail.Provider: com.sun.mail.imap.IMAPProvider не является подтипом
    Anonymous » » в форуме JAVA
    0 Ответы
    56 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»