前情提要
不囉嗦,直接上 Code
# 定義 email相關的設內容
# 附件是我們在前情提要中已經下載而來的檔案...
receiver = {
"宜蘭縣":YILAN_RECEIVER,
"高雄市":KAOSHUNG_RECEIVER,
"新北市":NEW_TAPEI_RECEIVER,
"花蓮縣":HUALIEN_RECEIVER
}EMAIL_SETTING_LIST = {
"RECEIVER":receiver,
"SUBJECT":f"{date}均一教育平台{city}使用者紀錄周報",
"CONTENT":f"老師/課督您好:\n\n附件為{date}{city}使用數據\n\n謝謝!",
"ATTACHMENTS":[
f'/opt/airflow/dags/附件一名稱.csv',
f'/opt/airflow/dags/附件二名稱.csv'
]
}from airflow.operators.email import EmailOperator
send_email_for_each_city = EmailOperator(
task_id=f'send_email_to_{city}_{date}',
to = EMAIL["RECEIVER"],
subject = EMAIL["SUBJECT"],
html_content = EMAIL["CONTENT"],
files = EMAIL["ATTACHMENTS"]
)
這邊使用多層的 dictionary,因此可以同時有多個附件,但要注意不同 email平台對於附件檔案大小會有不同限制。
Airflow中已經有好用的 operator可以寄信,我就沒有自己寫底層。
這個 operator也是現行(2022年6月)我認為少數比 pythonoperator好用的,省去設定 smtp和 server的時間。