def publishMessage(self, topic, data): host = self.config.getValue(ConfigConst.SMTP_CLOUD_SECTION, ConfigConst.HOST_KEY) port = self.config.getValue(ConfigConst.SMTP_CLOUD_SECTION, ConfigConst.PORT_KEY) fromAddr = self.config.getValue(ConfigConst.SMTP_CLOUD_SECTION, ConfigConst.FROM_ADDRESS_KEY) toAddr = self.config.getValue(ConfigConst.SMTP_CLOUD_SECTION, ConfigConst.TO_ADDRESS_KEY) authToken = self.config.getValue(ConfigConst.SMTP_CLOUD_SECTION, ConfigConst.USER_AUTH_TOKEN_KEY) msg = MIMEMultipart() msg['From'] = fromAddr msg['To'] = toAddr msg['Subject'] = topic msgBody = str(data) msg.attach(MIMEText(msgBody)) msgText = msg.as_string() SMTPServer = smtplib.SMTP_SSL(host, port) SMTPServer.ehlo() SMTPServer.login(fromAddr, authToken) SMTPServer.sendmail(fromAddr, toAddr, msgText) SMTPServer.close()
class BaseMailer(ABC): def __init__(self): smtp_local_host = env_vars['SMTP_LOCAL_HOST'] smtp_local_port = int(env_vars['SMTP_LOCAL_PORT']) smtp_remote_host = env_vars['SMTP_REMOTE_HOST'] smtp_remote_port = int(env_vars['SMTP_REMOTE_PORT']) self.smtp_local_address = (smtp_local_host, smtp_local_port) self.smtp_remote_address = (smtp_remote_host, smtp_remote_port) self.sender_email = env_vars['SENDER_EMAIL'] self.sender_password = env_vars['SENDER_PASSWORD'] self.receiver_email = env_vars['RECEIVER_EMAIL'] self.parsed_data = [] self.initialize_smtp_server() @property @abstractmethod def email_body(self): pass def initialize_smtp_server(self): self.smtp_server = SMTPServer(self.smtp_local_address, self.smtp_remote_address) def send_email(self, parsed_data): self.parsed_data = parsed_data context = create_default_context() with SMTP_SSL('smtp.gmail.com', 465, context=context) as server: server.login(self.sender_email, self.sender_password) server.sendmail(self.sender_email, self.receiver_email, self.email_body) server.quit() self.smtp_server.close()