1 功能清单
- 读取excel储存的信息
- 将内容发送到指定邮箱提醒
- 定时执行任务
2 代码解析
2.1 如何获取QQ邮箱SMTP授权码
如何获取SMTP授权码。它并不是QQ邮箱的登录密码,而是一个程序自动发送邮件所需的授权码。
第一步:登录QQ邮箱,单击顶部的“设置”链接,然后单击“账户”标签,如下图所示。
第二步:在“账户”选项卡中向下滚动,直到看到如下图所示的选项,单击“POP3/SMTP服务”右侧的“开启”链接,如下图所示。
第三步:单击“开启”链接后,会有一个验证密保的过程。按照页面中的说明,向指定号码发送指定内容的手机短信,发送完毕后单击页面中的“我已发送”按钮,会弹出一个框,里面就包含SMTP授权码,把它复制并存储起来,方便以后调用。
2.2 利用QQ邮箱发送消息
发送邮件代码
#导入引用库
import smtplib
from email.mime.text import MIMEText
user = '496077837@qq.com' #发件人的邮箱
pwd = "waygnbcxkazsbjbb" #QQ邮箱的SMTP授权码
to = '496077837@qq.com' #收件人的邮箱,多个收件人用英文逗号隔开
# 1.邮件正文内容
msg = MIMEText("测试邮件正文内容")
#2.设置邮件主题、发件人、收件人
msg["Subject"] = '测试邮件主题!' #设置邮件的主题
msg["From"] = user #设置发件人
msg["To"] = to #设置收件人
#3.发送邮件
s = smtplib.SMTP_SSL("smtp.qq.com", 465) #选择qq邮箱服务,默认端口为465
s.login(user, pwd) #登陆邮箱
s.send_message(msg) #发送邮件
s.quit() #退出QQ邮箱服务
print("Success!")
设置SMTP代码
s = smtplib.SMTP_SSL("smtp服务器地址", 端口)
s = smtplib.SMTP_SSL("smtp.qq.com", 465) #选择qq邮箱服务,默认端口为465
加入try-except捕获异常
#导入引用库
import smtplib
from email.mime.text import MIMEText
user = '496077837@qq.com' #发件人的邮箱
pwd = "waygnbcxkazsbjbb" #QQ邮箱的SMTP授权码
to = '496077837@qq.com' #收件人的邮箱,多个收件人用英文逗号隔开
# 1.邮件正文内容
msg = MIMEText("测试邮件正文内容")
#2.设置邮件主题、发件人、收件人
msg["Subject"] = '测试邮件主题!' #设置邮件的主题
msg["From"] = user #设置发件人
msg["To"] = to #设置收件人
#3.发送邮件
try:
s = smtplib.SMTP_SSL("smtp.qq.com", 465) #选择qq邮箱服务,默认端口为465
s.login(user, pwd) #登陆邮箱
s.send_message(msg) #发送邮件
s.quit() #退出QQ邮箱服务
print("Success!")
except Exception as e:
print("send email failed! next is the reason")
print(e)
2.3 发送HTML格式的邮件
核心代码
<p>段落内容</p>
<a href = "链接地址">文本内容</a>
<p style = "margin:0 atuto">内容</p>
# margin表示边距,0表示上下边距为0, auto表示自动调整左右边距。
正文代码编辑
mail_msg = '''
<p><a href = "https://www.cde.org.cn/">国家药品审评中心</a></p>
'''
mail_msg = []
mail_msg.append('<p>尊敬的用户,您好,以下是今天的竞争情报:</p>')
href = "https://www.cde.org.cn/main/xxgk/listpage/9f9c74c73e0f8f56a8bfbc646055026d"
2.4 定时执行任务
import smtplib
from email.mime.text import MIMEText
import schedule
import time
def Send_mail():
print("小主,可以吃饭啦!")
#定时执行的代码
#schedule.every().day.at("09:03").do(eating) #每天定时执行任务
schedule.every(1).minutes.do(Send_mail) #每隔1分钟定时执行任务
#schedule.every().hour.do(eating) #每隔1小时间定时执行任务
#schedule.every().monday.at("12:00").do(eating) #每周一定时执行任务
while True: #让程序一直运行
schedule.run_pending() #运行所有可以运行的schedule任务
time.sleep(10) #程序休眠10s
2.5 读取excel数据的代码
#读取excel文件中的数据.py
import xlwings as xw
import pandas as pd
def read_excel(path):
#读取excel文件中的数据
app = xw.App(visible = False, add_book = False) #打开excel程序
workbook = app.books.open(path) #打开数据工作簿
worksheet = workbook.sheets[0] #选中第一个工作表
values = worksheet.range("A1").expand().options(pd.DataFrame, index = False).value #提取表中的数据
print(values)
workbook.close() #关闭工作簿
app.quit() #关闭excel程序
return values
path = "data.xlsx" #指定文件所在路径
values = read_excel(path) #调用read_excel模块读取数据
4 全代码
#读取excel文件中的数据.py
import smtplib
from email.mime.text import MIMEText
import schedule
import time
import xlwings as xw
import pandas as pd
def read_excel(path):
#读取excel文件中的数据
app = xw.App(visible = False, add_book = False) #打开excel程序
workbook = app.books.open(path) #打开数据工作簿
worksheet = workbook.sheets[0] #选中第一个工作表
values = worksheet.range("A1").expand().options(pd.DataFrame, index = False).value #提取表中的数据
print(values)
workbook.close() #关闭工作簿
app.quit() #关闭excel程序
return values
def Send_mail():
user = '496077837@qq.com' #发件人的邮箱
pwd = "waygnbcxkazsbjbb" #QQ邮箱的SMTP授权码
to = '496077837@qq.com' #收件人的邮箱,多个收件人用英文逗号隔开
values = read_excel(path) #调用read_excel模块读取数据
mail_msg = []
mail_msg.append('<p>小主,您好,以下是今天的竞争情报,请查阅:</p>')
for i in range(len(values)):
data_value = values.iloc[i] #选中一行数据
name = data_value['药品名称']
company = data_value['企业名称']
href = data_value['访问地址']
hrefd = '<p style = "margin:0 auto"><a href = "' + href+'">'+str(i+1)+name+'——'+company+'</a></p>'
print(hrefd)
mail_msg.append(hrefd)
mail_msg.append('<p style = "margin:0 auto">祝好!</p>')
mail_msg.append('<p style = "margin:0 auto">小蟒</p>')
mail_msg = '\n'.join(mail_msg)
msg = MIMEText(mail_msg, "html", "utf-8") #添加正文内容
#2.设置邮件主题、发件人、收件人
msg["Subject"] = '测试邮件主题!' #设置邮件的主题
msg["From"] = user #设置发件人
msg["To"] = to #设置收件人
#3.发送邮件
try:
s = smtplib.SMTP_SSL("smtp.qq.com", 465) #选择qq邮箱服务,默认端口为465
#s = smtplib.SMTP_SSL("smtp.163.com", 465) #选择163邮箱服务,默认端口为465
s.login(user, pwd) #登陆邮箱
s.send_message(msg) #发送邮件
s.quit() #退出QQ邮箱服务
print("Success!")
except Exception as e:
print("send email failed! next is the reason")
print(e)
path = "data.xlsx" #指定文件所在路径
#values = read_excel(path) #调用read_excel模块读取数据
#定时执行的代码
#schedule.every().day.at("09:03").do(eating) #每天定时执行任务
schedule.every(1).minutes.do(Send_mail) #每隔1分钟定时执行任务
#schedule.every().hour.do(eating) #每隔1小时间定时执行任务
#schedule.every().monday.at("12:00").do(eating) #每周一定时执行任务
while True: #让程序一直运行
schedule.run_pending() #运行所有可以运行的schedule任务
time.sleep(10)