华为云实现邮件定时推送(纪念日提醒、异地恋惊喜、天气情况、图片分享)及华为云函数工作流(FunctionGraph)、对象存储服务(OBS)介绍
文章目录
项目背景及效果展示
异地恋尤其是异国恋相聚少,从最初的满怀信心到最后的要不咱们算了吧多少情侣败在了异地恋上,缺少了实际的陪伴异地恋更需要情绪价值的提供让对象体会到被关心被爱。本项目利用华为云实现定时的邮件推送,把对象在意的资讯,自己想对对象表达的爱意以邮件的形式每时每刻传达给你的对象。下面是运行的结果分享给大家同时也记录我学习的过程。

项目主要过程
本项目主要的流程如下图所示。OBS起到本地资源存储和调用的功能,函数程序通过调用接口获取OBS中的数据,同时利用时间触发器实现定时发送邮件的功能。

如果你不了解华为云函数工作量FunctionGraph以及对象存储服务OBS,如需要介绍可跳转到相应部分。
接下来直接进入代码编写。
函数程序部分
python邮件群发
- 实现群发添加附件
def Send_email(): # 发送邮件主程序
sender = 'xxxx' # 发送人邮箱
passwd = "****" # 发送人邮箱授权码 (在网上搜索授权码这里不再赘述了)
receivers = 'xxxx' # 收件人邮箱, 多个收件人用,隔开
subject = 'xx每日快讯' # 主题
content = "【美元汇率💵】\n当前美元兑人民币汇率为:"
content += USD2RMB() # 美元转为人民币函数
content += "\n" # 正文
content += Weather_today() # 今日天气函数
content += Sweet_words() # 甜言蜜语函数
content += Count_down() # 倒计时函数
image = Attach_picture() # 添加附件照片函数
msg = MIMEMultipart()
msg.attach(MIMEText(content, 'plain', 'utf-8'))
msg.attach(image)
msg['Subject'] = subject
msg['From'] = sender
msg['TO'] = receivers
s = smtplib.SMTP_SSL('smtp.qq.com', 465) # 这里用的是qq邮箱的SMTP协议
s.login(sender, passwd)
s.sendmail(sender, receivers.split(","), msg.as_string())
天气及其他信息爬取
- 天气信息爬取(爬取美元汇率也类似)
def Weather_today():
url_now = 'https://www.qweather.com/weather/new-york-1E98E.html'
res_now = requests.get(url_now)
content_now = res_now.text
soup_now = BeautifulSoup(content_now, 'html.parser')
# 提取天气信息
temp_h = soup_now.find("span", class_="temp").text
temp_l = soup_now.find("span", class_="temp last").text
abstract = soup_now.find("div", class_="current-abstract").text.strip()
cnt = 0
for i in soup_now.find_all("div", class_="current-live__item")[1]:
cnt += 1
if cnt == 4:
weather = i.text
elif cnt == 6:
air = i.text.strip()
res = "【纽约今日天气☁】\n"+'气温:'+temp_l+ "~"+ temp_h+'\n天气:'+ weather+'\n空气质量:'+ air+ '\n综合评价:'+ abstract
return res
倒计时
def Count_down():
target = datetime.datetime.strptime('2025-01-15 14:23', '%Y-%m-%d %H:%M') # 目标时间
now = datetime.datetime.strptime(datetime.datetime.now().strftime("%Y-%m-%d %H:%M"), '%Y-%m-%d %H:%M')
delt = str(target - now)
day, _, time = delt.split(" ")
hour, minute, _ = time.split(":")
res = '【xxxx倒计时】\n'
res += 'xxxx只剩:' + day + "天" + hour + "小时" + minute + "分钟啦!!!"
return res
图片附件添加及OBS图片调取
- 调用obs的api,首先需要获得obs的ak、sk、和终端节点以认证来进行访问,其方法在后面的OBS介绍中说明。
def Attach_picture():
obsClient = ObsClient(
access_key_id='xxxx', # obs的ak
secret_access_key='xxxx', # obs的sk
server='obs.cn-east-3.myhuaweicloud.com' # 终端节点
)
bucket_name = 'xxxx' # OBS桶的名称
resp = obsClient.getBucketLocation(bucket_name) # 获取桶内信息
object_key = 'xxxx' # 照片对象的键(桶内照片的路径)
response = obsClient.getObject(bucket_name, object_key, loadStreamInMemory=True)
if response.status >= 200 and response.status < 300:
photo_data = response.body.buffer
image = MIMEImage(photo_data, name='xxxx') # 添加照片
image.add_header('Content-Disposition', 'attachment', filename='【xxxx】.jpg')
return image
华为云函数工作流(FunctionGraph)
- 什么是FunctionGraph?
- 官方介绍:FunctionGraph是一项基于事件驱动的函数托管计算服务。 使用FunctionGraph函数,只需编写业务函数代码并设置运行的条件,无需配置和管理服务器等基础设施,函数以弹性、免运维、高可靠的方式运行。 此外,按函数实际执行资源计费,不执行不产生费用。
- 简单来说:就是在程序的基础上提供何时运行的接口(基于事件或时间)
FunctionGraph的使用
- 华为云进入函数工作流界面

函数创建
- 按照要求创建(本项目采用python3.10作为编写函数语言)
- 收费:以前不收费现在要收费了,但你就每天调用个几次的钱都算不出来,相当于免费。

函数编写和调用
- 初始界面
- 配置事件选择空白就行了
- 将自己的代码函数写进入口函数即可
- 改完代码记得部署再进行测试

函数常规设置及触发器
- 进入设置界面

- 常规设置(可更改入口函数和超时时间)

- 触发器设置

- 选择定时触发器(并可根据实际需求设置 Cron表达式使用更灵活)

代码依赖包导入
- 进入依赖包管理创建依赖包(以zip文件压缩上传)

-
再进入函数添加依赖包
华为云对象存储服务(OBS)
- 什么是对象存储服务OBS?
- 官方介绍:对象存储服务(Object Storage Service,OBS)是一个基于对象的海量存储服务,为客户提供海量、安全、高可靠、低成本的数据存储能力。
- 简单来说:就是一个云存储空间
OBS的创建
-
华为云进入对象存储服务界面
-
根据自己的需求创建桶(桶就是一个硬盘的感觉,在下面可以创建各级文件)
OBS文件上传
- 找到创建的桶直接上传对象就行了(可建新的文件夹)
OBS的访问密钥ak、sk以及终端节点获取
-
作用:ak、sk、终端节点在函数工作流使用过程中作为获取权限的密码
-
OBS访问密钥介绍:访问OBS时,通过帐号的访问密钥(AK/SK)来进行鉴权。
- 登录控制台。
- 鼠标指向界面右上角的登录用户名,在下拉列表中单击“我的凭证”。
- 在左侧导航栏单击“访问密钥”。
- 单击“新增访问密钥”,进入“新增访问密钥”页面。
- 通过邮箱、手机或虚拟MFA进行验证,输入对应的验证码。
- 单击“立即下载”,下载访问密钥
-
终端节点获取
写博客不易如果对您有帮助的话可以点赞关注哟,如有任何疑问欢迎讨论交流!
资料参考:华为云官方文档