基于python的定时邮件通知实现
现在很多系统消息推送都是采用的邮件推送,本文使用QQ邮箱进行推送
- cduIPSautoDaemon.py
from apscheduler.schedulers.blocking import BlockingScheduler
from datetime import datetime
from cduIPSautoCheck import cduIPSautoCheck
if __name__ == '__main__':
# BlockingScheduler
scheduler = BlockingScheduler()
scheduler.add_job(cduIPSautoCheck, 'cron',
day_of_week='0-6', hour=8, minute=30)
scheduler.add_job(cduIPSautoCheck, 'cron',
day_of_week='0-6', hour=21, minute=30)
scheduler.start()
- cduIPSautoCheck.py
# auhor: tangyoha
# date: 2020/4/13
from sendqqemail import QQMail
my_sender = 'tangyoha@qq.com'#你的QQ邮箱
my_pass = ''#你的邮箱凭证
# 负责mail分送
class MailModule:
def __init__(self):
self.sender_dist = {}
self.sender_str = {}
self.sender_result = {}
def login(self, sender_eamil, author_code):
self.qq_mail_engine = QQMail(sender_eamil, author_code)
def set_users(self, users):
for user in users:
self.sender_dist[user.email_name] = False
def send_email(self, recv_eamil: str, send_str: str):
if self.sender_dist[recv_eamil]:
print("已经发送过了")
return
self.sender_dist[recv_eamil] = True
self.sender_str[recv_eamil] = send_str
def done(self):
for item in self.sender_dist.keys():
if item in self.sender_str:
res = self.qq_mail_engine.send_email(
item, self.sender_str[item])
self.sender_result[item] = res
sender_admin_str = "尊敬的管理员您好:"+time.strftime(
"%m-%d %H:%M:%S", time.localtime()) + "打卡情况\n"
for item in self.sender_result.keys():
tmp_str = self.sender_str[item]
if self.sender_result[item]:
tmp_str += "--->发送邮件成功\n"
else:
tmp_str += "--->发送邮件失败\n"
sender_admin_str += tmp_str
self.qq_mail_engine.send_email(
"154097969@qq.com", sender_admin_str)
mail_module = MailModule()
def cduIPSautoCheck():
mail_module.login(my_sender, my_pass)
mail_module.done()
- sendqqemail.py
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import smtplib
from email.mime.text import MIMEText
from email.utils import formataddr
class QQMail:
def __init__(self, smtp_email_account, smtp_author_code):
self.smtp_email_account = smtp_email_account
self.smtp_author_code = smtp_author_code
self.smtp_server = smtplib.SMTP_SSL(
"smtp.qq.com", 465) # 发件人邮箱中的SMTP服务器,端口是25
# 括号中对应的是发件人邮箱账号、邮箱密码
self.smtp_server.login(smtp_email_account, smtp_author_code)
def send_email(self, recv_eamil: str, send_str: str):
ret = True
try:
msg = MIMEText(send_str, 'plain', 'utf-8')
# 括号里的对应发件人邮箱昵称、发件人邮箱账号
msg['From'] = formataddr(
["图书馆预约", self.smtp_email_account])
# 括号里的对应收件人邮箱昵称、收件人邮箱账号
msg['To'] = formataddr(["FK", recv_eamil])
msg['Subject'] = "图书馆预约通知" # 邮件的主题,也可以说是标题
self.smtp_server.sendmail(self.smtp_email_account, [
recv_eamil, ], msg.as_string()) # 括号中对应的是发件人邮箱账号、收件人邮箱账号、发送邮件
except Exception as e: # 如果 try 中的语句没有执行,则会执行下面的 ret=False
print(str(e))
ret = False
return ret