【云函数】 利用云函数SCF完成每日一封邮件的发送

前言:

从我上一篇文章开始说起《通过Linux计划任务每天定时自动发送天气预报给女神》,很惊喜我写的第一篇文章就能获得一千多次阅读,这篇文章算是对上一篇的另一种实现形式;上篇文章开篇表明了由于本人对于Python的不熟悉所以选择了使用Linux shell来完成这项服务。
那么大半年过去了,自然也是已经渐渐入门Python,所以记录一下这次使用Python+云计算来进行这项邮件服务(这次无需服务器,直接白嫖≧◔◡◔≦)

环境准备:

  1. Python3 IDE;
  2. 腾讯云账户(已开通云函数SCF功能);
  3. 一个开启了smtp服务的邮箱(以qq邮箱为例)

实施:

我们从最核心的Python代码开始讲起,这方面较为基础,可直接跳到云函数部分开始阅读。
如过我们想要使用Python进行邮件的发送,必不可少的两个模块即是:smtplibemail;这两个模块都是自带模块,我们无需额外安装,直接import即可,关于理论的描述,这篇博客上有非常详细的描述,smtplib和email模块详解

本代码亦是基于上文中所提到的进行的功能增加

关于上篇文章所提到的天气预报api需要注册让人觉得很麻烦,那我们这次采用的是无需注册的一言API
【云函数】 利用云函数SCF完成每日一封邮件的发送_第1张图片我们可以看到每一次访问他都会返回不同的句子,也提供了api接口,我们直接来看他的接口文档:【云函数】 利用云函数SCF完成每日一封邮件的发送_第2张图片
请求地址及参数,基于个人喜好,这边我们只用到他的c参数:【云函数】 利用云函数SCF完成每日一封邮件的发送_第3张图片
这边我选择的是d、h、j,那我们就得到了一个完整的请求地址:
https://v1.hitokoto.cn?c=d&c=h&c=j
现在我们直接利用浏览器发送一次get请求:在这里插入图片描述
我们可以看到每个返回值里代表的含义:
【云函数】 利用云函数SCF完成每日一封邮件的发送_第4张图片
接下来我们在Python里进行一次简单的处理就行,这边我们直接引入requests模块(可能需要安装requests):

import requests
url='https://v1.hitokoto.cn?c=h&c=d&h=j'
res=requests.get(url).json()
msg=res['hitokoto']+'\n'+'from:'+res['from'] #这里我们只取内容和来源
print(msg)

这是运行结果:
【云函数】 利用云函数SCF完成每日一封邮件的发送_第5张图片
现在我们要把经过处理完毕之后的结果以文本形式由smtp服务发送出去:这里不在赘述Python如何发送邮件,刚刚提到的文章里有更详细说明,现在直接将代码贴出来:

import requests
import smtplib
from email.header import Header
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart

url='https://v1.hitokoto.cn?c=h&c=d&h=j'
res=requests.get(url).json()
msg=res['hitokoto']+'\n'+'from:'+res['from']
#print(msg)

sender_mail = '[email protected]' #这里填发件人邮箱
sender_pass = 'xxxxxx' #这里填SMTP授权码
to='[email protected]'  #这里填收件人邮箱
# 设置总的邮件体对象,对象类型为mixed
msg_root = MIMEMultipart('mixed')
# 邮件添加的头尾信息等
msg_root['From'] = 'Mr.cheng<>' #发送人描述
msg_root['To'] = to
# 邮件的主题,显示在接收邮件的预览页面
subject = 'Goog night'  #邮件标题
msg_root['subject'] = Header(subject, 'utf-8')

# 构造文本内容
text_info = msg
text_sub = MIMEText(text_info, 'plain', 'utf-8')
msg_root.attach(text_sub)

try:
    sftp_obj =smtplib.SMTP('smtp.qq.com', 25)
    sftp_obj.login(sender_mail, sender_pass)
    sftp_obj.sendmail(sender_mail, to, msg_root.as_string())
    sftp_obj.quit()
    print('sendemail successful!')

except Exception as e:
    print('sendemail failed next is the reason')
    print(e)

运行之后就会收到这封邮件:
【云函数】 利用云函数SCF完成每日一封邮件的发送_第6张图片
如果我想每天晚上定时都能收到这封邮件那该怎么办呢?
我的上一篇解决方案是在购买的云服务器上设定计划任务,可是购买服务器是有成本,对于白嫖党来说可能舍不得(¬‿¬),那么可以进入到本篇文章的核心了,云函数SCF的使用。

云函数SCF

简介:
云函数(Serverless Cloud Function,SCF)是腾讯云为企业和开发者们提供的无服务器执行环境,帮助您在无需购买和管理服务器的情况下运行代码。您只需使用平台支持的语言编写核心代码并设置代码运行的条件,即可在腾讯云基础设施上弹性、安全地运行代码。SCF 是实时文件处理和数据处理等场景下理想的计算平台。
云函数对个人开发者而言,每月有100万次调用的免费额度,对于我们要实现的功能来说绰绰有余,发一次邮件只用调用一次云函数
首先我们在我们的腾讯云账号中开通云函数功能,并进入控制台:
【云函数】 利用云函数SCF完成每日一封邮件的发送_第7张图片
我们直接进入到函数服务中,选择新建函数:【云函数】 利用云函数SCF完成每日一封邮件的发送_第8张图片
给你的函数取个名字,选择Python3.6(目前云函数支持多种语言,Python最高支持3.6):【云函数】 利用云函数SCF完成每日一封邮件的发送_第9张图片
我们会得到这样一个页面:
【云函数】 利用云函数SCF完成每日一封邮件的发送_第10张图片
我们需要注意的是,大部分情况下都是删除了其给定的模板,即其已构造的main_handler函数,这时候我们一定要注意有一个:【云函数】 利用云函数SCF完成每日一封邮件的发送_第11张图片
若是删除了此函数,执行方法就要改为你代码中的主函数方法,这边我们为了方便,直接将我们的代码贴到了他的main_handler函数里面:【云函数】 利用云函数SCF完成每日一封邮件的发送_第12张图片
导入之后我们一定不要忘了需要的模块impot进去,这几个模块云函数里都有自带,若有非自带模块,可参考官方文档进行操作。
那么我们还需要在我们代码的末尾加上return来返回结果,这里因为在ide里面已经测试过代码可靠了,就没有加判断,直接程序执行完后返回数值1:【云函数】 利用云函数SCF完成每日一封邮件的发送_第13张图片
我们点保存并测试:【云函数】 利用云函数SCF完成每日一封邮件的发送_第14张图片
我们可以看到邮件也会顺利发送出来,这时候我们将进行最后一步,创建触发器,我们选择定时触发:【云函数】 利用云函数SCF完成每日一封邮件的发送_第15张图片
【云函数】 利用云函数SCF完成每日一封邮件的发送_第16张图片
触发周期是crond语法,我们设置为
0 0 23 * * * *(每天晚上十一点定时触发此函数)
至此我们每天晚上十一点都会收到一封带着一句话的邮件,提示你该睡觉啦
其实大家可以试试API网关触发器的使用,以后有机会的话再写一篇文章详细介绍
本文结束!

你可能感兴趣的:(Linux,云计算)