from email.mime.text import MIMEText import logging import smtplib from .wechat import WeChat class Sender: def __init__(self, smtp_options=None, wechat_options=None) -> None: self.smtp = None self.wechat = None if smtp_options: try: self.__init_smtp(**smtp_options) except Exception as e: logging.exception('smtp login failed', exc_info=e) if wechat_options: try: self.wechat = WeChat(**wechat_options) except Exception as e: logging.exception('wechat login failed', exc_info=e) def __init_smtp(self, server, port, user, password, sender): self.smtp = smtplib.SMTP_SSL(server, port) self.smtp.login(user, password) self.smtp_from = sender logging.info('smtp login successful') def send_mail(self, to, text, subject=None): if not self.smtp: return msg = MIMEText(text, 'plain', 'utf-8') if subject: msg['Subject'] = subject msg['From'] = self.smtp_from msg['To'] = to try: self.smtp.sendmail(self.smtp.user, to, msg.as_bytes()) logging.info('send mail successful') except Exception as e: logging.exception('send mail failed', exc_info=e) def send_wechat(self, touser, msg): if not self.wechat: return try: self.wechat.send(touser, msg) logging.info('send wechat successful') except Exception as e: logging.exception('send wechat failed', exc_info=e) def send(self, msg, subject=None, mail=None, wechat=None, phone=None): if mail: self.send_mail(mail, msg, subject) if wechat: self.send_wechat(wechat, msg)