Airflow 2.1.4配置Office365 SMTP无凭证邮件告警问题咨询
无凭证Office365 SMTP Airflow配置方案
本方案适配企业内部Office365通过IP白名单实现无凭证发信的场景,操作步骤如下:
前提验证
先确认Airflow调度器、工作节点的出口IP已经加入公司Office365 SMTP的允许发信IP白名单,这是其他项目可无凭证调用的核心前提。
步骤1:补全配置文件空凭证字段
默认Airflow会强制读取smtp_user和smtp_password配置项,哪怕值为空,补全后可消除对应警告:
[smtp] smtp_host = <你的Office365 SMTP地址> smtp_starttls = True smtp_ssl = False smtp_port = 25 smtp_mail_from = <发件人邮箱> smtp_timeout = 30 smtp_retry_limit = 5 # 新增以下两行,留空即可 smtp_user = smtp_password =
步骤2:配置SMTP连接消除弃用警告
Airflow 2.x开始推荐通过连接管理SMTP配置,按以下操作适配无凭证场景:
- 进入Airflow Web UI → 顶部导航
Admin→Connections - 找到
smtp_default连接,点击编辑 - 填写对应参数:
- Host:<你的Office365 SMTP地址>
- Port:25
- Login:留空
- Password:留空
- Extra字段填入:
{"smtp_starttls": true, "smtp_ssl": false}
- 保存后重启Airflow调度器和Webserver服务即可测试发信
备选方案:自定义邮件后端跳过强制认证
如果上述配置仍发送失败,是因为默认send_email_smtp方法会默认执行SMTP身份验证步骤,无凭证场景不需要该逻辑,可自定义轻量邮件后端:
- 在你的Airflow plugins目录下新建
custom_email_backend.py,代码如下:
import smtplib from email.mime.text import MIMEText from airflow.configuration import conf def send_email(to, subject, html_content, **kwargs): smtp_host = conf.get('smtp', 'smtp_host') smtp_port = conf.getint('smtp', 'smtp_port') smtp_starttls = conf.getboolean('smtp', 'smtp_starttls') smtp_mail_from = conf.get('smtp', 'smtp_mail_from') msg = MIMEText(html_content, 'html') msg['Subject'] = subject msg['From'] = smtp_mail_from msg['To'] = ', '.join(to) if isinstance(to, list) else to with smtplib.SMTP(smtp_host, smtp_port) as server: if smtp_starttls: server.starttls() # 跳过身份验证步骤,适配无凭证场景 server.sendmail(smtp_mail_from, to, msg.as_string())
- 修改airflow.cfg的[email]段,更换邮件后端:
[email] email_backend = custom_email_backend.send_email # 其余email配置保持不变
- 重启Airflow相关服务即可生效。
内容的提问来源于stack exchange,提问作者Shark32
相关产品推荐
相关产品推荐

