基于远程服务器:Python实现每天给女朋友发送QQ邮件,信息包括天气

基于远程服务器:Python实现每天给女朋友发送QQ邮件,信息包括天气

哎,说到女朋友也惭愧,受疫情影响情人节也开始“云”体验,什么东西也没送,也没陪人家。

事后我钢筋直男想了想,给女朋友写个脚本吧,毕竟自己是学这个的,那就写个发QQ邮箱的脚本吧,每天给他发QQ邮箱,告诉她“多喝热水,多穿衣服”
😂想想也香香,情人芳心也得了,学习的目的也达到了。干!

一、首先获得QQ邮箱授权

  1. 打开QQ邮箱
  2. 打开设置,点账户
  3. 下滑找到POP/SMTP服务,并打开,点击生成授权码,这个很重要
  4. 手机授权即可获得授权码
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

二、发送邮件代码
在这里插入图片描述
上代码(邮件发送篇)
首先用到第三方库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 &
托管到后台。
在这里插入图片描述
七、最终效果
在这里插入图片描述

未来怎样我不管,希望一路有你

  • 13
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值