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编程,请各位砖家们不要扔砖,也希望和大家能够一起学习。