准备腾讯云 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 |
| 自己的邮箱 | |
| SMTP 密码 | |
| 465 |
部署 sendEmail 函数
使用
来创建并部署一个 SCF :
qcloudcli scf CreateFunction \ --functionName "sendEmail" \ --code "@$(cd /data/sendEmail && zip -r - * | base64)" \ --handler "sendEmail.main_handler" \ --description "sendEmail SCF"
如果部署成功,会有
Success 返回,使用
来查询自己账号下面有哪些 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": []
}
}
]
}
其中:
| 字段 | 值 |
|---|---|
| 发件方邮箱 | |
| 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 这个队列发送在示例说明中所定义的消息,来完成邮件发送。
作者:BosyJ
轉載:https://www.cnblogs.com/pejsidney/
本站使用「署名 4.0 国际」创作共享协议,转载请在文章明显位置注明作者及出处。
浙公网安备 33010602011771号