从linode服务器连接到smtp.gmail.com服务器的连接超时

时间:2019-12-27 20:01:36

标签: python email flask smtp

我正在遵循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)中,看来这很可能是防火墙问题。任何帮助将不胜感激。

1 个答案:

答案 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的端口替换您的端口