Python中flask_mail在本地测试成功,但部署到nginx+flask+sqlalchemy服务器后出现“error: [Errno 110] Connection timed out”错误如何解决?

各位大大,是不是我的服务器需要配置什么端口之类的?搞了两天了,无法搞好!

  1. 服务器上的 INPUT 端口我只开放了 80,22,21,其他都没有开放。
  2. OUTPUT 和 FORWARD 上我都是 ACCEPT

代码如下:

from flask import Flask
# from run_celery import make_celery
# from celery import platforms
from flask_mail import Mail,Message

app = Flask(name) app.config.update( # CELERY_BROKER_URL=‘redis://localhost:6379/0’, # CELERY_RESULT_BACKEND=‘redis://localhost:6379/1’, DEBUG = True, MAIL_SERVER=‘smtp.qq.com’, MAIL_PROT=‘25’, # MAIL_USE_SSL = True, MAIL_USE_TLS = True, MAIL_USERNAME = ‘[email protected]’, MAIL_PASSWORD = ‘rkuynjxxxxxpqicfc’, MAIL_DEBUG = True )

celery = make_celery(app)

mail = Mail(app)

@app.route(’/’) def index(): msg = Message(“This is only test Mail”,sender=’[email protected]’,recipients=[’[email protected]’]) msg.body = “This is my first Mail.” mail.send(msg) print(‘Mail send OK’) return ‘sent’

if name == ‘main’: app.run()

以下是 nginx 的配置:

server {
  listen 80;
  server_name www.demo.com;
  access_log /wwwlogs/www.demo.com_nginx.log combined;
  index index.html index.htm index.php;
  root /wwwroot/www.demo.com;

location ~ .*.(wma|wmv|asf|mp3|mmf|zip|rar|swf|flv|mp4)$ { valid_referers none blocked .demo.com www.demo.com; if ($invalid_referer) { return 403; } } location / { try_files $uri @flask; } location @flask { proxy_set_header X-real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://127.0.0.1:5000; } location ~ ..(bmp|swf|flv|mp4)$ { expires 30d; access_log off; } location ~ /.ht { deny all; } }


Python中flask_mail在本地测试成功,但部署到nginx+flask+sqlalchemy服务器后出现“error: [Errno 110] Connection timed out”错误如何解决?

11 回复

qq 邮箱的密码是特殊设置的,不是登录密码
& 即便成功了,发几份邮件之后就提示垃圾邮件了


这个问题通常是因为邮件服务器的网络连接被防火墙或安全组策略拦截了。

首先,检查你的Flask-Mail配置是否正确指向了可访问的SMTP服务器。在服务器上执行以下命令测试网络连通性:

import smtplib
import socket

def test_smtp_connection(host, port=25, timeout=10):
    try:
        with socket.create_connection((host, port), timeout=timeout):
            print(f"成功连接到 {host}:{port}")
            return True
    except Exception as e:
        print(f"连接失败: {e}")
        return False

# 测试你的SMTP服务器
test_smtp_connection('smtp.your-email-provider.com', 587)

如果连接失败,需要检查:

  1. 服务器防火墙是否开放了SMTP端口(通常是25、465或587)
  2. 云服务商的安全组规则是否允许出站SMTP连接
  3. SMTP服务器是否需要TLS/SSL连接

对于Gmail等第三方服务,确保开启了“允许不够安全的应用”或使用应用专用密码。

如果使用本地邮件服务器,确保postfix/sendmail等服务正在运行且配置正确。

总结:先测试服务器到SMTP的网络连通性。

在本地上测试了,发了五封都是成功的,而且没有提示垃圾邮件!密码是授权码,不是密码,我设置好了的!

看看服务器运营商是不是封锁了 25 端口,google cloud 就封了,自家 gmail 都不行,只能找第三方邮件平台

这个没想到,去问问看!多谢

搞了两天,原来正是你说的情况,哈哈,太感谢了,现在都成功了!

现在各种云都禁止 25 端口了

是的,现在买云服都要先看看有没有封掉 25 端口,幸好我买服务器这家可以自己解封!

即使封了 25 端口也没关系吧 改用 SSL 的 465 端口或 587 端口即可
https://kf.qq.com/faq/120322fu63YV130422nqIrqu.html

对应的 flask 配置加一条 MAIL_USE_SSL = True

垃圾邮件评定的最重要指标是单位时间的发信频度,而不是总量,你一分钟群发一百封,连续发半小时试试。

换 587 端口~

回到顶部