通过函数计算节点发送邮件

本文为您介绍如何在DataWorks中通过函数计算节点调用函数计算服务,并实现发送邮件功能。

背景介绍

DataWorks当前已经支持通过函数计算节点调用函数计算服务,在函数计算服务中可以自定义各种功能,最终可通过DataWorks进行调用。

前提条件

使用限制

  • 功能限制

    DataWorks目前仅支持调用事件函数,不支持调用HTTP函数。因此,若要在DataWorks周期性调度处理事件函数,则在创建函数时,需要创建用于处理事件请求的事件函数。更多函数类型介绍,详情请参见函数类型

  • 地域限制

    DataWorks目前仅支持华东1(杭州)、华东2(上海)、华北2(北京)、华北3(张家口)、华南1(深圳)、中国香港、新加坡、英国(伦敦)、美国(硅谷)、美国(弗吉尼亚)、德国(法兰克福)地域的工作空间使用函数计算功能。

步骤一:创建函数

  1. 登录函数计算控制台,在顶部导航栏切换至目标地域。

  2. 在左侧导航栏,单击函数

  3. 函数页面单击创建函数

  4. 选择事件函数并配置函数信息。

    image

    参数

    描述

    函数名称

    输入函数名称。本文示例为:send-mail-fc

    运行环境

    本文使用Python 3.9

    代码上传方式

    本文选择使用示例代码并使用Hello, world! 示例

    高级配置环境变量可根据实际情况进行设置。详情可参见创建函数

  5. 单击创建,完成函数创建,进入函数详情的代码页面。

    image

  6. 编辑index.py,输入业务逻辑代码。本文以发送邮件为例,代码如下:

    重要
    • 以下示例代码中的mail_hostmail_portmail_usernamemail_passwordmail_sendermail_receivers参数请根据实际情况设置。

    • 电子邮件的账号必须开启SMTP服务。某些电子邮件服务提供商默认未开启,需自行检查并开启。例如:163邮箱默认就未开启SMTP服务。

    • 某些电子邮件服务提供商基于安全原因,可能会使用一种类似授权码的专用密码,用于三方邮件客户端进行登录。这时mail_password需设置为授权码而不是账号密码。例如:163邮箱就存在授权码,且三方登录时必须使用授权码来作为密码登录。

    # -*- coding: utf-8 -*-
    import logging
    import json
    import smtplib
    from email.mime.text import MIMEText
    
    def handler(event, context):
      evts = json.loads(event)
    
      logger = logging.getLogger()
      logger.info('event: %s', evts)
      mail_host = 'smtp.163.com'                 ## 邮箱服务地址
      mail_port = '465';                         ## 邮箱smtp协议端口号
      mail_username = 'sender_****@163.com'      ## 登录用户名
      mail_password = 'EWEL******KRU'            ## 登录用户密码
      mail_sender = 'sender_****@163.com'        ## 发件人邮箱地址
      mail_receivers = ['receiver_****@163.com'] ## 收件人邮箱地址
    
      mail_content=generate_mail_content(evts)
      message = MIMEText(mail_content,'plain','utf-8')
      message['Subject'] = 'mail test'
      message['From'] = mail_sender
      message['To'] = mail_receivers[0]
      smtpObj = smtplib.SMTP_SSL(mail_host + ':' + mail_port)
      smtpObj.login(mail_username,mail_password)
      smtpObj.sendmail(mail_sender,mail_receivers,message.as_string())
      smtpObj.quit()
      return 'mail send success'
    
    def generate_mail_content(evt):
      mail_content=''
      if 'msg' in evt.keys():
          mail_content=evt['msg']
      else:
          logger = logging.getLogger()
          logger.error('msg not present in event')
      '''
      此处可增加处理邮件内容读取逻辑
      '''
      return mail_content
  7. 单击部署代码按钮。

  8. 单击测试函数右侧下拉箭头image,在弹出的菜单中单击配置测试参数,输入测试参数后单击确定按钮。

    image.png

    事件内容输入:

    {
        "msg": "This is a test message"
    }
  9. 单击测试函数即可完成测试。

    image

  10. 检查收件人的邮箱中是否收到邮件。

    说明

    某些电子邮件服务器可能会将未知发件人识别为垃圾邮件从而进行拦截,因此若您未在收件箱中找到测试邮件,则需到垃圾邮件中进行查找。

步骤二:在DataWorks中创建并配置函数计算节点

  1. 登录DataWorks控制台

  2. 单击左侧导航栏中的工作空间。进入工作空间列表页面。

  3. 将页面顶部导航栏的地域列表切换为步骤一:创建函数中指定的地域。

  4. 工作空间列表中单击目标工作空间名称,进入工作空间详情页面。若您在当前地域下无工作空间,则需创建一个工作空间,详情可参见创建工作空间

  5. 单击左侧导航栏中的数据建模与开发下的数据开发,进入DataWorks数据开发页面。

  6. 单击目标业务流程名称,在业务流程中,右击通用,选择新建节点 > 函数计算。在创建节点弹出框中输入节点名称并单击确定按钮,完成函数计算节点的创建。image.png

  7. 设置函数计算节点参数。

    image.png

    参数

    描述

    选择服务

    选择步骤一:创建函数中创建的服务。本文为:send-mail-service。如需新建,详情请参见快速创建函数

    选择版本或别名

    选择后续调用函数时所使用的服务版本或别名。默认版本为LATEST。本文选择默认版本

    • 服务版本

      函数计算提供服务级别的版本控制功能,支持您为自己的服务发布一个或多个版本。当发布版本时,函数计算会为服务生成快照,包括服务的配置、服务内的函数代码及函数配置,但不包括触发器,并自动分配一个版本号与其关联,以供后续使用。发布版本,详情请参见发布版本

    • 版本别名

      函数计算支持为服务的版本创建别名。别名用于指向特定版本,您可利用别名轻松实现发布、回滚以及灰度发布等功能。别名无法脱离服务或版本单独存在。使用别名访问服务或函数时,函数计算会将别名解析为其指向的版本,调用方无需了解别名指向的具体版本。创建别名,详情请参见创建别名

    选择函数

    选择步骤一:创建函数中创建的函数。本文为:send-mail-fc。如需新建,详情请参见管理函数

    说明

    DataWorks目前仅支持调用事件函数,不支持调用HTTP函数。因此,若要在DataWorks周期性调度处理事件函数,则在创建函数时,需要创建用于处理事件请求的事件函数。更多函数类型介绍,详情请参见函数类型

    调用方式

    本文选择同步。调用方式详情可参见函数调用

    • 同步调用:该方式事件将直接触发函数,函数计算会运行该函数并等待响应,当函数调用完成后,函数计算直接返回执行结果。

    • 异步调用:该方式函数计算会将事件请求先持久化后再立即返回响应,而不是等待请求执行完成后才返回响应。

      • 若函数存在耗时较长、资源消耗较大或易错逻辑,可采用异步调用,提升程序响应速度,更加可靠地应对突发流量。

      • 运行时长超过1小时的函数计算任务,请使用异步调用。

    变量

    调用函数的参数。本文示例如下:

    {
        "msg": "This is a test message from dataworks!"
    }
  8. 可选:调试运行函数计算节点。节点配置完成后,您可单击运行图标,指定任务运行的资源组并为代码变量赋值常量进行调试运行,测试节点代码逻辑是否正确。

  9. 配置节点的周期调度属性。DataWorks提供的调度参数,可实现调度场景下代码动态传参。更多调度参数的配置,请参见调度参数支持的格式。更多调度属性,请参见任务调度属性配置概述

步骤三:提交并发布节点

函数计算节点需要提交发布至生产环境后,才会自动调度运行。

  1. 保存并提交节点。

    单击工具栏中的保存提交图标,保存并提交节点。提交节点时,请根据提示输入变更描述,并根据需要选择是否进行代码评审及冒烟测试。

    说明
    • 您需在调度配置中设置节点的重跑属性依赖的上游节点,才可以提交节点。

    • 开启代码评审后,开发人员提交的节点代码必须通过评审人员的审核才可发布,详情请参见代码评审

    • 为保障调度节点任务执行符合预期,建议您在发布前对任务进行冒烟测试,详情请参见冒烟测试

  2. 可选:发布节点。

    如果您使用的是标准模式的工作空间,提交成功后,需单击右上方的发布,发布节点。相关介绍请参见标准模式的工作空间发布任务

后续步骤

相关文档

函数计算节点