邮件对于现代人来说是缺一不可的工具,无论是发贺卡、发office、还是发信息亦或者是发文件。都需要我们登录邮箱编辑邮件点击发送。但是难免有会忘记的时候,特别是情侣之间、如果要是忘记了就不知道要发生什么事情了。自从我学了python才知道原来还可以这么来的,妈妈再也不用担心我和对象吵架了。

主要步骤
1、requests爬取我们需要祝福的话语
2、email、smtplib模拟登录QQ邮箱
3、把祝福输入邮箱文本点击发送
4、进入任务计划执行设置每日执行一次
访问网页获取对应文章地址
以下便是我们需要的依赖的库。
import smtplib
from email.mime.text import MIMEText
from email.utils import formataddr
import time
import cnlunar
import datetime
from xpinyin import Pinyin#中文转拼音
import requests
from bs4 import BeautifulSoup as bs
import re
import random
from lxml import etree
import sys
通过requsets库和BeautifulSoup库获取网页的源代码。
html=requests.get(url,headers=header)
html.encoding = 'utf-8'#防止乱码出现
soup=bs(html.text,'html.parser')
通过正则表达式和.findAll方法获取我们需要祝福语的文章链接。
b=soup.findAll('a',attrs={"href":re.compile(r'/jieri/{}/\d+.html'.format(result))})#正则表达式爬取地址
链接SMTM服务器并编辑邮箱。
SMTM服务器是可供第三方软件服务的邮箱服务器,可以在QQ设置中开启。开启SMTM服务器后获取授权码,用来给python授权以达到控制效果。
srv = smtplib.SMTP_SSL(smtp_srv.encode(), 465)
# 使用授权码登录QQ邮箱
srv.login(from_addr, from_pwd)
# 使用sendmail方法来发送邮件
srv.sendmail(from_addr, [to_addr], msg.as_string())
print('发送成功')
编辑邮箱头文件相关信息。
# 发件人
from_name = "xxx"
# 发件邮箱
from_addr = "xxxxxxxxxx@qq.com"
# 发件邮箱授权码,注意不是QQ邮箱密码
from_pwd = "xxxxxxxxxxxx"
# 收件邮箱
to_addr = "xxxxxxxxxx@qq.com"
编辑邮箱内容、主题。
# 邮件标题
my_title = "{}祝福".format(a.get_legalHolidays())
my_msg=text
# 参数2改为html
msg = MIMEText(my_msg, 'plain', 'utf-8')
msg['From'] = formataddr([from_name, from_addr])
# 邮件的标题
msg['Subject'] = my_title
万事具备就差邮箱应该发什么,在什么时候发的问题了。python的cnlunar保存了中国的大部分份节日信息。里面有相当多的用法,咱们主要做的就是传统节日啦。在https://www.31zfy.com/jieri/网页中主要包括了一下传统节日。

通过以下代码就可以获取该天的节日信息。
a = cnlunar.Lunar(datetime.datetime(t.tm_year, t.tm_mon, t.tm_mday , 7, 30), godType='8char')
jieri=a.get_legalHolidays()
接下来就构造url就可以开始爬取啦!
url1 = 'https://www.31zfy.com/jieri/{}/'.format(节日的英文拼音)
任务计划程序
最后不要忘记在任务计划程序上设置哦!这样才能实现尽管我忘记了,但是我的电脑是不会忘记的。这里主要给大家在任务计划程序中最主要的部分截图,其余的都是字面意思啦。

最后附上全部代码完工。
import smtplib
from email.mime.text import MIMEText
from email.utils import formataddr
import time
import cnlunar
import datetime
from xpinyin import Pinyin#中文转拼音
import requests
from bs4 import BeautifulSoup as bs
import re
import random
from lxml import etree
import sys
t=time.localtime()#获取时间轴
a = cnlunar.Lunar(datetime.datetime(t.tm_year, t.tm_mon, t.tm_mday , 7, 30), godType='8char')
jieri=a.get_legalHolidays()#获取节日
if jieri=='':
sys.exit()
p = Pinyin()
result = p.get_pinyin(jieri)#中文转拼音方便构造url
result1=result.replace('-','')
result2=result1[:-3]
dizhi=[]
header={
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36'
}
def dizhipaqu(url,result):
global dizhi,header
try:
html=requests.get(url,headers=header)
html.encoding = 'utf-8'
soup=bs(html.text,'html.parser')
b=soup.findAll('a',attrs={"href":re.compile(r'/jieri/{}/\d+.html'.format(result))})#正则表达式爬取地址
for f in b:
dizhi.append(f["href"])
except Exception as e:
pass
def neirongpaqu():
global dizhi,header
try:
dit=random.randint(0,len(dizhi))
url='https://www.31zfy.com{}'.format(dizhi[dit])
html = requests.get(url=url,headers=header)
html.encoding = 'utf-8'
test=etree.HTML(html.text)
text=test.xpath('//*[@class="content"]/div[3]/text()')
chufu=text[0][5:]
return chufu
except:
print('文本获取失败')
pass;
def youjie(text):
# 发件人
from_name = "xxx"
# 发件邮箱
from_addr = "xxxxxx@qq.com"
# 发件邮箱授权码,注意不是QQ邮箱密码
from_pwd = "xxxxxxxx"
# 收件邮箱
to_addr = "xxxx@qq.com"
# 邮件标题
my_title = "xxxxx祝福".format(a.get_legalHolidays())
my_msg=text
# 参数2改为html
msg = MIMEText(my_msg, 'plain', 'utf-8')
msg['From'] = formataddr([from_name, from_addr])
# 邮件的标题
msg['Subject'] = my_title
# SMTP服务器地址
smtp_srv = "smtp.qq.com"
try:
srv = smtplib.SMTP_SSL(smtp_srv.encode(), 465)
# 使用授权码登录QQ邮箱
srv.login(from_addr, from_pwd)
# 使用sendmail方法来发送邮件
srv.sendmail(from_addr, [to_addr], msg.as_string())
print('发送成功')
except Exception as e:
print('发送失败')
finally:
# 无论发送成功还是失败都要退出你的QQ邮箱
srv.quit()
if __name__ == '__main__':
url1 = 'https://www.31zfy.com/jieri/{}/'.format(result1)
url2 = 'https://www.31zfy.com/jieri/{}/'.format(result2)
dizhipaqu(url1,result1)
dizhipaqu(url2,result2)
zhufuyun=neirongpaqu()
youjie(zhufuyun)