本文将为您介绍如何通过PyODPS节点结合独享资源组的方式,实现邮件外发的需求。

背景信息

DataWorks PyODPS节点和Python脚本并不相同,PyODPS节点主要用于和MaxCompute交互进行数据分析处理。您可以通过PyODPS节点结合独享资源组的方式,实现从MaxCompute拉取数据进行邮件外发的场景需求。

说明 TCP 25端口是默认的邮箱服务端口。基于安全考虑,云服务器ECS的25端口默认受限,独享资源组无法支持该端口,建议您使用465端口发送邮件。

通过PyODPS节点+独享资源组的方式实现邮件外发

  1. 登录DataWorks控制台,单击左侧导航栏中的资源组列表
  2. 单击新增独享资源组,新增独享资源组,详情请参见独享资源模式
    说明 独享资源组和DataWorks工作空间的地域保持一致。
  3. 资源组创建成功后,单击相应资源组后的修改归属工作空间,将其指派给相应的工作空间。
  4. 单击左侧导航栏中的工作空间列表,进入工作空间列表页面。单击相应工作空间后的进入数据开发
  5. 数据开发面板新建PyODPS节点,填写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)
  6. 提交PyODPS节点,单击页面右上角运维中心。单击左侧导航栏中的周期任务运维 > 周期任务
  7. 展开任务列表,单击相应任务后的更多 > 修改资源组
  8. 修改资源组对话框中,选择资源组为独享资源组,单击确定
  9. 测试运行PyODPS节点。

总结

通过PyODPS节点+独享资源组的方式实现邮件外发时,独享资源组用户无法登录到对应的机器,导致无法安装更多Python第三方模块,实现更多的功能。