[英]How to send multiple emails using EmailOperator in Airflow
我正在嘗試使用 python 循環內的 EmailOperator 將個人電子郵件發送到用戶列表,但目前未發送電子郵件。 dag 沒有返回任何錯誤,這讓我相信 EmailOperator 沒有被調用。
代碼
@dag(schedule_interval=None, tags=['Send multiple emails testing'], default_args=default_args)
def multiple_email_send_test_dag():
@task
def multiple_email_send_test():
email_list = ['user1@gmail.com', 'user2@gmail.com']
for i in range(len(email_list)):
EmailOperator(
task_id=f'send_success_email_test_no_{i}',
to=str(email_list[i]),
subject='Email Header',
html_content= f"""
Hi {email_list[i]}, <br>
<p>This is the body of the email</p>
<br> Thank You. <br>
"""
)
# Dummy Operators
start = DummyOperator(task_id='start')
end = DummyOperator(task_id='end')
# The pipeline
start >> multiple_email_send_test() >> end
dag = multiple_email_send_test_dag()
我錯過了什么?
這是在運算符內部調用運算符的情況。 EmailOperator
沒有執行——它所做的只是初始化 class 的構造函數。實際發送 email 的邏輯在 class 的execute()
function 中。
不要這樣做 - 壞習慣:
首先讓我澄清一下,如果你想讓你當前的代碼工作,你必須調用execute()
有關它的更多信息,請參閱此答案。
@task
def multiple_email_send_test():
email_list = ['user1@gmail.com', 'user2@gmail.com']
for i in range(len(email_list)):
e = EmailOperator(
task_id=f'send_success_email_test_no_{i}',
to=str(email_list[i]),
subject='Email Header',
html_content= f"""
Hi {email_list[i]}, <br>
<p>This is the body of the email</p>
<br> Thank You. <br>
"""
)
e.exectue(dict())
你應該如何解決它:
選項 1:由於EmailOperator
向所有地址發送 1 email,這與您希望的行為不同。 您可以只創建一個自定義運算符IndvidualEmailOpeator
,它接受電子郵件列表並向每個地址發送單獨的郵件。 通過這樣做,您不需要使用PythonOperator
/ 任務裝飾器包裝運算符,因此您可以直接使用您創建的運算符。
選項 2:
請注意, EmailOperator
只是調用send_email ,因此您可以直接使用 function 而無需操作員,從而避免了操作員內部操作員的問題:
@task
def multiple_email_send_test():
from airflow.utils.email import send_email
email_list = ['user1@gmail.com', 'user2@gmail.com']
for i in range(len(email_list)):
send_email(
to=str(email_list[i]),
subject='Email Header',
html_content= f"""
Hi {email_list[i]}, <br>
<p>This is the body of the email</p>
<br> Thank You. <br>
"""
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.