我正在遵循Corey Schafer的Flask教程来设置基本的博客Web应用程序。从本地计算机运行网站时,我可以通过flask-mail发送电子邮件,以进行密码重置。但是,将网站托管在linode Ubuntu服务器上后,尝试发送电子邮件时收到超时错误。错误回溯是:
[2019-12-27 18:15:44,423] ERROR in app: Exception on /reset_password [POST]
Traceback (most recent call last):
File "/home/hansen/FlaskTutorial/venv/lib/python3.7/site-packages/flask/app.py", line 2446, in wsgi_app
response = self.full_dispatch_request()
File "/home/hansen/FlaskTutorial/venv/lib/python3.7/site-packages/flask/app.py", line 1951, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/home/hansen/FlaskTutorial/venv/lib/python3.7/site-packages/flask/app.py", line 1820, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/home/hansen/FlaskTutorial/venv/lib/python3.7/site-packages/flask/_compat.py", line 39, in reraise
raise value
File "/home/hansen/FlaskTutorial/venv/lib/python3.7/site-packages/flask/app.py", line 1949, in full_dispatch_request
rv = self.dispatch_request()
File "/home/hansen/FlaskTutorial/venv/lib/python3.7/site-packages/flask/app.py", line 1935, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/home/hansen/FlaskTutorial/flaskblog/users/routes.py", line 84, in reset_request
send_reset_email(user)
File "/home/hansen/FlaskTutorial/flaskblog/users/utils.py", line 29, in send_reset_email
mail.send(msg)
File "/home/hansen/FlaskTutorial/venv/lib/python3.7/site-packages/flask_mail.py", line 491, in send
with self.connect() as connection:
File "/home/hansen/FlaskTutorial/venv/lib/python3.7/site-packages/flask_mail.py", line 144, in __enter__
self.host = self.configure_host()
File "/home/hansen/FlaskTutorial/venv/lib/python3.7/site-packages/flask_mail.py", line 158, in configure_host
host = smtplib.SMTP(self.mail.server, self.mail.port)
File "/usr/lib/python3.7/smtplib.py", line 251, in __init__
(code, msg) = self.connect(host, port)
File "/usr/lib/python3.7/smtplib.py", line 336, in connect
self.sock = self._get_socket(host, port, self.timeout)
File "/usr/lib/python3.7/smtplib.py", line 307, in _get_socket
self.source_address)
File "/usr/lib/python3.7/socket.py", line 727, in create_connection
raise err
File "/usr/lib/python3.7/socket.py", line 716, in create_connection
sock.connect(sa)
TimeoutError: [Errno 110] Connection timed out
我尝试通过linux服务器上的telnet连接到smtp.gmail.com服务器,并收到以下错误:
telnet smtp.gmail.com 587
Trying 2607:f8b0:400d:c03::6d...
Trying 209.85.201.109...
telnet: Unable to connect to remote host: Connection timed out
在其他stackoverflow帖子(https://unix.stackexchange.com/questions/151321/cant-access-mail-server-through-smtp)中,看来这很可能是防火墙问题。任何帮助将不胜感激。
答案 0 :(得分:0)
在您使用ubuntu的情况下,请尝试下面的步骤来配置防火墙规则以启用smtp。
sudo ufw status
如果ufw状态为活动状态,则可以使用ufw配置防火墙规则,否则将其激活并配置规则。
sudo ufw start
sudo ufw enable
配置smtp
sudo ufw default allow outgoing
sudo ufw allow smtp
如果您使用smtp的自定义端口
sudo ufw allow your port/tcp
用用于smtp的端口替换您的端口