使用CMQ和SCF实现邮件发送
准备腾讯云 API 调用工具
python --version
yum install python-pip -y
安装腾讯云 API 命令行工具
pip install qcloudcli
qcloudcli configure
- Qcloud API SecretId:黏贴您的 SecretId
- Qcloud API SecretKey : 黏贴您的 SecretKey
- Region Id : gz
- Output Formate : 输入 json
qcloudcli cvm DescribeInstances
- 登录腾讯云控制台从云产品中选择
消息服务 CMQ - 点击
主题订阅选项卡,并切换地域为华南地区(广州) - 点击
新建按钮以新建队列,在弹出窗口中写入主题名sendEmailQueue - 点击
创建,完成队列创建。
使用 SCF 调用邮件服务
sendEmail。 首先创建一个目录存放它:mkdir -p /data/sendEmail 编写 sendEmail 函数
# -*- 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"
| 参数 | 值 |
|---|---|
| mail_host | smtp.qq.com |
|
mail_user
|
自己的邮箱 |
|
mail_pass
|
SMTP 密码 |
|
mail_port
|
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 函数
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,点击保存.
测试
- 前往 消息服务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和SCF实现邮件发送的更多相关文章
- .NET开发邮件发送功能的全面教程(含邮件组件源码)
今天,给大家分享的是如何在.NET平台中开发“邮件发送”功能.在网上搜的到的各种资料一般都介绍的比较简单,那今天我想比较细的整理介绍下: 1) 邮件基础理论知识 2) ...
- J2EE 邮件发送那些事儿
距离自己写的关于java邮件发送的第一篇博客已经有很长一段时间了,现在回过头看看.虽然代码质量方面有待提高,整体结构也不怎样,但是基本思路和过程还是比较纯的.现在有空写写J2EE中邮件发送的开发,实际 ...
- 结合ABP源码实现邮件发送功能
1. 前言 2. 实现过程 1. 代码图(重) 2.具体实现 2.1 定义AppSettingNames及AppSettingProvider 2.2 EmailSenderConfiguration ...
- SSH项目里面 忘记密码的邮件发送功能
package com.xxx.util; import java.util.Date; import java.util.Properties; import javax.mail.Address; ...
- [UWP]UWP中获取联系人/邮件发送/SMS消息发送操作
这篇博客将介绍如何在UWP程序中获取联系人/邮件发送/SMS发送的基础操作. 1. 获取联系人 UWP中联系人获取需要引入Windows.ApplicationModel.Contacts名称空间. ...
- java spring 邮件发送
开发中经常会遇到发送邮件进行用户验证,或者其它推送信息的情况,本文基于spring,完成邮件的发送,主要支持普通文本邮件的发送,html文本邮件的发送,带附件的邮件发送,没有实现群发.多个附件发送等需 ...
- Java邮件发送与接收原理
一. 邮件开发涉及到的一些基本概念 1.1.邮件服务器和电子邮箱 要在Internet上提供电子邮件功能,必须有专门的电子邮件服务器.例如现在Internet很多提供邮件服务的厂商:sina.sohu ...
- c#实现邮件发送链接激活
2016-08-24 10:09:52 public void MailSend(string email) { MailMessage MyMail = new MailMessage(); MyM ...
- .Net(C#)最简单的邮件发送案例
一.序言 刚开始接触邮件发送功能的时候,在网上找的资料都挺复杂的!对于新手入门有点难(至少对于本人来说,第一次接触的时候确实不容易).这里就写一段简单的邮箱发送代码,备忘,也给新手一个参考(相关类的字 ...
随机推荐
- jQuery事件绑定汇总(包括一些无法获取事件的问题)
★ $(document).on('click', 'button[name=closeLayerOut2]', function () { ...... }); $(document).on('cl ...
- http协议详谈
scheme - 定义因特网服务的类型.最常见的类型是 httphost - 定义域主机(http 的默认主机是 www)domain - 定义因特网域名,比如 runoob.comport - 定义 ...
- && 和 || 运算
a() && b() :如果执行a()后返回true,则执行b()并返回b的值:如果执行a()后返回false,则整个表达式返回a()的值,b()不执行: a() || b() :如果 ...
- hasura graphql server event trigger 试用
hasura graphql server 是一个很不错的graphql 引擎,当前版本已经支持event triiger 了 使用此功能我们可以方便的集成webhook功能,实现灵活,稳定,快捷的消 ...
- 转 AngularJS 2.0将面向移动应用并放弃旧浏览器
AngularJS团队表示“AngularJS 2.0是移动应用的框架”.该框架将继续支持桌面,但其主要关注点变成了移动领域.它的目标还包括通过转译器支持EcmaScript 6(因为浏览器还不支持E ...
- Asp.net自定义控件系列(一)
最近看到公司某个网站中用到了自定义控件,咋一眼看去,不明白什么玩意, 网上一搜,好像确实不是几句话就能写出强大的自定义控件.好吧,作为一个码农,我决定从基本学起,写一个关于自定义控件学习过程系列. 当 ...
- bzoj 4772 显而易见的数论——拆分数(五边形数定理)+线性筛
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4772 题解:https://blog.csdn.net/Dream_Lolita/artic ...
- Angularjs+ThinkPHP3.2.3集成微信分享JS-SDK实践
先来看看微信分享效果: 在没有集成微信分享js-sdk前是这样的:没有摘要,缩略图任意抓取正文图片 在集成微信分享js-sdk后是这样的:标题,摘要,缩略图自定义 一.下载微信SDK开发包 下 ...
- EF 的一些不常用的功能
1.Add-Migration Initia-IgnoreChanges 生成已有数据库初始化代码 2.update-database -verbose 升级数据库并显示sql语句 3.Update- ...
- 在C#客户端用HTTP上传文件到Java服务器
在C#客户端用HTTP上传文件到Java服务器 来源:http://www.cnblogs.com/AndyDai/p/5135294.html 最近在做C / S 开发,需要在C#客户端上传文件到 ...