Getting this error "TypeError: _MailMixin.send() missing 1 required positional argument: 'message'" when trying to email a forgot password message via flask-mail. Feel like I'm following the model to a tee, but I'm obviously missing something.
Here is the relevant code:
Init.py
app.config['MAIL_SERVER']='smtp.mailtrap.io'
app.config['MAIL_PORT'] = 2525
app.config['MAIL_USERNAME'] = [username]
app.config['MAIL_PASSWORD'] = [password]
app.config['MAIL_USE_TLS'] = True
app.config['MAIL_USE_SSL'] = False
mail = Mail(app)
models.py
class User(db.Model,UserMixin):
id = db.Column(db.Integer, primary_key=True)
email = db.Column(db.String(150), unique = True)
password = db.Column(db.String(150))
username = db.Column(db.String(150))
birthdate = db.Column(db.Date)
gender_id = db.Column(db.Integer)
createDate = db.Column(db.DateTime(timezone = true),default = func.now())
token = db.Column(db.String(32), nullable=False, unique=False)
notes = db.relationship('tbl_note')
views.py The code is failing on the line mail.send(msg)
if request.method =="POST":
user = User.query.filter_by(email = form.email.data).first()
if user:
#generate new token
token = str(uuid4()).replace('-','')
#update user token in db
user.token = token
db.session.add(user)
db.session.commit()
link = 'http://' getenv('DOMAIN') url_for(
'update_password',
email=my_user.email, token=token)
msg = Message('Password Reset Request',
sender='[email protected]',
recipients=[user.email])
msg.body = 'To reset your password, visit the following link: ' link
'. If you did not make this request then simply ignore this email and no changes will be made.'
Mail.send(msg)
flash('We have sent an email to change your password. Please check your Spam folder if not found.', category = 'success')
return redirect(url_for('auth.login'))
CodePudding user response:
I've never used Flask Mail but from what I can see and the error message I'd say the problem is that .send
is not a static method. You probably want lowercase mail.send(message)
instead of Mail.send(message)
CodePudding user response:
- Your object name is mail not Mail , if that doesn't work, try 2nd one.
with mail.connect() as conn:
msg = Message('Password Reset Request',
sender='[email protected]',
recipients=[user.email])
msg.body = 'To reset your password, visit the following link: ' link
'. If you did not make this request then simply ignore this email and no changes will be made.'
conn.send(msg)
& also check app.config['MAIL_USERNAME'] takes list or direct value(worked for me).