tools.win_pg_dump_controller

Yohn Y. 2022-06-13 Parent:34db5b44491d

6:26558a3ee4f3 Go to Latest

tools.win_pg_dump_controller/win_pg_dump_controller/smtp_connector.py

Добавлен GIT репозиторий для тестов

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