准备腾讯云 API 调用工具

使用 API 命令行工具来管理和运行无服务器云函数(SCF),下面就先来安装配置该工具。
安装 Python 和 PIP
Python 环境是腾讯云命令行工具运行时的必要环境,腾讯云的 CentOS 镜像已经包含 Python 的发型版本,可以使用以下命令查看:
python --version
下一步,安装 Python 的包管理工具 PIP:
通过以下命令安装 PIP:
yum install python-pip -y

安装腾讯云 API 命令行工具

命令行工具已经发布到 PIP 中, 可以直接使用 PIP 进行安装. 输入以下命令安装:
pip install qcloudcli
命令行工具提供了一个自动补全的功能,使用以下命令启用
complete -C "$(which qcloud_completer)" qcloudcli
配置 API 密钥

配置命令行工具使用的密钥:
qcloudcli configure
工具会要求您提供:
  • Qcloud API SecretId:黏贴您的 SecretId

     
  • Qcloud API SecretKey : 黏贴您的 SecretKey 
     
  • Region Id : gz
     
  • Output Formate : 输入 json
配置完成以后,测试一下。使用 CLI 获取云主机列表:
qcloudcli cvm DescribeInstances
如果工具成功返回,请进入下一步,如失败,请到 /root/.qcloudcli 目录检查配置是否正确。
创建 CMQ Topic 主题模式队列

  • 登录腾讯云控制台从云产品中选择消息服务 CMQ
  • 点击主题订阅选项卡,并切换地域为华南地区(广州)
  • 点击新建按钮以新建队列,在弹出窗口中写入主题名 sendEmailQueue
  • 点击创建,完成队列创建。

使用 SCF 调用邮件服务

使用 API 创建一个无服务器云函数(以后统称为 SCF)并调用它。
创建函数目录
创建一个 SCF 命名为 sendEmail。 首先创建一个目录存放它:
mkdir -p /data/sendEmail

编写 sendEmail 函数
创建 sendEmail.py , 内容如下:
# -*- coding: utf8 -*-
import json
import smtplib
from email.mime.text import MIMEText
from email.header import Header # 第三方 SMTP 服务
mail_host="smtp.qq.com" #SMTP服务器
mail_user="3473058547@qq.com" #用户名
mail_pass="xxxxxxx" #口令
mail_port=465 #SMTP服务端口 def sendEmail(fromAddr,toAddr,subject,content):
sender = fromAddr
receivers = [toAddr] # 接收邮件,可设置为你的QQ邮箱或者其他邮箱 message = MIMEText(content, 'plain', 'utf-8')
message['From'] = Header(fromAddr, 'utf-8')
message['To'] = Header(toAddr, 'utf-8')
message['Subject'] = Header(subject, 'utf-8') try:
smtpObj = smtplib.SMTP_SSL(mail_host, mail_port)
smtpObj.login(mail_user,mail_pass)
smtpObj.sendmail(sender, receivers, message.as_string())
print("send success")
except smtplib.SMTPException as e:
print(e)
print("Error: send fail") def main_handler(event, context):
cmqMsg = None
if event is not None and "Records" in event.keys():
if len(event["Records"]) >= 1 and "CMQ" in event["Records"][0].keys():
cmqMsgStr = event["Records"][0]["CMQ"]["msgBody"]
cmqMsg = json.loads(cmqMsgStr)
print cmqMsg
sendEmail(cmqMsg['fromAddr'], cmqMsg['toAddr'], cmqMsg['title'], cmqMsg['body'])
return "send email success"

  

点击这里 了解到如何开启 QQ 邮箱的 SMTP 功能. QQ 邮箱的 SMTP 功能开启后,相应的参数如下。
参数
mail_host smtp.qq.com
mail_user

 
自己的邮箱
mail_pass

 
SMTP 密码
mail_port

 
465

部署 sendEmail 函数

使用

CreateFunction API

 

来创建并部署一个 SCF :

qcloudcli scf CreateFunction \
--functionName "sendEmail" \
--code "@$(cd /data/sendEmail && zip -r - * | base64)" \
--handler "sendEmail.main_handler" \
--description "sendEmail SCF"
如果部署成功,会有 Success 返回,使用

ListFunctions

 

来查询自己账号下面有哪些 SCF:

qcloudcli scf ListFunctions
运行 sendEmail 函数
到控制台 查看 SCF 函数。点击名为 sendEmail 的 SCF,进入函数代码功能页面,注意:
属性
执行方法 index.main_handler
测试事件模板 Hello World 事件模板
  • 点击测试 按钮测试该函数,注意在选择测试事件模板的时候Hello World 事件模板的选择如上表所示。
测试代码:
{
"Records": [
{
"CMQ": {
"type": "topic",
"topicOwner":1253970226,
"topicName": "sendEmailQueue",
"subscriptionName":"sendEmailFunction",
"publishTime": "2017-09-25T06:34:00.000Z",
"msgId": "123345346",
"requestId":"123345346",
"msgBody": "{\"fromAddr\":\"3473058547@qq.com\",\"toAddr\":\"3473058547@qq.com\",\"title\":\"hello from scf & cmq\",\"body\":\"email content to send\"}",
"msgTag": []
}
}
]
}

  

其中:
字段
fromAddr

 
发件方邮箱
toAddr 收件方邮箱
title 邮件标题
body 邮件内容
  • 点击运行按钮,观察运行结果。如果在结果中发现返回值和日志中均显示 "send email success",且设置的邮箱收到邮件则此程序运行正常

添加触发器

  • 在刚刚创建的 sendEmail 函数详情页中,选择 触发方式,点击添加触发方式按钮.
  • 选择 CMQ主题订阅触发,CMQ Topoic 选择 sendEmailQueue,点击保存.

测试

此时本 SCF 全部完成!现在可以按以下方式测试设置:
  • 前往 消息服务CMQ,在左侧栏选择主题订阅,从列表中找到创建好的队列 sendEmailQueue,点击此队列提供的操作 发送消息,并在弹出的窗口中输入如下消息:
{
"fromAddr":"xxx@qq.com",
"toAddr":"xxx@qq.com",
"title":"hello from scf & cmq",
"body":"email content to send"
}
您需要根据自身情况修改消息内的内容,包括:
字段
fromAddr 发件邮箱
toAddr 收件邮箱
title 邮件标题
body 邮件内容
  • 无服务器云函数控制台中找到 sendEmail函数,选择日志选项查看函数被调用的日志记录。
  • 登录进入您的收件邮箱,查询是否收到邮件,邮件内容是否正确。
完成测试后,您可以在您的应用代码中嵌入 CMQ SDK,对 sendEmailQueue 这个队列发送在示例说明中所定义的消息,来完成邮件发送。

使用CMQ和SCF实现邮件发送的更多相关文章

  1. .NET开发邮件发送功能的全面教程(含邮件组件源码)

    今天,给大家分享的是如何在.NET平台中开发“邮件发送”功能.在网上搜的到的各种资料一般都介绍的比较简单,那今天我想比较细的整理介绍下: 1)         邮件基础理论知识 2)         ...

  2. J2EE 邮件发送那些事儿

    距离自己写的关于java邮件发送的第一篇博客已经有很长一段时间了,现在回过头看看.虽然代码质量方面有待提高,整体结构也不怎样,但是基本思路和过程还是比较纯的.现在有空写写J2EE中邮件发送的开发,实际 ...

  3. 结合ABP源码实现邮件发送功能

    1. 前言 2. 实现过程 1. 代码图(重) 2.具体实现 2.1 定义AppSettingNames及AppSettingProvider 2.2 EmailSenderConfiguration ...

  4. SSH项目里面 忘记密码的邮件发送功能

    package com.xxx.util; import java.util.Date; import java.util.Properties; import javax.mail.Address; ...

  5. [UWP]UWP中获取联系人/邮件发送/SMS消息发送操作

    这篇博客将介绍如何在UWP程序中获取联系人/邮件发送/SMS发送的基础操作. 1. 获取联系人 UWP中联系人获取需要引入Windows.ApplicationModel.Contacts名称空间. ...

  6. java spring 邮件发送

    开发中经常会遇到发送邮件进行用户验证,或者其它推送信息的情况,本文基于spring,完成邮件的发送,主要支持普通文本邮件的发送,html文本邮件的发送,带附件的邮件发送,没有实现群发.多个附件发送等需 ...

  7. Java邮件发送与接收原理

    一. 邮件开发涉及到的一些基本概念 1.1.邮件服务器和电子邮箱 要在Internet上提供电子邮件功能,必须有专门的电子邮件服务器.例如现在Internet很多提供邮件服务的厂商:sina.sohu ...

  8. c#实现邮件发送链接激活

    2016-08-24 10:09:52 public void MailSend(string email) { MailMessage MyMail = new MailMessage(); MyM ...

  9. .Net(C#)最简单的邮件发送案例

    一.序言 刚开始接触邮件发送功能的时候,在网上找的资料都挺复杂的!对于新手入门有点难(至少对于本人来说,第一次接触的时候确实不容易).这里就写一段简单的邮箱发送代码,备忘,也给新手一个参考(相关类的字 ...

随机推荐

  1. mac 常用开发软件列表

    toolbox app jetbrains系开发工具箱,包含了phpstorm idea等开发工具 Postman 接口调试工具,有插件版和单独的app两种.类似paw Sublime 文本编辑器,类 ...

  2. Windows Server2008 R2性能优化方法

    经常使用的是Windows 2008R2企业版的服务器,简单总结一下性能优化的方法 ========================================================== ...

  3. 利用GPU改善程序性能的一点心得

    1.     硬件方面 a. 流处理器个数    Gpu内部的计算单元个数,决定分析模块实时性的关键因素.    实测效果: gtx760  1152个 Gtx960  1024个 单路1080p运动 ...

  4. BL老师的建议,数学不好的,大数据一票否决--后赋从java转大数据

    __________________________ 作者:我是蛋蛋链接:https://www.zhihu.com/question/59593387/answer/167235075来源:知乎著作 ...

  5. TensorFlow 官方文档中文版学习

    TensorFlow 官方文档中文版 地址:http://wiki.jikexueyuan.com/project/tensorflow-zh/

  6. Postman 常用测试结果验证及使用技巧

    Postman的test本质上是JavaScript代码,通过我们编写测试代码,每一个tests返回True,或是False.每一个tests实际上就是一个测试用例 官方文档给出了很多验证方式,我们通 ...

  7. c++中的流

    streambuf类为缓冲区提供内存,并提供了用于填充缓冲区,访问缓冲区,刷新新缓冲区和管理缓冲区内存的类方法. ios_base类表示流的一般特征,如是否可读,是二进制还是文本流等. ios类基于i ...

  8. ThinkPHP 的一个神秘版本 ThinkPHP 1.2

    ThinkPHP 的一个神秘版本 ThinkPHP 1.2 询问过 ThinkPHP 官网的小伙伴都知道,偶尔 ThinkPHP 故障时会出现 ThinkPHP 1.2(下次看到就截图下来). 但是我 ...

  9. spring initializr 创建项目时,依赖对应的 artifactId

    选择各个依赖时,对应的 artifactId 选择的依赖 artifactId名字 不选择依赖,默认包含的artifactId spring-boot-starter.spring-boot-star ...

  10. QString 和char数组转换(转)

    在qt开发过程中经常遇到QString类和char数组进行转换,在此记录一下: QString->char数组 1 2 3 QString str="12fff"; QByt ...