tools.win_pg_dump_controller

Yohn Y. 2022-05-05 Parent:7c93b0305522

3:34db5b44491d Go to Latest

tools.win_pg_dump_controller/win_pg_dump_controller/smtp_connector.py

* Орфография в `README` . Рефакторинг в полученном модуле

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 ):
23 self.server = server
24 self.mail_from = mail_from
25 self.mail_to = mail_to if mail_to is not None else 'root'
26 self.port = port if port is not None else 25
28 def sendmail(self, content: str, logs: List[str]) -> None:
29 if self.server:
30 msg = EmailMessage()
31 msg['To'] = self.mail_to
32 if self.mail_from:
33 msg['From'] = self.mail_from
35 msg['Subject'] = f'{gethostname()}: Posgres backup - {datetime.now()}'
36 msg.set_content(content)
37 msg.make_mixed()
38 for f in logs:
39 try:
40 if exists(f):
41 msg.add_attachment(open(f).read(), filename=basename(f))
43 except IOError as e:
44 raise MailError(f'Error on open logfile "{f}": {e}')
46 try:
47 s = SMTP(host=self.server, port=self.port)
48 s.helo(gethostname())
49 s.sendmail(
50 from_addr=(self.mail_from if self.mail_from is not None else ''),
51 to_addrs=self.mail_to,
52 msg=msg.as_bytes()
53 )
54 s.quit()
55 except SMTPException as e:
56 raise MailError(f'Error on sending Email: {e}')
58 @classmethod
59 def from_config(cls, config: Config):
60 return cls(
61 server=config.smtp_server,
62 mail_from=config.mail_from,
63 mail_to=config.mail_to,
64 port=config.smtp_port
65 )