超时错误:[Errno 110] 连接超时

3

我已经将我的网站部署到了Linode上的Ubuntu 20.10发行版。我的博客网站的所有功能都运行良好,除了“忘记密码”功能。它在我的本地机器上运行得很好,但是在服务器上会超时。在追踪回溯中,它显示它到达了mail.send(msg)。是什么导致了这个错误?

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='noreply.fantasyfootball.blogspot@gmail.com', 
         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调用

  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

1
检查服务器是否允许通过25端口(或您使用的任何端口)进行出站连接。 - snakecharmerb
1个回答

1

在Linux中,如果你想要使用1~1024之间的端口,你的程序必须以"sudo"权限运行。但是,以服务器程序的身份执行"sudo"可能不安全,因此可以使用"authbind"命令绑定1~1024之间的端口。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接