我的 Serverless 实战 — 5分钟,教你用Serverless每天跟女朋友说1000遍土味情话!

本文正在参与 “100%有奖 | 我的Serverless 实战”征稿活动

活动链接:https://marketing.csdn.net/p/15940c87f66c68188cfe5228cf4a0c3f

 

目录

一、serverless简介

serverless架构

serverless三大应用场景

serverless的优势

二、python实现发送邮件

三、部署到腾讯云serverless,实现自动发送

四、效果展示

五、注意事项


一、serverless简介

serverless,顾名思义,即“无服务器”,提供一个微型的架构,用户不需要部署、配置或管理服务器服务,只需要专注于业务逻辑,代码运行所需要的服务器服务皆由云端平台来提供,因此运维成本很低。

serverless有一个非常出名的产品,就是亚马逊公司在2014年推出的AWS Lambda

  • serverless架构

主要包含两部分:BaasFaas,通常位于云端,使用时不需要关注最底层的服务器。

Baas(后端即服务:Backend as a Service)包括对象存储、云数据库、API网关、消息推送等。

Faas(函数即服务:Functions as a Service)对计算能力进行了抽象,可以在无需管理服务器的情况下响应事件。

  • serverless三大应用场景

场景一:事件触发场景,即有事件触发时才会执行。

场景二:流量突发场景,遇到突发大流量情况时,serverless架构下按需加载,弹性伸缩,节省资源,负载均衡。

场景三:大数据处理场景,用户只需要上传核心代码到函数计算,就可以快速完成整个工作。

  • 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

  • 64
    点赞
  • 18
    收藏
  • 打赏
    打赏
  • 88
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:鲸 设计师:meimeiellie 返回首页
评论 88

打赏作者

张夷陵

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值