Airflow DAG故障告警:多邮箱配置未生效的解决方法
Airflow DAG失败告警多邮箱配置及问题排查
你的default_args中email字段传入邮箱列表的写法本身是正确的,Airflow(1.10及以上版本)支持直接通过列表配置多个告警邮箱。未收到邮件大概率是SMTP服务配置或其他环节的问题,以下是正确配置方式及排查要点:
正确的多邮箱配置方式
方式1:列表形式(推荐,Airflow 1.10+)
default_args = { 'owner': 'my-project-owner', 'depends_on_past': False, 'email': ['email1@org.com', 'email2@org.com'], 'email_on_failure': True, 'email_on_retry': True, 'retries': 2, 'retry_delay': datetime.timedelta(minutes=5), 'start_date': datetime.datetime(2020, 4, 1) }
方式2:逗号分隔字符串(兼容旧版本Airflow)
如果使用Airflow 1.9及更早版本,可将多个邮箱用逗号分隔成字符串:
default_args = { # ...其他配置 'email': 'email1@org.com, email2@org.com', # ...其他配置 }
未收到邮件的排查步骤
检查Airflow全局SMTP配置
确认airflow.cfg文件中SMTP相关参数配置正确:smtp_host:SMTP服务器地址(如smtp.example.com)smtp_port:SMTP端口(如587、465)smtp_user/smtp_password:SMTP认证账号密码smtp_mail_from:合法的发件邮箱(需与SMTP服务器认证账号匹配)- 若使用TLS加密,需开启
smtp_starttls = True
验证SMTP连接可用性
在Airflow服务器上运行以下Python脚本,测试SMTP服务是否能正常发送邮件到目标邮箱:import smtplib from email.mime.text import MIMEText msg = MIMEText('Airflow告警邮件测试') msg['Subject'] = 'DAG失败告警测试' msg['From'] = 'airflow@your-org.com' # 对应smtp_mail_from配置 msg['To'] = ', '.join(['email1@org.com', 'email2@org.com']) with smtplib.SMTP('你的SMTP地址', 587) as server: server.starttls() server.login('SMTP账号', 'SMTP密码') server.send_message(msg)若脚本无法发送邮件,说明问题出在SMTP服务配置,与DAG的邮箱列表配置无关。
查看Airflow日志
查看对应DAG任务的执行日志,搜索email关键词,排查是否存在邮件发送错误(如SMTP认证失败、连接超时、收件方拦截等);也可查看Airflow scheduler或webserver的全局日志,定位系统级邮件发送问题。确认任务状态
email_on_failure仅在任务状态为Failed时触发,需确认任务确实进入失败状态(而非Skipped、Upstream Failed等其他状态)。若需覆盖更多场景,可添加email_on_skip: True等参数。
内容的提问来源于stack exchange,提问作者Sekhar
相关产品推荐
相关产品推荐

