首页 > 解决方案 > 从 GCP 作曲家气流发送电子邮件时出错

问题描述

我正在尝试配置电子邮件但收到以下错误。运行任务时出现以下错误: - 我在 GCP Composer 中使用带有气流 10.3 版本的 Python3 需要帮助。

我的气流.cfg

[email]  
email_backend = airflow.contrib.utils.sendgrid.send_email  

[smtp]  
smtp_host = smtp.gmail.com  
smtp_starttls = True  
smtp_ssl = False  
smtp_user = airflow  
smtp_port = 587  
smtp_password = mypassword  
smtp_mail_from = myemail@gamil.com  

在我的 dag 文件中,我创建了任务:- dag.py 文件:-

from airflow.operators.email_operator import EmailOperator

email_task=EmailOperator(task_id='email_task',to="email@gamil.com", subject="test", html_content="<h1>Most important heading here</h1>", files=None, cc=None, bcc=None, mime_subtype='mixed', mime_charset='us_ascii', dag=dag)

得到错误:

错误 - HTTP 错误 401:未经授权的 python_http_client.exceptions.UnauthorizedError:HTTP 错误 401:未授权

标签: smtpairflowsendgridhttp-status-code-401google-cloud-composer

解决方案


该错误是授权错误,因此您需要检查您是否正确设置了 Sendgrid API 密钥(或密码,如果使用 smtp 服务器)。

根据您的airflow.cfg,在我看来您正在尝试同时使用Sendgrid 和第三方smtp 服务器。

电子邮件标志确定使用哪一个。在这种情况下,标志email_backend = airflow.contrib.utils.sendgrid.send_email指定您将使用 Sendgrid。

要将Sendgrid 配置为您的电子邮件服务器,您需要获取SENDGRID_API_KEY并设置密钥和SENDGRID_MAIL_FROM环境变量。

另一方面,如果您想使用另一个 smtp 服务器,则必须将电子邮件标志更改为email_backend = airflow.utils.email.send_email_smtp. 在这种情况下,您需要覆盖 smtp 用户和密码。


推荐阅读