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

Airflow中EmailOperator任务显示已发送但未实际生成邮件的问题求助

Airflow EmailOperator 显示发送成功但未收到邮件的排查与解决

核心问题分析

任务日志显示邮件已发送,但指定邮箱未收到,说明代码触发了发送动作,但邮件在传输或配置环节出现异常。

排查步骤与解决方案

1. 检查Airflow SMTP核心配置

Airflow依赖SMTP服务器发送邮件,必须在airflow.cfg中完成正确配置:

[smtp]
smtp_host = 你的SMTP服务器地址  # 例如 smtp.gmail.com
smtp_starttls = True
smtp_ssl = False
smtp_user = 发件人邮箱账号
smtp_password = 邮箱密码/应用专用密码
smtp_port = 587
smtp_mail_from = 发件人邮箱地址
smtp_timeout = 30
smtp_retry_limit = 5
  • 若使用Gmail,需开启两步验证后设置应用专用密码,不能直接使用账号密码。
  • 企业邮箱需确认是否将Airflow服务器IP加入白名单,否则会被拦截。

2. 验证收件人变量有效性

代码中使用to=email,需确认:

  • email变量已正确赋值为合法邮箱格式(如xxx@example.com),无空值、多余空格或非法字符。
  • 可临时硬编码测试邮箱(如your-test@example.com),排查是否为变量传递问题。

3. 排查邮件拦截问题

  • 检查收件方邮箱的垃圾邮件/垃圾箱,邮件可能被反垃圾规则判定为垃圾邮件。
  • 临时修改主题(如改为Airflow测试邮件),避免Alert这类关键词触发拦截。
  • 简化html_content测试,排除内容语法错误:
    html_content='<p>测试邮件内容</p>'
    

4. 查看底层日志

  • 查看EmailOperator任务的详细日志,搜索smtp关键字,排查是否有隐藏的连接超时、认证失败等异常。
  • 联系SMTP服务器管理员,查看邮件传输日志,确认邮件是否到达服务器、是否被退回。

5. 直接测试SMTP连接

在Airflow服务器上用Python脚本单独测试SMTP发送,排除Airflow配置问题:

import smtplib
from email.mime.text import MIMEText

msg = MIMEText('Python测试邮件内容', 'html')
msg['Subject'] = 'SMTP连接测试'
msg['From'] = '发件人邮箱'
msg['To'] = '测试收件邮箱'

with smtplib.SMTP('你的SMTP服务器', 587) as server:
    server.starttls()
    server.login('发件人邮箱', '邮箱密码')
    server.send_message(msg)

若该脚本也无法发送,说明问题出在SMTP服务器或网络,与Airflow无关。

代码优化建议

代码中subject的{{ds}}用了四层大括号,可简化为两层(f-string中用两层大括号转义为一层,Airflow模板引擎会自动解析为执行日期):

subject=f'Alert: No files received for project {dag_id.upper()} for {{ds}}'

内容的提问来源于stack exchange,提问作者Dhanashree Shekatkar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 10:17:05