Python两行代码实现发送邮箱

背景

今天发现了一个第三方库yagmail,该库可以帮助我们用Python实现发送邮件这个功能,只需要两行就可以发送文本内容哟,大大减少了我们的代码量。但是单纯亮代码感觉没啥意思,所以就做个小案例:爬取天气预报,并将数据发送给自己的QQ邮箱,Let’s go~

数据来源

这里有一个天气预报的接口:
http://wthrcdn.etouch.cn/weather_mini?city=龙岩

返回的数据是json格式的,这样我们就能很轻易的提取数据啦

安装所需要的库

  1. requests:是一个第三方库,用于向服务器发送请求以及获取响应
  2. yagmail:也是第三方库,用于发送邮件
  3. re:第三方库,用于提取数据

使用pip包管理器进行安装:pip install 模块名

下载原始数据

使用第三方库>>requests来下载json数据,使用前需要提前安装好哦~

import requests
def WeatherSpider():
	"""
		下载天气预报的数据
	"""
	url = 'http://wthrcdn.etouch.cn/weather_mini?city=龙岩'
	response = requests.get(url)
	data = response.json()
	print(data)
	return data
  1. 使用get()方法下载数据,需要传入要访问的url
  2. get获取到的数据是文本格式,我们要将其转化为json格式的数据,方便后期提取数据
    在这里插入图片描述
    这样子看起来很乱,所以我们将它格式化一下,这里使用:https://www.json.cn/# 对json进行美化
    在这里插入图片描述

提取数据

通过美化后的json数据,我们可以看到以下信息以及对应的位置:

  • 查询的城市:data —> city
  • 天气情况:data —> forecast —> date / high / low / fengli / type
  • 注意事项:data —> ganmao
  • 当前温度:data —> wendu

知道了数据的具体位置,我们就可以着手通过代码将所需数据提取出来,并通过正则将不需要的部分进行剔除

import re
def getData(data):
    """
        提取数据
    """
    city = data['data']['city']
    forecast = data['data']['forecast']
    s = f'城市:{city}\n'
    for i in forecast:
        date = i['date']
        temp_high = i['high']
        temp_high = re.findall('高温\s(.*)', temp_high)[0]
        temp_low = i['low']
        temp_low = re.findall('低温\s(.*)', temp_low)[0]
        fengli = i['fengli']
        fengli = re.findall('<!\[CDATA\[(.*)\]\]>', fengli)[0]
        s += date + f' ==> 温度:{temp_high} ~ {temp_low}, 风力:{fengli}\n'
    tip = data['data']['ganmao']        
    s += f'建议:{tip}'
    print(s)
    return s
    

正则部分我就不详细解释了我们将所有数据都拼接成了一行字符串,作为邮件的正文,来看看拼接后的结果吧
在这里插入图片描述

发送邮件

这里就要使用yagmail这个库啦

import yagmail
def sendEmail(subject, content):
    """
        发送邮件
    """
    user= 'xxxxxxx@qq.com'
    password = 'yyyyyyyyyyy'
    host = 'smtp.qq.com'
    # 连接SMTP服务器
    yag = yagmail.SMTP(user=user, password=password, host=host)

	# 邮件主题
    subject = subject
    # 邮件正文
    content = content
    # 接收方,这里是发送给自己
    reciever = user
    # 发送邮件
    yag.send(to=reciever, subject=subject, contents=content)
    print('发送邮件成功')
  1. 使用yagmail的SMTP()方法连接SMTP服务器,需要提供QQ邮箱账号、授权码以及stmp服务器等参数,记住是授权码,而不是邮箱登录密码哟,那么授权码如何获得呢?点击下面的url就知道咯
    https://service.mail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=1001256

  2. 使用send()方法发送邮件给对方,需要传入接受方的QQ邮箱账号,主题以及正文内容

是不是很方便呢哈哈~ 只要两步就可以发送邮件了

整合代码

import yagmail
import re
import requests

def weatherSpider():
    """
        获取天气数据
    """
    url = 'http://wthrcdn.etouch.cn/weather_mini?city=龙岩'
    data = requests.get(url).json()
    return data

def getData(data):
    """
        提取数据
    """
    city = data['data']['city']
    forecast = data['data']['forecast']
    s = f'城市:{city}\n'
    for i in forecast:
        date = i['date']
        temp_high = i['high']
        temp_high = re.findall('高温\s(.*)', temp_high)[0]
        temp_low = i['low']
        temp_low = re.findall('低温\s(.*)', temp_low)[0]
        fengli = i['fengli']
        fengli = re.findall('<!\[CDATA\[(.*)\]\]>', fengli)[0]
        s += date + f' ==> 温度:{temp_high} ~ {temp_low}, 风力:{fengli}\n'
    tip = data['data']['ganmao']        
    s += f'建议:{tip}'
    return s

def sendEmail(subject, content):
    """
        发送邮件
    """
    user= 'xxxxxxxx@qq.com'
    password = 'yyyyyyyy'
    host = 'smtp.qq.com'
    yag = yagmail.SMTP(user=user, password=password, host=host)

    subject = subject
    content = content
    yag.send(to=user, subject=subject, contents=content)
    print('发送邮件成功')

data = weatherSpider()
s = getData(data)
sendEmail('未来5天的天气预报', s)

接下来就是见证奇迹的时候, 来看看能否成功哦那个发送吧~
在这里插入图片描述
好啦, 今天的分享就到这咯 ~

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值