smtp - 从 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:未授权
解决方案
该错误是授权错误,因此您需要检查您是否正确设置了 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 用户和密码。
推荐阅读
- r - 解释具有不同标记的点之间的空间关系(多类型点模式) - 使用 spatstat - 并更好地可视化结果
- node.js - 我如何在 nodejs 中加密 jwt 有效负载内容
- python - 使用来自另一个 DataFrame 的值进行索引
- javascript - 尝试在 JS 中使用单独的图像文件
- reactjs - 使用上下文从父组件向子组件传递数据的反应不起作用
- java - Androidstudio Installed App from APK 在手机上出现两次
- ruby - 为什么这个 Ruby 案例块不评估为真?
- android - 如何将 .mp4 转换为 HLS(.m3u8) 格式
- r - 如何用两个 y 轴绘制这些数据?
- c - C检查文件是否具有可执行权限返回false