基于远程服务器:Python实现每天给女朋友发送QQ邮件,信息包括天气
哎,说到女朋友也惭愧,受疫情影响情人节也开始“云”体验,什么东西也没送,也没陪人家。
事后我钢筋直男想了想,给女朋友写个脚本吧,毕竟自己是学这个的,那就写个发QQ邮箱的脚本吧,每天给他发QQ邮箱,告诉她“多喝热水,多穿衣服”
😂想想也香香,情人芳心也得了,学习的目的也达到了。干!
一、首先获得QQ邮箱授权
- 打开QQ邮箱
- 打开设置,点账户
- 下滑找到POP/SMTP服务,并打开,点击生成授权码,这个很重要
- 手机授权即可获得授权码
二、发送邮件代码
上代码(邮件发送篇)
首先用到第三方库smtplib
pip install smtplib
import smtplib
from email.mime.text import MIMEText
from email.header import Header
def set_pic_file(text):
print ("邮件发送中")
mail_host = "smtp.qq.com" # 设置服务器
mail_user = "你的QQ@qq.com" # 用户名
mail_pass = "你的授权码" # 口令,QQ邮箱是输入授权码,在qq邮箱设置 里用验证过的手机发送短信获得,不含空格
sender = '你的QQ@qq.com'
receivers = ['接收者QQ@qq.com'] # 接收邮件,可设置为你的QQ邮箱或者其他邮箱
message = MIMEText(text, 'plain', 'utf-8')#text是你要写的文本内容
message['From'] = Header("你的QQ@qq.com", 'utf-8')
message['To'] = Header("接收者QQ@qq.com", 'utf-8')
subject ='今天依然爱你哦'
message['Subject'] = Header(subject, 'utf-8')
try:
smtpObj = smtplib.SMTP_SSL(mail_host, 465)
smtpObj.login(mail_user, mail_pass)
smtpObj.sendmail(sender, receivers, message.as_string())
smtpObj.quit()
print ("邮件发送成功")
except smtplib.SMTPException as e:
print (e)
三、API接口调用
其实可以爬虫的,但是爬虫会让代码时间复杂度提高(其实就是懒),所以这里选择调用API接口。
API接口选择
https://www.tianqiapi.com/index/doc
上代码
import time
import requests
import ast
def get_url_comment(url):
headers = {
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3741.400 QQBrowser/10.5.3863.400"
}
try:
r = requests.get(url ,headers = headers, timeout = 30)#获得url的相关参数
r.raise_for_status()
r.encoding = r.apparent_encoding
print ("网页获取成功",r.status_code )
return r.text
except Exception as e :
return "网页爬取异常" , r.status_code ,e#返回状态码
def weather():
a = get_url_comment("https://tianqiapi.com/api?version=v6&appid=15186356&appsecret=swW9lQmQ")
b = ast.literal_eval(a)
c = b["date"] + "\t" + b["week"] + "\t" + b["city"] + "\n" + b["wea"] + "\n最高气温 " + b["tem1"] + "℃" \
+ " --最低气温 " + b["tem2"] + "℃\n" + b["win"] + b["win_speed"] + "\n空气质量 " + b["air"] + "\t空气PM2.5指数 " \
+ b["air_pm25"] + "\t空气水平 " + b["air_level"] + "\t" + b["air_tips"]
if int(b["tem2"]) <= 0 and int(b["tem1"]) >= 10:
d = "\n早安宝贝😘,早晨傍晚会比较冷,昼夜温差大,记得早晚添衣保暖哦!🐷"
elif int(b["tem2"]) >= 0 and int(b["tem2"]) <= 6 and int(b["tem1"]) >= 10:
d = "\n早安宝贝😘,早晚都不算太冷,但记得添衣哦!😁"
elif int(b["tem2"]) >= 6 and int(b["tem1"]) >= 10:
d = "\n早安宝贝😘,天气转暖,宝贝,开心的一天啊!☺"
elif int(b["tem2"]) <= -5 and int(b["tem1"]) <= 10:
d = "\n早安宝贝😘,天气有点凉,注意保暖哦!❤"
return c+d
针对天气温度,可以有自己的文本,我这里懒得爬虫写情话了,都是自己一个一个敲上去的,嘻嘻,有女朋友的都懂,你请自写的才是最好的。
四、总代码
import smtplib
from email.mime.text import MIMEText
from email.header import Header
import time
import requests
import ast
def get_url_comment(url):
headers = {
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3741.400 QQBrowser/10.5.3863.400"
}
try:
r = requests.get(url ,headers = headers, timeout = 30)#获得url的相关参数
r.raise_for_status()
r.encoding = r.apparent_encoding
print ("网页获取成功",r.status_code )
return r.text
except Exception as e :
return "网页爬取异常" , r.status_code ,e#返回状态码
def weather():
a = get_url_comment("https://tianqiapi.com/api?version=v6&appid=15186356&appsecret=swW9lQmQ")
b = ast.literal_eval(a)
c = b["date"] + "\t" + b["week"] + "\t" + b["city"] + "\n" + b["wea"] + "\n最高气温 " + b["tem1"] + "℃" \
+ " --最低气温 " + b["tem2"] + "℃\n" + b["win"] + b["win_speed"] + "\n空气质量 " + b["air"] + "\t空气PM2.5指数 " \
+ b["air_pm25"] + "\t空气水平 " + b["air_level"] + "\t" + b["air_tips"]
if int(b["tem2"]) <= 0 and int(b["tem1"]) >= 10:
d = "\n早安宝贝😘,早晨傍晚会比较冷,昼夜温差大,记得早晚添衣保暖哦!🐷"
elif int(b["tem2"]) >= 0 and int(b["tem2"]) <= 6 and int(b["tem1"]) >= 10:
d = "\n早安宝贝😘,早晚都不算太冷,但记得添衣哦!😁"
elif int(b["tem2"]) >= 6 and int(b["tem1"]) >= 10:
d = "\n早安宝贝😘,天气转暖,宝贝,开心的一天啊!☺"
elif int(b["tem2"]) <= -5 and int(b["tem1"]) <= 10:
d = "\n早安宝贝😘,天气有点凉,注意保暖哦!❤"
return c+d
def set_pic_file(text):
print ("邮件发送中")
mail_host = "smtp.qq.com" # 设置服务器
mail_user = "yourQQ@qq.com" # 用户名
mail_pass = "授权码" # 口令,QQ邮箱是输入授权码,在qq邮箱设置 里用验证过的手机发送短信获得,不含空格
sender = 'yourQQ@qq.com'
receivers = ['接收者@qq.com'] # 接收邮件,可设置为你的QQ邮箱或者其他邮箱
message = MIMEText(text, 'plain', 'utf-8')
message['From'] = Header("yourQQ@qq.com", 'utf-8')
message['To'] = Header("接收者@qq.com", 'utf-8')
subject ='今天依然爱你哦'#标题
message['Subject'] = Header(subject, 'utf-8')
try:
smtpObj = smtplib.SMTP_SSL(mail_host, 465)
smtpObj.login(mail_user, mail_pass)
smtpObj.sendmail(sender, receivers, message.as_string())
smtpObj.quit()
print ("邮件发送成功")
except smtplib.SMTPException as e:
print (e)
if __name__ == '__main__':
c , d = 9 , 0
while True ://设置循环,在服务器后台运行
a , b = time.localtime(time.time()).tm_hour,time.localtime(time.time()).tm_min
if a == c and b == d :
e = weather()
set_pic_file(e)
print(time.localtime(time.time()).tm_year,"年--",time.localtime(time.time()).tm_mon,"月",time.localtime(time.time()).tm_mday,"日--",a,":",b)
time.sleep(24*3600-120)
五、服务器
首先,你得购买服务器,我这里选择了华为云,开年有活动。
通过宝塔面板规格化服务器,通过Winscp(安装包已上传,可下载)来远程连接服务器。
远程连接时,服务器必须开放相关的出入规则。
开放好以后,就可以winscp远程连接了。
登陆成功后,找到本地刚写的dome文件,推拽到远端。(记得远端服务器配置python3)
好!至此,本地完成。
六、远端操作
ls 列出 / 根目录下的所有文件
cd 切换目录到所保存程序的目录下
cat 查看程序
记得创建一个日志,来查看运行状态。
执行命令nohup python -u emil.py > run.log 2>&1 &
托管到后台。
七、最终效果
未来怎样我不管,希望一路有你