Python+Linux云主机实现将每日天气资讯定时发送至个人邮箱

代码已经部署在了Linux云主机,亲测有效,需要的朋友们可以稍加修改就可以使用啦

1.获取天气信息

我通过天气网这个平台获取每日天气资讯

网站比较简单没有什么反爬措施

直接上代码

import requests
import re
import time

# 我需要5个城市的每日天气资讯 分别是
# 太原市万柏林区 商洛市商州区 西安市雁塔区 北京市延庆区 宝鸡市渭滨区
url_list = ["https://tianqi.com/wanbolinqu/", 
"https://tianqi.com/shangzhou",
"https://tianqi.com/yantaqu", 
"https://tianqi.com/yanqing", 
"https://tianqi.com/weibin"]

# 定义请求头
header = {
        "user-agent": "Mozilla / 5.0(X11; Linux x86_64) AppleWebKit / 537.36(KHTML, likeGecko) "
                      "Chrome / 77.0.3865.120Safari / 537.36"}

text = """
    现在是北京时间{year}年{month}月{day}日{hour}时{minute}分{second}秒
    今日5个城市的天气状况分别为:\n
    """.format(year=time.localtime().tm_year, month=time.localtime().tm_mon, day=time.localtime().tm_mday,
               hour=time.localtime().tm_hour, minute=time.localtime().tm_min, second=time.localtime().tm_sec)

for url in url_list:
        html = requests.get(url, headers=header, timeout=10)
        data = html.content.decode('utf8')
        
        # 每个城市的名称
        name = re.search('

(.*?)

.*?
'
, data) # 今日份公历和农历的时间 week = re.search('
(.*?)
'
, data) # 今日的天气状况和最低最高气温 weather = re.search('

.*?(.*?)(.*?)', data, re.S) # 湿度风向紫外线等信息 shidu = re.search('

(.*?)(.*?)(.*?)
'
, data, re.S) # 空气质量和日出日落时间 kongqi = re.search('
(.*?)
(.*?)
(.*?)
(.*?)
'
, data, re.S) string = """ 今天是{week} {name}的具体天气状况是\t{weather1}\t{weather2} {shidu1}\t{shidu2}\t{shidu3} {kongqi1}\t{kongqi2}\t{kongqi3}"\t{kongqi4}\n """.format(week=week.group(1), name=name.group(1), weather1=weather.group(1), weather2=weather.group(2), shidu1=shidu.group(1), shidu2=shidu.group(2), shidu3=shidu.group(3), kongqi1=kongqi.group(1), kongqi2=kongqi.group(2), kongqi3=kongqi.group(3), kongqi4=kongqi.group(4)) text = text+string

2.使用Python发送邮件

我参考了菜鸟教程 “Python3 SMTP发送邮件”的教程,教程言简意赅,很好理解

以下是具体代码

import smtplib
from email.mime.text import MIMEText

# 发件人邮箱账号
sender = "[email protected]"

# 收件人邮箱(可以同时给多账号发送)  
receiver = "[email protected], [email protected], [email protected]"

# 邮箱域名,我是用qq邮箱发送邮件的,所以这里填了qq邮箱的域名
Host = "smtp.qq.com"  

# 邮件的主题或者标题 
subject = "{year}-{month}-{day} 太原商洛西安北京宝鸡5城每日天气状况".format\
(year=time.localtime().tm_year, month=time.localtime().tm_mon, day=time.localtime().tm_mday)


# MIMEText三个参数分别是邮件内容 邮件类型 编码方式
txt = "我是邮件的具体内容"
message = MIMEText(txt, _subtype="plain", _charset="utf8")
message['From'] = sender   # 设置邮件发件人
message['To'] = receiver  # 设置邮件收件人
message['Subject'] = subject   # 设置邮件标题

try:
    # Python3.7版本必须使用这个方法设置邮件传输协议证书
    server = smtplib.SMTP_SSL(host=Host) 
    server.connect(host=Host, port=465)

# Python3.6及其以下版本同时可以使用这两种方法设置邮件传输协议证书
    # server = smtplib.SMTP_SSL(Host, 465)  

# 设置发件人和授权码
    server.login(sender, "此处为授权码") 

# 发送邮件
    server.sendmail(from_addr=sender, to_addrs=message['To'].split(','), msg=message.as_string())

# 断开连接  
    server.close()   
    print("邮件发送成功")

except Exception:
    print("邮件发送失败")
    print(Exception)

3.为个人邮箱开通SMTP服务

以QQ邮箱为例

进入到邮箱之后

Python+Linux云主机实现将每日天气资讯定时发送至个人邮箱_第1张图片
Python+Linux云主机实现将每日天气资讯定时发送至个人邮箱_第2张图片

Python+Linux云主机实现将每日天气资讯定时发送至个人邮箱_第3张图片
记住生成的授权码

4.贴上完整代码

import requests
import re
import time
import smtplib
from email.mime.text import MIMEText

def get_weather_information():
	# 我需要5个城市的每日天气资讯 分别是
	# 太原市万柏林区 商洛市商州区 西安市雁塔区 北京市延庆区 宝鸡市渭滨区
	url_list = ["https://tianqi.com/wanbolinqu/", 
	"https://tianqi.com/shangzhou",
	"https://tianqi.com/yantaqu", 
	"https://tianqi.com/yanqing", 
	"https://tianqi.com/weibin"]
	
	# 定义请求头
	header = {
	        "user-agent": "Mozilla / 5.0(X11; Linux x86_64) AppleWebKit / 537.36(KHTML, likeGecko) "
	                      "Chrome / 77.0.3865.120Safari / 537.36"}
	
	text = """
	    现在是北京时间{year}年{month}月{day}日{hour}时{minute}分{second}秒
	    今日5个城市的天气状况分别为:\n
	    """.format(year=time.localtime().tm_year, month=time.localtime().tm_mon, day=time.localtime().tm_mday,
	               hour=time.localtime().tm_hour, minute=time.localtime().tm_min, second=time.localtime().tm_sec)
	
	for url in url_list:
	        html = requests.get(url, headers=header, timeout=10)
	        data = html.content.decode('utf8')
	        
	        # 每个城市的名称
	        name = re.search('

(.*?)

.*?
'
, data) # 今日份公历和农历的时间 week = re.search('
(.*?)
'
, data) # 今日的天气状况和最低最高气温 weather = re.search('

.*?(.*?)(.*?)', data, re.S) # 湿度风向紫外线等信息 shidu = re.search('

(.*?)(.*?)(.*?)
'
, data, re.S) # 空气质量和日出日落时间 kongqi = re.search('
(.*?)
(.*?)
(.*?)
(.*?)
'
, data, re.S) string = """ 今天是{week} {name}的具体天气状况是\t{weather1}\t{weather2} {shidu1}\t{shidu2}\t{shidu3} {kongqi1}\t{kongqi2}\t{kongqi3}"\t{kongqi4}\n """.format(week=week.group(1), name=name.group(1), weather1=weather.group(1), weather2=weather.group(2), shidu1=shidu.group(1), shidu2=shidu.group(2), shidu3=shidu.group(3), kongqi1=kongqi.group(1), kongqi2=kongqi.group(2), kongqi3=kongqi.group(3), kongqi4=kongqi.group(4)) text = text+string return text def send_mail(text): # 发件人邮箱账号 sender = "[email protected]" # 收件人邮箱(可以同时给多账号发送) receiver = "[email protected], [email protected], [email protected]" # 邮箱域名,我是用qq邮箱发送邮件的,所以这里填了qq邮箱的域名 Host = "smtp.qq.com" # 邮件的主题或者标题 subject = "{year}-{month}-{day} 太原商洛西安北京宝鸡5城每日天气状况".format\ (year=time.localtime().tm_year, month=time.localtime().tm_mon, day=time.localtime().tm_mday) # MIMEText三个参数分别是邮件内容 邮件类型 编码方式 message = MIMEText(text, _subtype="plain", _charset="utf8") message['From'] = sender # 设置邮件发件人 message['To'] = receiver # 设置邮件收件人 message['Subject'] = subject # 设置邮件标题 try: # Python3.7版本必须使用这个方法设置邮件传输协议证书 server = smtplib.SMTP_SSL(host=Host) server.connect(host=Host, port=465) # Python3.6及其以下版本同时可以使用这两种方法设置邮件传输协议证书 # server = smtplib.SMTP_SSL(Host, 465) # 设置发件人和授权码 server.login(sender, "此处为授权码") # 发送邮件 server.sendmail(from_addr=sender, to_addrs=message['To'].split(','), msg=message.as_string()) # 断开连接 server.close() print("邮件发送成功") except Exception: print("邮件发送失败") print(Exception) if __name__ == '__main__': msg = get_weather_information() send_mail(msg)

5.将代码部署到云主机并实现每日定时执行

用以下命令在本机将代码传送到云主机

scp /home/long/auto_send_mail.py  user@ip:/home
# /home/long/auto_send_mail.py为本机的代码路径
# user和ip分别为云主机的用户名和ip地址,之后的/home为在云主机存放路径

设置Python脚本定时执行

nano /etc/crontab

在最后添加
00 07 * * * root python3.6 /home/auto_send_mail.py
# 意思就是每天早上七点以root用户身份执行此Python脚本

6.手机端具体效果

Python+Linux云主机实现将每日天气资讯定时发送至个人邮箱_第4张图片
Python+Linux云主机实现将每日天气资讯定时发送至个人邮箱_第5张图片

7.注意事项

如果没有收到邮件,那极有可能是收件人邮箱将邮件判断为了垃圾邮件,邮件接收者得手动将发送者邮箱账号设置为白名单

设置邮箱白名单的方法可百度

想尝试的朋友赶紧行动起来

你可能感兴趣的:(Python+Linux云主机实现将每日天气资讯定时发送至个人邮箱)