tools.win_pg_dump_controller

Yohn Y. 2022-05-05 Child:34db5b44491d

2:7c93b0305522 Go to Latest

tools.win_pg_dump_controller/win_pg_dump_controller/smtp_connector.py

+ Возможность отправлять оповещения по почте

History
1 # coding: utf-8
3 from .config import Config
5 from email.message import EmailMessage
6 from smtplib import SMTP, SMTPException
7 from typing import List, Optional
8 from socket import gethostname
9 from datetime import datetime
10 from os.path import basename, exists
13 class MailError(Exception):
14 pass
17 class MailSender(object):
18 def __init__(self,
19 server: Optional[str], port: Optional[int],
20 mail_from: Optional[str], mail_to: Optional[str]):
21 self.server = server
22 self.mail_from = mail_from
23 self.mail_to = mail_to if mail_to is not None else 'root'
24 self.port = port if port is not None else 25
26 def sendmail(self, content: str, logs: List[str]) -> None:
27 if self.server:
28 msg = EmailMessage()
29 msg['To'] = self.mail_to
30 if self.mail_from:
31 msg['From'] = self.mail_from
33 msg['Subject'] = f'{gethostname()}: Posgres backup - {datetime.now()}'
34 msg.set_content(content)
35 msg.make_mixed()
36 for f in logs:
37 try:
38 if exists(f):
39 msg.add_attachment(open(f).read(), filename=basename(f))
41 except IOError as e:
42 raise MailError(f'Error on open logfile "{f}": {e}')
44 try:
45 s = SMTP(host=self.server, port=self.port)
46 s.helo(gethostname())
47 s.sendmail(
48 from_addr=(self.mail_from if self.mail_from is not None else ''),
49 to_addrs=self.mail_to,
50 msg=msg.as_bytes()
51 )
52 s.quit()
53 except SMTPException as e:
54 raise MailError(f'Error on sending Email: {e}')
56 @classmethod
57 def from_config(cls, config: Config):
58 return cls(
59 server=config.smtp_server,
60 mail_from=config.mail_from,
61 mail_to=config.mail_to,
62 port=config.smtp_port
63 )