python 脚本编写的每日定时发送问候邮件,需要先启动QQ邮箱smtp服务
QQ邮箱》设置》账号》POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务:开启服务并获取授权码
修改代码中的sender, passWord, receiver
具体代码:
import smtplib
from email.mime.text import MIMEText
from email.utils import formataddr
import requests
from bs4 import BeautifulSoup
import re
import random
import schedule
sender = 'xxxx@qq.com' # 填写发信人的邮箱账号
passWord = 'xxxxxxxx' # 发件人邮箱授权码
receiver = 'xxxxxxx@qq.com' # 收件人邮箱账号
weaurl = 'https://tianqi.2345.com/haizhu1d/72024.htm' # 获取天气的url,可以从网页中选择地点,然后修改url
loveurl = 'https://www.guaze.com/juzi/23389.html' # 获取问候语句的url
def get_weatherAndLove():
# 爬取天气网页
web1 = requests.get(weaurl)
page = BeautifulSoup(web1.text,'html.parser')
weather = page.find('div',class_='real-today')
# 爬取情话网页
web2 = requests.get(loveurl)
web2.encoding='gb2312'
page = BeautifulSoup(web2.text, "html.parser")
div = page.find('div', class_="content")
# 处理文字(删去无效符号,取一句话)
div = str(div.text)
print(type(div))
grep = re.compile(r"\d+、(.*)")
content = grep.findall(div)
love = content[random.randint(1, len(content) - 1)]
return weather, love
def mail():
# 爬取信息
weather, love = get_weatherAndLove()
# 构造邮件内容
weather = weather.text + "\n\n"+love
print(weather)
ret = True
try:
# 定义邮件类
msg = MIMEText(weather, 'plain', 'utf-8')
msg['From'] = formataddr(["sender", sender]) # 发件人邮箱昵称、发件人邮箱账号
msg['To'] = formataddr(["receiver", receiver]) # 收件人邮箱昵称、收件人邮箱账号
msg['Subject'] = "Daily greetings" # 标题
# 设置发件人信息
server = smtplib.SMTP_SSL("smtp.qq.com", 465) # 发件人邮箱中的SMTP服务器
server.login(sender, passWord) # 发件人邮箱账号、授权码
# 发送邮件
server.sendmail(sender, [receiver, ], msg.as_string()) # 发件人邮箱账号、收件人邮箱账号、发送邮件
server.quit() # 关闭连接
print("Success!")
except Exception:
print("Error!")
ret = False
return ret
# schedule.every().day.at("08:00").do(mail) # 每天8点8执行函数mail
schedule.every(30).seconds.do(mail) # 每30秒执行函数mail
while True:
schedule.run_pending()