最佳实践

创建邮件发送函数并测试

最近更新时间:2020-07-07 16:35:32

操作步骤

创建 CMQ 主题订阅

  1. 登录 消息服务CMQ 控制台
  2. 在【主题订阅】服务下单击【新建】,选择北京地域,命名为 SendEmail,主题属性保持默认即可。

创建云函数 SCF:SendEmail

  1. 登录云函数控制台,选择左侧导航栏中的【函数服务】。
  2. 在“函数服务”页面上方选择北京地域,并单击【新建】进入新建函数页面。
    设置以下参数信息,并单击【下一步】。如下图所示:
    • 函数名称:命名为 “SendEmail”。
    • 运行环境:选择 “Python 2.7”。
    • 创建方式:选择【模板函数】。
    • 模糊搜索:输入“通过消息队列发送邮件”,并进行搜索。
      单击模板中的【查看详情】,即可在弹出的“模板详情”窗口中查看相关信息,支持下载操作。
  3. 保持默认配置,单击【完成】,完成函数的创建。
  4. 在【函数代码】页签中,修改代码中的“第三方 SMTP 服务”。参数 mail_host、mail_user、mail_pass、mail_port 需要根据实际发送的邮箱或邮件服务器来配置,本示例我们以 QQ 邮箱为例进行说配置。
    说明:

    您可以从 QQ邮箱帮助中心 了解到如何开启 QQ 邮箱的 SMTP 功能。QQ 邮箱的 SMTP 功能开启后,相应的参数如下。

    • mail_host:SMTP 服务器地址,即 smtp.qq.com。
    • mail_user:登录用户名为您的邮箱地址,例如 123******@qq.com。
    • mail_pass:您在开启 SMTP 功能时设置的密码。
    • mail_port:服务器登录端口,由于 QQ 邮箱强制要求 SSL 登录,端口固定为465,同时代码中使用 smtplib.SMTP_SSL 创建 SSL 的 SMTP 连接。

测试 CMQ 主题和云函数的连通性

测试邮件发送的正确性

  1. 完成 SendEmail 函数创建后,进入在函数详情页,在函数代码界面的下方,单击【更换】。
  2. 选择 CMQ Topic 事件模板,并将 测试代码 复制粘贴到模板的代码框中,单击【测试运行】,查看函数运行日志。
    其中 msgBody 字段内的 fromAddr 字段和 toAdd 字段,需要根据您自身邮箱地址进行修改,建议修改为相同地址,自身邮箱向自身邮箱内发送邮件,以便测试邮件发送的正确性。
    测试代码
    {
    "Records": [
     {
       "CMQ": {
         "type": "topic",
         "topicOwner":1253970226,
         "topicName": "sendEmailQueue",
         "subscriptionName":"sendEmailFunction",
         "publishTime": "2017-09-25T06:34:00.000Z",
         "msgId": "123345346",
         "requestId":"123345346",
         "msgBody": "{\"fromAddr\":\"*****@qq.com\",\"toAddr\":\"****@qq.com\",\"title\":\"hello from scf & cmq\",\"body\":\"email content to send\"}",
         "msgTag": ""
       }
     }
    ]
    }
    测试结果
    测试成功结果。如下图所示:

测试 CMQ 主题与云函数的联动

邮件测试成功后,继续测试 CMQ 主题和云函数的联动。

  1. 切换至 消息服务 CMQ 控制台
  2. 在主题订阅页面,单击主题 SendEmail 对应的【发送消息】。如下图所示:
  3. 在弹出的对话框中,输入如下消息内容后,单击【发送】。
    {
    "fromAddr":"*****@qq.com",
    "toAddr":"*****@qq.com",
    "title":"hello from scf & cmq",
    "body":"email content to send"
    }
    说明:

    其中 msgBody 字段内的 fromAddr 字段和 toAdd 字段,需要根据您自身邮箱地址进行修改。

  4. 切换至 云函数控制台,查看 SendEmail 函数的执行日志,并前往邮箱查看是否收到了邮件。

完成测试后,您可以在您的应用代码中嵌入 CMQ SDK,对 SendEmail 这个主题队列发送消息,来完成邮件发送。

目录