You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Airflow连接SMTP主机报Connection refused问题排查建议咨询

Airflow SMTP邮件发送Connection refused问题排查方案
  • 首先确认SMTP参数是否被Airflow默认配置覆盖
    你未修改airflow.cfg的前提下,Airflow自带的EmailOperator、send_email工具函数会优先读取全局配置的SMTP参数,默认值为localhost:25,如果代码没有完全覆盖所有SMTP相关配置,就会触发连接拒绝。建议直接在代码中显式传递所有必填参数,最稳妥的写法是直接调用原生smtplib,完全不受Airflow全局配置干扰,示例如下:
    import smtplib
    from email.mime.text import MIMEText
    
    def send_custom_email(**context):
        msg = MIMEText("邮件正文内容")
        msg["Subject"] = "邮件标题"
        msg["From"] = "发件人邮箱"
        msg["To"] = "收件人邮箱"
        
        # 显式声明所有SMTP配置,不调用Airflow邮件相关默认配置
        with smtplib.SMTP_SSL("你的SMTP主机地址", SMTP端口) as server:
            server.login("发件人账号", "发件人密码")
            server.send_message(msg)
    
  • 检查Airflow SMTP连接配置
    进入Airflow后台的「Admin - Connections」页面,查找ID为smtp_default的连接,如果该连接存在且配置了错误的SMTP地址、端口,优先级会高于你代码里传入的参数,直接覆盖你的配置。你可以修改该连接为正确参数,或者在代码中指定自定义的连接ID避免使用默认值。
  • 排查Airflow进程的运行权限限制
    你用独立脚本测试连通性时,使用的是当前登录用户的运行环境,而生产环境的Airflow Worker/Scheduler进程通常使用专用的服务账号运行。需要确认:
    • 服务账号是否有出站访问SMTP端口的权限,是否有针对该账号的iptables、SELinux出站限制
    • Airflow进程是否配置了全局HTTP/HTTPS代理,代理规则拦截了SMTP端口的访问
  • 确认版本兼容性
    检查本地和生产环境的Airflow版本是否一致,部分低版本Airflow的EmailOperator不支持直接传递smtp_host、smtp_port等参数,必须通过连接ID传递配置,你本地高版本支持的写法在低版本生产环境会失效,导致参数未生效、自动使用默认配置。
  • 打印调试日志确认实际连接参数
    在邮件发送逻辑前加入日志打印,输出你用到的SMTP主机、端口、账号等信息,同时开启Task的DEBUG日志级别,查看Airflow实际发起连接的目标地址是否和你配置的一致,可以快速定位参数被覆盖的问题。

内容的提问来源于stack exchange,提问作者Puja Bharti

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 15:06:00