ここで、ユーザーがパスワードを忘れた場合にリセットパスワードのメールを送信するために使用したメインのフラスコメールコードですが、実行してコードを実行すると、 smtplib.SMTPServerDisconnected: 接続が予期せず閉じられました
以下は__init__.pyファイルコードです
import os
from flask_mail import Mail
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_bcrypt import Bcrypt
from flask_login import LoginManager
app = Flask(__name__)
app.config['SECRET_KEY'] = '7f09c01a4f942b0812be4cb86e065f77'
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='info'
app.config['MAIL_SERVER'] = 'smtp.googlemail.com'
app.config['MAIL_PORT'] = 587
app.config['MAIL_USE_TLS'] = True
app.config['MAIL_USERNAME'] = 'sender@gmail.com'
app.config['MAIL_PASSWORD'] = 'password'
mail = Mail(app)
from index import routes
およびroutes.pyファイル
import os
import binascii
from PIL import Image
from flask import render_template,url_for, flash, redirect, request, abort
from index import app,db,bcrypt,mail
from index.forms import (RegistrationForm,LoginForm,UpdateAccountForm,PostForm,
RequestResetForm,ResetPasswordForm)
from index.models import User, Post
from flask_login import login_user, current_user, logout_user, login_required
from flask_mail import Message
token = user.get_reset_token()
msg = Message('Password Reset Request',
sender="ketansuthar899@gmail.com",
recipients=[user.email])
msg.body = '''To reset your password, visit the following link:{}
If you did not make this request then simply ignore this email and no changes will be made.
'''.format((url_for('reset_token', token=token, _external=True)))
mail.send(msg)
ここに get_reset_token メソッドがあります:
from datetime import datetime
from index import db, login_manager,app
from itsdangerous import TimedJSONWebSignatureSerializer as Serializer
from flask_login import UserMixin
def get_reset_token(self, expires_sec=1800):
s = Serializer(app.config['SECRET_KEY'], expires_sec)
return s.dumps({'user_id': self.id}).decode('utf-8')
StackOverflow で以下のコードも見ましたが、それも機能しませんでした
app.config['MAIL_USE_SSL'] = True
app.config['MAIL_SERVER']='smtp.gmail.com'
app.config['MAIL_PORT'] = 465
app.config['MAIL_USERNAME'] = 'sender@gmail.com'
app.config['MAIL_PASSWORD'] = 'password'
app.config['MAIL_USE_TLS'] = False
app.config['MAIL_USE_SSL'] = True