Reputation: 41
I have deployed my site to an Ubuntu 20.10 distro on Linode. All features of my blogsite work flawlessly, except the 'Forgot Password' feature. It works on my local machine just fine, however, on the server it times-out. In the traceback, it shows that it reaches the mail.send(msg). What is causing this error?
import json
with open('/etc/config.json') as config_file:
config = json.load(config_file)
MAIL_SERVER = 'smtp.googlemail.com'
MAIL_PORT = 587
MAIL_USE_TLS = True
MAIL_USERNAME = config.get('EMAIL_USERNAME')
MAIL_PASSWORD = config.get('EMAIL_PASSWORD')
import os
import secrets
from PIL import Image
from flask import url_for, current_app
from flask_mail import Message
from flaskblog import mail
# ============== Save Picture Function ============== #
def save_picture(form_picture):
random_hex = secrets.token_hex(8)
_, f_ext = os.path.splitext(form_picture.filename)
picture_fn = random_hex + f_ext
picture_path = os.path.join(current_app.root_path, 'static/img/profile_pics', picture_fn)
output_size = (125, 125)
i = Image.open(form_picture)
i.thumbnail(output_size)
i.save(picture_path)
return picture_fn
# ============== Reset Email Function ============== #
def send_reset_email(user):
token = user.get_reset_token()
msg = Message('Password Reset Request', sender='[email protected]',
recipients=[user.email])
msg.body = f''' To reset your password, visit the following link:
{url_for('users.reset_token', token=token, _external=True)}
If you did not make this request then simply ignore this email and no changes will be made.
'''
mail.send(msg)
Traceback call
File "/home/jcole2236/FF-BlogSpot/venv/lib/python3.8/site-packages/flask/app.py", line 2447, in wsgi_app
response = self.full_dispatch_request()
File "/home/jcole2236/FF-BlogSpot/venv/lib/python3.8/site-packages/flask/app.py", line 1952, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/home/jcole2236/FF-BlogSpot/venv/lib/python3.8/site-packages/flask/app.py", line 1821, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/home/jcole2236/FF-BlogSpot/venv/lib/python3.8/site-packages/flask/_compat.py", line 39, in reraise
raise value
File "/home/jcole2236/FF-BlogSpot/venv/lib/python3.8/site-packages/flask/app.py", line 1950, in full_dispatch_request
rv = self.dispatch_request()
File "/home/jcole2236/FF-BlogSpot/venv/lib/python3.8/site-packages/flask/app.py", line 1936, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/home/jcole2236/FF-BlogSpot/flaskblog/users/routes.py", line 87, in reset_request
send_reset_email(user)
File "/home/jcole2236/FF-BlogSpot/flaskblog/users/utils.py", line 32, in send_reset_email
mail.send(msg)
File "/home/jcole2236/FF-BlogSpot/venv/lib/python3.8/site-packages/flask_mail.py", line 491, in send
with self.connect() as connection:
File "/home/jcole2236/FF-BlogSpot/venv/lib/python3.8/site-packages/flask_mail.py", line 144, in __enter__
self.host = self.configure_host()
File "/home/jcole2236/FF-BlogSpot/venv/lib/python3.8/site-packages/flask_mail.py", line 158, in configure_host
host = smtplib.SMTP(self.mail.server, self.mail.port)
File "/usr/lib/python3.8/smtplib.py", line 253, in __init__
(code, msg) = self.connect(host, port)
File "/usr/lib/python3.8/smtplib.py", line 339, in connect
self.sock = self._get_socket(host, port, self.timeout)
File "/usr/lib/python3.8/smtplib.py", line 308, in _get_socket
return socket.create_connection((host, port), timeout,
File "/usr/lib/python3.8/socket.py", line 808, in create_connection
raise err
File "/usr/lib/python3.8/socket.py", line 796, in create_connection
sock.connect(sa)
TimeoutError: [Errno 110] Connection timed out
Upvotes: 4
Views: 7706
Reputation: 11
In linux, your program must be "sudo" if it want to use the port between 1~1024. But it's may not safe to sudo a server program, so you could use "authbind" conmand to bind a port between 1~1024.
Upvotes: 1