上班没时间理女朋友,写了一个定时发送情话邮件的程序!

1.获得随机的句子

此处是调用的一个网站的api接口,网址如下
https://chp.shadiao.app/api.php

import requests
se = requests.session()
Post_url = "https://chp.shadiao.app/api.php" 
Text = se.post(Post_url).text.replace("'", '"').replace('/ ', '/')
print(Text)

如果没有安装requests库,需要先安装requests库,此代码的意思是获取到网址里面的文本,并赋值给Text,最后我们打印一下,看能不能打印出来。

2.发送邮件

import smtplib 
#smtplib是python的一个内置库,所以不需要用pip安装
mailhost='smtp.qq.com'
#把qq邮箱的服务器地址赋值到变量mailhost上,地址需要是字符串的格式。
qqmail = smtplib.SMTP()
#实例化一个smtplib模块里的SMTP类的对象,这样就可以SMTP对象的方法和属性了
qqmail.connect(mailhost,25)
#连接服务器,第一个参数是服务器地址,第二个参数是SMTP端口号。

解释一下:第1行代码是引入库,第2行代码是qq邮箱的服务器地址,这个地址是可以通过搜索引擎查到的。

第4行代码是用SMTP对象的connect()方法连接服务器,第一个参数是获取到的服务器地址,第二个参数是SMTP端口号——25。

端口号的选择不是唯一的,但是25是一个最简单、最基础的端口号,所以我们填25。

连接服务器就讲完了,马上来看第1和第2步:通过账号和密码登录邮箱;填写收件人。

account = "改成你的邮箱"
#获取邮箱账号
password = "改成你的密码"
#获取邮箱密码
qqmail.login(account,password)
#登录邮箱,第一个参数为邮箱账号,第二个参数为邮箱密码
receiver = "改成收件人的邮箱"
#获取收件人的邮箱

注意:这里的密码并不是你登录邮箱的密码,这个密码需要我们去到这里获取:请打开https://mail.qq.com/,登录你的邮箱。然后点击位于顶部的【设置】按钮,选择【账户】,然后下拉到这个位置。

在这里插入图片描述

在这里插入图片描述
选择POP3/SMTP服务,把它开启,会得到一个授权码,授权码就是所用到的密码。
在这里插入图片描述

继续看第3步和第4步:填写主题和撰写正文,在这里需要用到email库。

from email.mime.text import MIMEText
from email.header import Header
#引入Header和MIMEText模块
content = input('请输入邮件正文:')
#输入你的邮件正文
message = MIMEText(content, 'plain', 'utf-8')
#实例化一个MIMEText邮件对象,该对象需要写进三个参数,分别是邮件正文,文本格式和编码.
subject = input('请输入你的邮件主题:')
#用input()获取邮件主题  
message['Subject'] = Header(subject, 'utf-8')
#在等号的右边,是实例化了一个Header邮件头对象,该对象需要写入两个参数,分别是邮件主题和编码,然后赋值给等号左边的变量message['Subject']。

到现在,完整的发送邮件的代码如下:

import smtplib 
#smtplib是python的一个内置库,所以不需要用pip安装
from email.mime.text import MIMEText
from email.header import Header

mailhost='smtp.qq.com'
#把qq邮箱的服务器地址赋值到变量mailhost上,地址需要是字符串的格式。
qqmail = smtplib.SMTP()
#实例化一个smtplib模块里的SMTP类的对象,这样就可以SMTP对象的方法和属性了
qqmail.connect(mailhost,25)
#连接服务器,第一个参数是服务器地址,第二个参数是SMTP端口号。

account = "改成你的邮箱"
#获取邮箱账号
password = "改成你的密码"
#获取邮箱密码
qqmail.login(account,password)
#登录邮箱,第一个参数为邮箱账号,第二个参数为邮箱密码
receiver = "改成收件人的邮箱"
#获取收件人的邮箱
content=input('请输入邮件正文:')
#输入你的邮件正文
message = MIMEText(content, 'plain', 'utf-8')
#实例化一个MIMEText邮件对象,该对象需要写进三个参数,分别是邮件正文,文本格式和编码.
subject = input('请输入你的邮件主题:')
#用input()获取邮件主题  
message['Subject'] = Header(subject, 'utf-8')
#在等号的右边,是实例化了一个Header邮件头对象,该对象需要写入两个参数,分别是邮件主题和编码,然后赋值给等号左边的变量message['Subject']。

qqmail.sendmail(sender, receiver, message.as_string())
#发送邮件,调用了sendmail()方法,写入三个参数,分别是发件人,收件人,和字符串格式的正文。
qqmail.quit()
#退出邮箱

3.定时发送

关于时间,其实Python有两个内置的标准库——time和datetime。

但在这里,我们不准备完全依靠标准库来实现,而准备选取第三方库——schedule。

原因在于:标准库一般意味着最原始最基础的功能,第三方库很多是去调用标准库中封装好了的操作函数。比如schedule,就是用time和datetime来实现的。

而对于我们需要的定时功能,time和datetime当然能实现,但操作逻辑会相对复杂;而schedule就是可以直接解决定时功能,代码比较简单,这是我们选择schedule的原因。

import schedule
import time
#引入schedule和time

def job():
    print("I'm working...")
#定义一个叫job的函数,函数的功能是打印'I'm working...'

schedule.every(10).minutes.do(job)       #部署每10分钟执行一次job()函数的任务
schedule.every().hour.do(job)            #部署每×小时执行一次job()函数的任务
schedule.every().day.at("10:30").do(job) #部署在每天的10:30执行job()函数的任务
schedule.every().monday.do(job)          #部署每个星期一执行job()函数的任务
schedule.every().wednesday.at("13:15").do(job)#部署每周三的13:15执行函数的任务

while True:
    schedule.run_pending()
    time.sleep(1)


4.整体代码

import smtplib
import requests
from email.mime.text import MIMEText
from email.header import Header
import schedule
import time
import datetime

se = requests.session()
Post_url = "https://chp.shadiao.app/api.php"  
Text = se.post(Post_url).text.replace("'", '"').replace('/ ', '/')
print(Text)


def job():
    mailhost='smtp.qq.com'
    #把qq邮箱的服务器地址赋值到变量mailhost上
    qqmail = smtplib.SMTP()
    #实例化一个smtplib模块里的SMTP类的对象,这样就可以SMTP对象的方法和属性了
    qqmail.connect(mailhost,25)
    #连接服务器,第一个参数是服务器地址,第二个参数是SMTP端口号。
    #以上,皆为连接服务器的代码

    account = "改为发件人邮箱"
    #获取邮箱账号
    password = "发件人邮箱密码"
    #获取邮箱密码
    # qqmail.login(account,password)
    smtp.login(account,password)
    #登录邮箱,第一个参数为邮箱账号,第二个参数为邮箱密码

    receiver = "收件人邮箱"
    #获取收件人的邮箱
  
    content = Text
    #将上文中获得的随机句子赋值给content
    message = MIMEText(content, 'plain', 'utf-8')
    #实例化一个MIMEText邮件对象,该对象需要写进三个参数,分别是邮件正文,文本格式和编码.
    subject = "LOVE"
    #用input()获取邮件主题
    message['Subject'] = Header(subject, 'utf-8')
    #在等号的右边,是实例化了一个Header邮件头对象,该对象需要写入两个参数,分别是邮件主题和编码,然后赋值给等号左边的变量message['Subject']。

    try:
        smtp.sendmail(account, receiver, message.as_string())
        # 发送邮件,调用了sendmail()方法,写入三个参数,分别是发件人,收件人,和字符串格式的正文。
        print ('邮件发送成功')
    except:
        print ('邮件发送失败')
    smtp.quit()
    #退出邮箱
    now_time = str(datetime.datetime.now().date())
    f = open("1.txt",mode="a+")
    f.write(now_time + "\n")
    f.write(Text + "\n")
    f.close()

schedule.every().day.at("13:14").do(job)

while True:
    schedule.run_pending()
    time.sleep(1)

此代码就是在每天的13:14分发送一封邮件,并把邮件的内容和发送的时间记录在同目录的1.txt文件中,成果如图。在这里插入图片描述

注意

如果是在linux系统运行的话,需要把

mailhost='smtp.qq.com'

qqmail = smtplib.SMTP()

qqmail.connect(mailhost,25)

改为

smtp = smtplib.SMTP_SSL("smtp.qq.com")

smtp.ehlo("smtp.qq.com")

最后,作者也是刚在自学python编程,请各位砖家们不要扔砖,也希望和大家能够一起学习。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值