本文为您介绍如何通过PyODPS节点结合独享资源组的方式,实现邮件外发的需求。
背景信息
DataWorks中的PyODPS节点和Python脚本有所区别,PyODPS节点主要用于和MaxCompute交互进行数据分析处理。DataWorks暂不支持自定义发送邮件功能,您可以通过PyODPS节点结合独享资源组的方式,实现从MaxCompute读取数据进行邮件外发的场景需求。
说明 TCP 25端口是默认的邮箱服务端口。出于安全考虑,云服务器ECS的25端口默认受限,独享资源组无法支持该端口,建议您使用465端口发送邮件。
通过PyODPS节点结合独享资源组的方式实现邮件外发时,独享资源组用户无法登录到对应的机器,会导致无法安装更多Python第三方模块,实现更多的功能。
操作步骤
- 新增独享资源组。
- 登录DataWorks控制台。
- 在左侧导航栏,单击资源组列表。
- 在独享资源组页签下,单击新增独享资源组。
- 在新增独享资源组对话框中,配置各项参数,详情请参见新增和使用独享调度资源组。
说明 独享资源组和DataWorks工作空间的地域请保持一致。
- 单击创建。
- 分配独享资源组至相应的工作空间。
- 单击相应资源组后的修改归属工作空间。
- 在修改归属对话框中,选中要分配的工作空间。
- 单击确定。
- 进入数据开发页面。
- 在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="" //邮件内容
o=ODPS('access_key','access_secretkey','default_project_name',endpoint='maxcompute_service_endpoint')
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="" //邮件内容
o=ODPS('access_key','access_secretkey','default_project_name',endpoint='maxcompute_service_endpoint')
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节点的编辑页面,单击右上方的运维。
- 在左侧导航栏,单击。
- 单击页面中间的箭头,展开任务列表。
- 单击相应节点后的
- 在修改资源组对话框中,选择资源组。
- 单击确定。
- 测试节点,详情请参见周期任务运行与管理。