本文正在参与 “100%有奖 | 我的Serverless 实战”征稿活动
活动链接:https://marketing.csdn.net/p/15940c87f66c68188cfe5228cf4a0c3f
目录
一、serverless简介
serverless,顾名思义,即“无服务器”,提供一个微型的架构,用户不需要部署、配置或管理服务器服务,只需要专注于业务逻辑,代码运行所需要的服务器服务皆由云端平台来提供,因此运维成本很低。
serverless有一个非常出名的产品,就是亚马逊公司在2014年推出的AWS Lambda。
主要包含两部分:Baas和Faas,通常位于云端,使用时不需要关注最底层的服务器。
Baas(后端即服务:Backend as a Service)包括对象存储、云数据库、API网关、消息推送等。
Faas(函数即服务:Functions as a Service)对计算能力进行了抽象,可以在无需管理服务器的情况下响应事件。
场景一:事件触发场景,即有事件触发时才会执行。
场景二:流量突发场景,遇到突发大流量情况时,serverless架构下按需加载,弹性伸缩,节省资源,负载均衡。
场景三:大数据处理场景,用户只需要上传核心代码到函数计算,就可以快速完成整个工作。
传统架构下,面对大流量场景,需要增加机器或者对机器升级,运维较为困难。面对高峰和低谷,无法做到按需使用,成本较高。
serverless架构下,开发者只需专注代码开发,无需在各个云资源控制台手动开通服务和配置管理,并能够根据业务请求自动进行弹性伸缩;支持用户按需付费,成本较低;开发周期快,很大程度上提升了开发、部署的效率。
具体可以查看这里的文档 https://www.serverless.com/cn/framework/docs/
二、python实现发送邮件
-
import io
-
import sys
-
import time
-
import datetime
-
import random
-
import requests
-
-
from email.mime.text
import MIMEText
-
from email.header
import Header
-
import smtplib
-
-
import logging
-
logger = logging.getLogger()
-
logger.setLevel(logging.INFO)
-
-
mail_host =
"smtp.qq.com"
-
mail_user =
"*********@qq.com"
#此处填你的邮箱
-
mail_girl =
"*********@qq.com"
#女朋友的邮箱
-
mail_pass =
"*************"
#邮箱密码,默认POP3/SMTP服务是关闭的,需要在设置中开启查看
-
name_gf =
"***"
#女朋友的名字
-
mail_port =
465
-
#sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf8')
-
-
def getWeather():
-
r = requests.get(
-
'http://wthrcdn.etouch.cn/weather_mini?city=%E5%8C%97%E4%BA%AC')
-
if
'OK'
in r.text:
-
r = r.json()[
'data']
-
tip = r[
'ganmao']
-
temperature = r[
'wendu']
-
weather = r[
'forecast'][
0][
'type']
-
return
f'天气:{weather} 当前温度:{temperature}\n{tip}'
-
return
'获取天气失败:('
-
-
def getTime():
-
today = datetime.datetime.now()+datetime.timedelta(hours=+
8)
-
t = today.timetuple()
-
return
f'今天是{t.tm_year}年{t.tm_mon}月{t.tm_mday}日 星期{t.tm_wday+1}'
-
-
def getSoup():
-
-
return{
-
0:
'你知道你和星星有什么区别吗?星星在天上,你在我心里。',
-
1:
'这是我的手背,这是我的脚背,你是我的宝贝。',
-
2:
'莫文蔚的阴天,孙燕姿的雨天,周杰伦的晴天,都不如你和我聊天。',
-
3:
'我觉得你好像一款游戏。什么游戏?我的世界。',
-
4:
'你今天特别讨厌,讨人喜欢和百看不厌。',
-
5:
'你上辈子一定是碳酸饮料吧,为什么我一看到你就能开心的冒泡。',
-
6:
'我对你的爱,就像拖拉机上山,轰轰烈烈……',
-
}.get(random.randint(
0,
6),
'false')
-
-
def morning():
-
return
'\n'.join([getTime(), getSoup(), getWeather()])
-
-
def night():
-
return
'\n'.join([getSoup(),
f'晚安,{name_gf},梦里见!'])
-
-
def getTimeX():
-
t = int(time.strftime(
"%H", time.localtime()))+
8
-
if t >
24:
-
t = t
-24
-
return
'morning'
if t <
11
else (
'noon'
if t <
17
else
'afterNoon')
-
-
def main_handler(event, context):
-
smtpObj = smtplib.SMTP_SSL(mail_host, mail_port)
-
print(
'enter')
-
try:
-
smtpObj.login(mail_user, mail_pass)
-
-
except smtplib.SMTPException
as e:
-
logger.info(e)
-
return
False
-
content = night()
if getTimeX() ==
'afterNoon'
else morning()
-
message = MIMEText(content,
'plain',
'utf-8')
-
message[
'From'] = mail_user
-
message[
'To'] = mail_girl
-
message[
'Subject'] =
f'早安,{name_gf}'
if getTimeX() !=
'afterNoon'
else
'晚安,{name_gf}'
-
try:
-
smtpObj.sendmail(mail_user, [mail_girl], message.as_string())
-
logger.info(
"发送成功")
-
except smtplib.SMTPException
as e:
-
logger.info(e)
-
logger.info(
"发送失败")
-
logger.info(content)
-
return content
三、部署到腾讯云serverless,实现自动发送
1.注册腾讯云账号腾讯云 - 产业智变 云启未来 (tencent.com)
2.找到云函数的管理控制台->函数服务->新建->自定义创建
3.将函数代码粘贴到index.py中,单击完成。
4.点击部署,部署到腾讯云
5.找到触发管理,创建触发器,设置定时触发
四、效果展示
马上就要到520了,快用起来吧!
五、注意事项
同时发给多个人的时候,一定要注意创建一个新的函数。
为什么呢?
因为我在运行过程中出现了一个error,收到的邮件是这个样子
一堆“早安,小红”里面突然混进了一个“早安,小白”。
查看了一下日志,是一个超时错误。调用失败后自动运行了前一个调用成功的代码,而我发送的时候只改了女朋友的名字。。
(幸好是在测试的时候发现的,否则又将是一个翻车现场。
本文正在参与 “100%有奖 | 我的Serverless 实战”征稿活动
活动链接:https://marketing.csdn.net/p/15940c87f66c68188cfe5228cf4a0c3f
转载:https://blog.csdn.net/Liuyaoyun/article/details/116497400