Smtp 气流:使用emailoperator时无法分配请求的地址错误

Smtp 气流:使用emailoperator时无法分配请求的地址错误,smtp,airflow,Smtp,Airflow,任务失败或使用EmailOperator时无法接收电子邮件 大家好 即使添加了发送电子邮件所需的参数,我也无法从邮箱接收电子邮件 下面是我的默认参数的样子-- 在这两者之间,我几乎没有什么HttpsOperator任务——它们工作得很好,也很成功,但它们不会发送错误电子邮件(我特意尝试引入一个错误来检查它们是否发送了任何电子邮件)。下面是我的任务示例 t1 = SimpleHttpOperator( task_id='t1',

任务失败或使用EmailOperator时无法接收电子邮件

大家好

即使添加了发送电子邮件所需的参数,我也无法从邮箱接收电子邮件

下面是我的默认参数的样子--

在这两者之间,我几乎没有什么HttpsOperator任务——它们工作得很好,也很成功,但它们不会发送错误电子邮件(我特意尝试引入一个错误来检查它们是否发送了任何电子邮件)。下面是我的任务示例

t1 = SimpleHttpOperator(
                   task_id='t1',
                   http_conn_id='http_waterfall',
                   endpoint='/update_data',
                   method='POST',
                   headers={"Content-Type":"application/json"},
                                   xcom_push=True,
                                   log_response=True,
                   dag=dag,
)

这是我的EmailOperator任务

t2 = EmailOperator(
              dag=dag,
                  task_id="send_email",
                  to='phonrao@gmail.com',
                          subject='Success',
                      html_content="<h3>Success</h3>" 
)

t2 >> t1 

是否有人遇到此问题以及如何解决此问题的建议?

如果您的气流运行在Kubernetes上(由helm chart安装),您应该查看“airflow-worker-0”pod,并确保SMTP_主机或SMTP_用户的环境变量。。。可在配置文件中找到。只需调试,访问airflow worker的容器,然后运行python,然后尝试这些命令以确保其正常工作

import airflow 
airflow.utils.email.send_email('example@gmail.com', 'Airflow TEST HERE', 'This is airflow status success')

通过解析SMTP的环境变量,我也遇到了同样的问题。现在它可以工作了。

您是否已将气流配置为发送电子邮件?您所说的配置到底是什么意思?请详细说明这是my airflow.cfg```[email]email\u backend=airflow.utils.email.send\u email\u smtp[smtp]#如果您希望airflow在重试、失败时发送电子邮件,并且您希望使用airflow.utils.email.send\u email\u smtp功能,如果要使用smtp身份验证#smtp#用户=airflow#smtp#密码=airflow smtp#端口=25 smtp#邮件#发件人=airflow@example.com```你能在你的问题主体中贴出来吗?这给了我一个警告
警告-在config中找不到section/key[smtp/smtp_user],然后出现一个错误
{{models.py:1788}错误-[Errno 99]无法分配请求的地址
如果是配置问题,您能告诉我还需要做什么吗?可能的重复项将为您提供配置电子邮件所需的一切。顺便问一下,您是否设置了smtp主机?
[2019-04-02 15:28:21,305] {{base_task_runner.py:101}} INFO - Job 845: Subtask send_email [2019-04-02 15:28:21,305] {{cli.py:520}} INFO - Running <TaskInstance: schedulerDAG.send_email 2019-04-02T15:23:08.896589+00:00 [running]> on host a47cd79aa987
[2019-04-02 15:28:21,343] {{logging_mixin.py:95}} INFO - [2019-04-02 15:28:21,343] {{configuration.py:255}} WARNING - section/key [smtp/smtp_user] not found in config
[2019-04-02 15:28:21,343] {{models.py:1788}} ERROR - [Errno 99] Cannot assign requested address
Traceback (most recent call last):
  File "/usr/local/lib/python3.6/site-packages/airflow/models.py", line 1657, in _run_raw_task
    result = task_copy.execute(context=context)
  File "/usr/local/lib/python3.6/site-packages/airflow/operators/email_operator.py", line 78, in execute
    mime_subtype=self.mime_subtype, mime_charset=self.mime_charset)
  File "/usr/local/lib/python3.6/site-packages/airflow/utils/email.py", line 55, in send_email
    mime_subtype=mime_subtype, mime_charset=mime_charset, **kwargs)
  File "/usr/local/lib/python3.6/site-packages/airflow/utils/email.py", line 101, in send_email_smtp
    send_MIME_email(smtp_mail_from, recipients, msg, dryrun)
  File "/usr/local/lib/python3.6/site-packages/airflow/utils/email.py", line 121, in send_MIME_email
    s = smtplib.SMTP_SSL(SMTP_HOST, SMTP_PORT) if SMTP_SSL else smtplib.SMTP(SMTP_HOST, SMTP_PORT)
  File "/usr/local/lib/python3.6/smtplib.py", line 251, in __init__
    (code, msg) = self.connect(host, port)
  File "/usr/local/lib/python3.6/smtplib.py", line 336, in connect
    self.sock = self._get_socket(host, port, self.timeout)
  File "/usr/local/lib/python3.6/smtplib.py", line 307, in _get_socket
    self.source_address)
  File "/usr/local/lib/python3.6/socket.py", line 724, in create_connection
    raise err
  File "/usr/local/lib/python3.6/socket.py", line 713, in create_connection
    sock.connect(sa)
OSError: [Errno 99] Cannot assign requested address
[2019-04-02 15:28:21,351] {{models.py:1817}} INFO - All retries failed; marking task as FAILED

 [email]
email_backend = airflow.utils.email.send_email_smtp

[smtp]
# If you want airflow to send emails on retries, failure, and you want to use
# the airflow.utils.email.send_email_smtp function, you have to configure an
# smtp server here
smtp_host = localhost
smtp_starttls = True
smtp_ssl = False
# Uncomment and set the user/pass settings if you want to use SMTP AUTH
# smtp_user = airflow
# smtp_password = airflow
smtp_port = 25
smtp_mail_from = airflow@example.com

import airflow 
airflow.utils.email.send_email('example@gmail.com', 'Airflow TEST HERE', 'This is airflow status success')