点击查看【bilibili】

1 功能清单

  • 读取excel储存的信息
  • 将内容发送到指定邮箱提醒
  • 定时执行任务

    2 代码解析

    2.1 如何获取QQ邮箱SMTP授权码

    如何获取SMTP授权码。它并不是QQ邮箱的登录密码,而是一个程序自动发送邮件所需的授权码。
    第一步:登录QQ邮箱,单击顶部的“设置”链接,然后单击“账户”标签,如下图所示。

第二步:在“账户”选项卡中向下滚动,直到看到如下图所示的选项,单击“POP3/SMTP服务”右侧的“开启”链接,如下图所示。

第三步:单击“开启”链接后,会有一个验证密保的过程。按照页面中的说明,向指定号码发送指定内容的手机短信,发送完毕后单击页面中的“我已发送”按钮,会弹出一个框,里面就包含SMTP授权码,把它复制并存储起来,方便以后调用。

2.2 利用QQ邮箱发送消息

发送邮件代码

  1. #导入引用库
  2. import smtplib
  3. from email.mime.text import MIMEText
  4. user = '496077837@qq.com' #发件人的邮箱
  5. pwd = "waygnbcxkazsbjbb" #QQ邮箱的SMTP授权码
  6. to = '496077837@qq.com' #收件人的邮箱,多个收件人用英文逗号隔开
  7. # 1.邮件正文内容
  8. msg = MIMEText("测试邮件正文内容")
  9. #2.设置邮件主题、发件人、收件人
  10. msg["Subject"] = '测试邮件主题!' #设置邮件的主题
  11. msg["From"] = user #设置发件人
  12. msg["To"] = to #设置收件人
  13. #3.发送邮件
  14. s = smtplib.SMTP_SSL("smtp.qq.com", 465) #选择qq邮箱服务,默认端口为465
  15. s.login(user, pwd) #登陆邮箱
  16. s.send_message(msg) #发送邮件
  17. s.quit() #退出QQ邮箱服务
  18. print("Success!")

设置SMTP代码

  1. s = smtplib.SMTP_SSL("smtp服务器地址", 端口)
  2. s = smtplib.SMTP_SSL("smtp.qq.com", 465) #选择qq邮箱服务,默认端口为465

加入try-except捕获异常

  1. #导入引用库
  2. import smtplib
  3. from email.mime.text import MIMEText
  4. user = '496077837@qq.com' #发件人的邮箱
  5. pwd = "waygnbcxkazsbjbb" #QQ邮箱的SMTP授权码
  6. to = '496077837@qq.com' #收件人的邮箱,多个收件人用英文逗号隔开
  7. # 1.邮件正文内容
  8. msg = MIMEText("测试邮件正文内容")
  9. #2.设置邮件主题、发件人、收件人
  10. msg["Subject"] = '测试邮件主题!' #设置邮件的主题
  11. msg["From"] = user #设置发件人
  12. msg["To"] = to #设置收件人
  13. #3.发送邮件
  14. try:
  15. s = smtplib.SMTP_SSL("smtp.qq.com", 465) #选择qq邮箱服务,默认端口为465
  16. s.login(user, pwd) #登陆邮箱
  17. s.send_message(msg) #发送邮件
  18. s.quit() #退出QQ邮箱服务
  19. print("Success!")
  20. except Exception as e:
  21. print("send email failed! next is the reason")
  22. print(e)

2.3 发送HTML格式的邮件

核心代码

  1. <p>段落内容</p>
  2. <a href = "链接地址">文本内容</a>
  3. <p style = "margin:0 atuto">内容</p>
  4. # margin表示边距,0表示上下边距为0, auto表示自动调整左右边距。

正文代码编辑

  1. mail_msg = '''
  2. <p><a href = "https://www.cde.org.cn/">国家药品审评中心</a></p>
  3. '''
  4. mail_msg = []
  5. mail_msg.append('<p>尊敬的用户,您好,以下是今天的竞争情报:</p>')
  6. href = "https://www.cde.org.cn/main/xxgk/listpage/9f9c74c73e0f8f56a8bfbc646055026d"

2.4 定时执行任务

  1. import smtplib
  2. from email.mime.text import MIMEText
  3. import schedule
  4. import time
  5. def Send_mail():
  6. print("小主,可以吃饭啦!")
  7. #定时执行的代码
  8. #schedule.every().day.at("09:03").do(eating) #每天定时执行任务
  9. schedule.every(1).minutes.do(Send_mail) #每隔1分钟定时执行任务
  10. #schedule.every().hour.do(eating) #每隔1小时间定时执行任务
  11. #schedule.every().monday.at("12:00").do(eating) #每周一定时执行任务
  12. while True: #让程序一直运行
  13. schedule.run_pending() #运行所有可以运行的schedule任务
  14. time.sleep(10) #程序休眠10s

2.5 读取excel数据的代码

  1. #读取excel文件中的数据.py
  2. import xlwings as xw
  3. import pandas as pd
  4. def read_excel(path):
  5. #读取excel文件中的数据
  6. app = xw.App(visible = False, add_book = False) #打开excel程序
  7. workbook = app.books.open(path) #打开数据工作簿
  8. worksheet = workbook.sheets[0] #选中第一个工作表
  9. values = worksheet.range("A1").expand().options(pd.DataFrame, index = False).value #提取表中的数据
  10. print(values)
  11. workbook.close() #关闭工作簿
  12. app.quit() #关闭excel程序
  13. return values
  14. path = "data.xlsx" #指定文件所在路径
  15. values = read_excel(path) #调用read_excel模块读取数据

4 全代码

  1. #读取excel文件中的数据.py
  2. import smtplib
  3. from email.mime.text import MIMEText
  4. import schedule
  5. import time
  6. import xlwings as xw
  7. import pandas as pd
  8. def read_excel(path):
  9. #读取excel文件中的数据
  10. app = xw.App(visible = False, add_book = False) #打开excel程序
  11. workbook = app.books.open(path) #打开数据工作簿
  12. worksheet = workbook.sheets[0] #选中第一个工作表
  13. values = worksheet.range("A1").expand().options(pd.DataFrame, index = False).value #提取表中的数据
  14. print(values)
  15. workbook.close() #关闭工作簿
  16. app.quit() #关闭excel程序
  17. return values
  18. def Send_mail():
  19. user = '496077837@qq.com' #发件人的邮箱
  20. pwd = "waygnbcxkazsbjbb" #QQ邮箱的SMTP授权码
  21. to = '496077837@qq.com' #收件人的邮箱,多个收件人用英文逗号隔开
  22. values = read_excel(path) #调用read_excel模块读取数据
  23. mail_msg = []
  24. mail_msg.append('<p>小主,您好,以下是今天的竞争情报,请查阅:</p>')
  25. for i in range(len(values)):
  26. data_value = values.iloc[i] #选中一行数据
  27. name = data_value['药品名称']
  28. company = data_value['企业名称']
  29. href = data_value['访问地址']
  30. hrefd = '<p style = "margin:0 auto"><a href = "' + href+'">'+str(i+1)+name+'——'+company+'</a></p>'
  31. print(hrefd)
  32. mail_msg.append(hrefd)
  33. mail_msg.append('<p style = "margin:0 auto">祝好!</p>')
  34. mail_msg.append('<p style = "margin:0 auto">小蟒</p>')
  35. mail_msg = '\n'.join(mail_msg)
  36. msg = MIMEText(mail_msg, "html", "utf-8") #添加正文内容
  37. #2.设置邮件主题、发件人、收件人
  38. msg["Subject"] = '测试邮件主题!' #设置邮件的主题
  39. msg["From"] = user #设置发件人
  40. msg["To"] = to #设置收件人
  41. #3.发送邮件
  42. try:
  43. s = smtplib.SMTP_SSL("smtp.qq.com", 465) #选择qq邮箱服务,默认端口为465
  44. #s = smtplib.SMTP_SSL("smtp.163.com", 465) #选择163邮箱服务,默认端口为465
  45. s.login(user, pwd) #登陆邮箱
  46. s.send_message(msg) #发送邮件
  47. s.quit() #退出QQ邮箱服务
  48. print("Success!")
  49. except Exception as e:
  50. print("send email failed! next is the reason")
  51. print(e)
  52. path = "data.xlsx" #指定文件所在路径
  53. #values = read_excel(path) #调用read_excel模块读取数据
  54. #定时执行的代码
  55. #schedule.every().day.at("09:03").do(eating) #每天定时执行任务
  56. schedule.every(1).minutes.do(Send_mail) #每隔1分钟定时执行任务
  57. #schedule.every().hour.do(eating) #每隔1小时间定时执行任务
  58. #schedule.every().monday.at("12:00").do(eating) #每周一定时执行任务
  59. while True: #让程序一直运行
  60. schedule.run_pending() #运行所有可以运行的schedule任务
  61. time.sleep(10)