1 功能清单
- 读取excel储存的信息
- 将内容发送到指定邮箱提醒
- 定时执行任务
2 代码解析
2.1 如何获取QQ邮箱SMTP授权码
如何获取SMTP授权码。它并不是QQ邮箱的登录密码,而是一个程序自动发送邮件所需的授权码。
第一步:登录QQ邮箱,单击顶部的“设置”链接,然后单击“账户”标签,如下图所示。
第二步:在“账户”选项卡中向下滚动,直到看到如下图所示的选项,单击“POP3/SMTP服务”右侧的“开启”链接,如下图所示。
第三步:单击“开启”链接后,会有一个验证密保的过程。按照页面中的说明,向指定号码发送指定内容的手机短信,发送完毕后单击页面中的“我已发送”按钮,会弹出一个框,里面就包含SMTP授权码,把它复制并存储起来,方便以后调用。
2.2 利用QQ邮箱发送消息
发送邮件代码
#导入引用库import smtplibfrom email.mime.text import MIMETextuser = '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邮箱服务,默认端口为465s.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 smtplibfrom email.mime.text import MIMETextuser = '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邮箱服务,默认端口为465s.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 smtplibfrom email.mime.text import MIMETextimport scheduleimport timedef 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文件中的数据.pyimport xlwings as xwimport pandas as pddef 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 valuespath = "data.xlsx" #指定文件所在路径values = read_excel(path) #调用read_excel模块读取数据
4 全代码
#读取excel文件中的数据.pyimport smtplibfrom email.mime.text import MIMETextimport scheduleimport timeimport xlwings as xwimport pandas as pddef 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 valuesdef 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邮箱服务,默认端口为465s.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)
