本文为您介绍如何通过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节点的编辑页面,单击右上方的运维。
在左侧导航栏,单击 。
单击相应节点后的
在修改调度资源组对话框中,选择资源组。
单击确定。
测试节点,详情请参见查看并管理周期任务。