AWS MWAA(Apache Airflow)使用EmailOperator发送邮件的配置问题排查及正确配置方案
解决AWS MWAA(Airflow)发送邮件的配置错误问题
咱们一步步拆解你遇到的两个错误,帮你搞定MWAA的邮件发送功能:
第一个错误:socket.gaierror: [Errno -2] Name or service not known
这个错误本质是Airflow找不到你配置的SMTP服务器地址,要么是地址写错了,要么是MWAA的网络环境没法访问它。你可以按以下几点排查:
- 核对
smtp_host配置的域名/IP是否正确:比如用Gmail是smtp.gmail.com,企业邮箱要对应官方SMTP地址,别打错字 - 检查MWAA的网络权限:如果是自定义SMTP服务器,确认MWAA所在VPC的安全组和网络ACL允许出站访问该SMTP服务器的端口(常用587或465)
- 验证域名解析:可以在DAG里加个
BashOperator执行nslookup <你的SMTP地址>,看看能不能正常解析出IP,确认网络连通性
第二个错误:smtplib.SMTPAuthenticationError: (530, b'Must issue a STARTTLS command first')
这个是因为你的SMTP服务器要求先启用TLS加密才能做身份认证,但你之前的配置没开这个开关。接下来给你一套完整的正确配置流程:
一、MWAA环境级配置(在AWS控制台修改)
进入你的MWAA环境,找到Airflow configuration,添加或修改以下参数:
| 参数名 | 说明&示例值 |
|---|---|
smtp_host | SMTP服务器地址,比如smtp.gmail.com、smtp.office365.com |
smtp_port | 对应端口:587(用STARTTLS)或465(用SSL),二选其一 |
smtp_starttls | 设为True(当用587端口时必须开启,对应服务器要求的STARTTLS命令) |
smtp_ssl | 用587时设False,用465时设True |
smtp_user | 用于认证的邮箱账号,比如your-email@gmail.com |
smtp_password | 邮箱的授权码(注意:Gmail、Outlook等不能用登录密码,要生成应用专用密码) |
smtp_mail_from | 发件人邮箱,要和smtp_user一致或符合SMTP服务器规则 |
举个Gmail的配置示例(需要先开启两步验证并生成应用专用密码):
smtp_host: smtp.gmail.com smtp_port: 587 smtp_starttls: True smtp_ssl: False smtp_user: your-email@gmail.com smtp_password: xxxxxxxxxx(你的应用专用密码) smtp_mail_from: your-email@gmail.com
二、DAG中EmailOperator的正确写法
确保你的任务参数没问题,比如:
from airflow import DAG from airflow.operators.email import EmailOperator from datetime import datetime with DAG( dag_id='test_email_dag', start_date=datetime(2022,5,19), schedule_interval=None ) as dag: send_success_email = EmailOperator( task_id='send_completion_email', to=['user1@example.com', 'user2@test.com'], # 支持多个收件人 subject='MWAA流水线执行完成通知', html_content='<p>你的流水线 <strong>{{ dag.dag_id }}</strong> 已成功执行完成!</p>', dag=dag )
额外注意事项
- 如果是企业内部SMTP服务器,要确认是否把MWAA的私有IP段加入了SMTP服务器的访问白名单
- 部分邮箱服务商(比如Outlook)需要开启“允许应用访问”相关设置,具体参考服务商的帮助文档
- 可以先在本地Airflow环境测试配置是否正常,再同步到MWAA,减少云端排查的麻烦
内容的提问来源于stack exchange,提问作者Mubashir Ali
相关产品推荐
相关产品推荐

