准备腾讯云 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 , 内容如下:
sendMail.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 = fromAddrreceivers = [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 = Noneif 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 cmqMsgsendEmail(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 这个队列发送在示例说明中所定义的消息,来完成邮件发送。

转载于:https://www.cnblogs.com/pejsidney/p/8624381.html

使用CMQ和SCF实现邮件发送相关推荐

  1. 邮件发送类,支持HTML格式,支持优先级设置

    www.chinacs.net  2002-5-9  中文C#技术站 邮件发送类,支持HTML格式,支持优先级设置.通过SOCKET类实现的 using System; using System.Te ...

  2. 使用Spring实现邮件发送

    2019独角兽企业重金招聘Python工程师标准>>> 这两天写个小程序需要使用邮件发送的功能,在网上搜索了一帮子文章,感觉还是使用Spring的邮件发送功能比较方便,哈哈,懒人就这 ...

  3. python邮件发送哪个好_最全总结!聊聊 Python 发送邮件的几种方式

    1. 前言 邮件,作为最正式规范的沟通方式,在日常办公过程中经常被用到 我们都知道 Python内置了对 SMTP 的支持,可以发送纯文本.富文本.HTML 等格式的邮件 本文将聊聊利用 Python ...

  4. CentOS搭建msmtp+mutt实现邮件发送

    1:搭建配置msmtp 下载msmtp包: 官方地址:http://msmtp.sourceforge.net/download.html 编译,安装(官方下载的包为tar.xz格式): #xz -d ...

  5. 利用phpmailer类邮件发送

    <?phprequire("class.phpmailer.php"); //下载的文件必须放在该文件所在目录$mail = new PHPMailer(); //建立邮件发 ...

  6. python 数据库查询结果邮件提醒_Python实现的查询mysql数据库并通过邮件发送信息功能...

    本文实例讲述了Python实现的查询mysql数据库并通过邮件发送信息功能.分享给大家供大家参考,具体如下: 这里使用Python查询mysql数据库,并通过邮件发送宕机信息. Python代码如下: ...

  7. JavaMail邮件发送不成功的那些坑人情况及分析说明

    前言   JavaMail的使用本身并不难,网上有不少案例,简单易懂,而且有详细的中文注解.但是由于JavaMail的机制设置不够完善,特别是异常出错时的参考信息太少,给初学者造成了不少麻烦,而我就是 ...

  8. 邮件发送 --- 纯Java、JavaWeb、Spring三种实现方式

    邮件发送学习笔记~ 一.邮件发送介绍 要在网络上实现邮件功能,必须要有专门的邮件服务器! 这些邮件服务器类似于现实生活中的邮局,它主要负责接收用户投递过来的邮件,并把邮件投递到邮件接收者的电子邮箱中! ...

  9. 使用UTL_MAIL包实现存储过程邮件发送(转)

    邮件通知预警和提示在当前系统中已经是一个比较常见的功能.各类型语言分别针对邮件提供了功能包和API接口方法,本篇介绍如何在PL/SQL代码中使用UTL_MAIL工具包发送邮件,同时还介绍配置中注意的细 ...

最新文章

  1. python中的构造函数和构造函数和析构函数的作用
  2. git工作区和缓存区概念理解
  3. php ci session获取值,CI3.1 Session类取不到值的问题
  4. ubuntu apache配置负载均衡篇(一)
  5. unity打包android 乱码,Unity3d发布IOS9应用时出现中文乱码的解决方法
  6. Linux基本命令解析(1)
  7. 【linux】知识点总结
  8. 给model模型传数组参数
  9. 转发技术风雨三十年,你经历过……
  10. autoconfig
  11. PHP 实现发送短信验证码(CI框架)
  12. java short相加_为什么两个short类型相加会自动提升为int?
  13. 移动硬盘坏点测试软件,移动硬盘坏道检测工具
  14. 爱学术,让论文写作不再难!
  15. ubuntu18.04下EnlightenGAN运行过程记录
  16. 云轴科技 ZStack 与和信创天完成兼容性认证,打造稳定安全的桌面云!
  17. wps横向计算机在哪里,Win7系统如何横向打印WPS文件
  18. PPT学习资源和实用技巧
  19. PMP考试时间推迟了,如何办理退缓考?
  20. 不知道天气咋样?一起用Python爬取天气数据分析告诉你

热门文章

  1. 添加子命令(Adding subcommands)
  2. Heroku搭建简单网站
  3. web应用程序安全工具和资源(漏洞银行 收集整理)
  4. 常用等价无穷小及例题
  5. 【实操篇】Linux定时任务调度
  6. 永洪科技与润乾软件达成战略合作,共同开拓大数据驱动
  7. 在uni-app里面怎么引入阿里矢量图标库?
  8. 【Nodejs 】Nodejs常见全局对象之模块对象全解析_02
  9. pandas基本使用方法示例
  10. [深度学习论文学习笔记]多模态融合的深度学习脑肿瘤检测方法