基于python的定时邮件通知实现

基于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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值