本文為您介紹如何通過PyODPS節點結合獨享資源組的方式,實現郵件外發的需求。
背景信息
DataWorks中的PyODPS節點和Python腳本有所區別,PyODPS節點主要用于和MaxCompute交互進行數據分析處理。DataWorks暫不支持自定義發送郵件功能,您可以通過PyODPS節點結合獨享資源組的方式,實現從MaxCompute讀取數據進行郵件外發的場景需求。
TCP 25端口是默認的郵箱服務端口。出于安全考慮,云服務器ECS的25端口默認受限,獨享資源組無法支持該端口,建議您使用465端口發送郵件。
通過PyODPS節點結合獨享資源組的方式實現郵件外發時,獨享資源組用戶無法登錄到對應的機器,這會導致無法安裝更多Python第三方模塊,實現更多的功能。
操作步驟
新增獨享資源組。
登錄DataWorks控制臺,切換至目標地域后,單擊左側導航欄的資源組,進入資源組列表頁面。
在獨享資源組頁簽下,單擊新建資源組。
配置各項參數,詳情請參見新增和使用Serverless資源組。
說明Serverless資源組和DataWorks工作空間的地域請保持一致。
單擊立即購買。
分配Serverless資源組至相應的工作空間。
單擊相應資源組后的綁定工作空間。
在綁定工作空間操作框中,單擊綁定要分配的工作空間。
進入數據開發頁面。
登錄DataWorks控制臺,切換至目標地域后,單擊左側導航欄的 ,在下拉框中選擇對應工作空間后單擊進入數據開發。
新建PyODPS 2節點。
鼠標懸停至圖標,單擊 。
您也可以打開相應的業務流程,右鍵單擊MaxCompute,選擇
。在新建節點對話框中,輸入名稱,并選擇路徑。
說明節點名稱必須是大小寫字母、中文、數字、下劃線(_)和小數點(.),且不能超過128個字符。
單擊確認。
在PyODPS 2節點的編輯頁面,輸入如下SMTP發送代碼。
import smtplib from email.mime.text import MIMEText from odps import ODPS mail_host = '<yourHost>' //郵箱服務地址 mail_username = '<yourUserName>' //登錄用戶名 mail_password = '<yourPassWord>' //登錄用戶密碼 mail_sender = '<senderAddress>' //發件人郵箱地址 mail_receivers = ['<receiverAddress>'] //收件人郵箱地址 mail_content="" //郵件內容 with o.execute_sql('query_sql').open_reader() as reader: for record in reader: mail_content+=str(record['column_name'])+' '+record['column_name']+'\n' message = MIMEText(mail_content,'plain','utf-8') message['Subject'] = 'mail test' message['From'] = mail_sender message['To'] = mail_receivers[0] try: smtpObj = smtplib.SMTP_SSL(mail_host+':465') smtpObj.login(mail_username,mail_password) smtpObj.sendmail( mail_sender,mail_receivers,message.as_string()) smtpObj.quit() print('mail send success') except smtplib.SMTPException as e: print('mail send error',e)
或者您可以使用以下發送郵件代碼的示例:
import smtplib from email.mime.text import MIMEText from odps import ODPS mail_host = 'username@example.com' //郵箱服務地址 mail_username = 'xxxx' //登錄用戶名 mail_password = 'xxx' //登錄用戶密碼 mail_sender = 'xxx' //發件人郵箱地址 mail_receivers = ['xxx'] //收件人郵箱地址 mail_content="" //郵件內容 with o.execute_sql('query_sql').open_reader() as reader: for record in reader: mail_content+=str(record['column_name'])+' '+record['column_name']+'\n' message = MIMEText(mail_content,'plain','utf-8') message['Subject'] = 'mail test' message['From'] = mail_sender message['To'] = mail_receivers[0] try: smtpObj = smtplib.SMTP() smtpObj.connect(mail_host,587) smtpObj.ehlo() smtpObj.starttls() smtpObj.login(mail_username,mail_password) smtpObj.sendmail( mail_sender,mail_receivers,message.as_string()) smtpObj.quit() print('mail send success') except smtplib.SMTPException as e: print('mail send error',e)
說明使用PyODPS 2節點外發郵件時,PyODPS會將讀取的數據存放至一個臨時文件中,再通過郵件的形式外發。外發郵件時沒有數據條數的限制。
單擊工具欄中的圖標。
提交節點。
重要提交節點前,您需要單擊右側的調度配置,設置重跑屬性和依賴的上游節點。
單擊工具欄中的圖標。
在提交新版本對話框中,輸入備注。
單擊確認。
如果您使用的是標準模式的工作空間,提交節點后,請單擊右上角的發布。詳情請參見發布任務。
修改運行節點的資源組。
在PyODPS 2節點的編輯頁面,單擊右上方的運維。
在左側導航欄,單擊 。
單擊相應節點后的
在修改調度資源組對話框中,選擇資源組。
單擊確定。
測試節點,詳情請參見查看并管理周期任務。