From 0a5e137cc3589df98718005241007d3574b5e31e Mon Sep 17 00:00:00 2001 From: vitor-aignosi Date: Wed, 30 Jul 2025 08:29:11 -0300 Subject: [PATCH] SIENTIAPDE-1172 SIENTIAPDE-1172 feat: update email configuration and enhance email sending functionality - Changed EMAIL_SENDER in values.yaml to a new email address. - Updated EMAIL_SENDER_PASSWORD key reference in values.yaml for improved security. - Added PostgreSQL configuration parameters to values.yaml for database connectivity. - Refactored Email class to include a new send_email method for better error handling during email transmission. - Implemented reconnection logic for SMTP server disconnections to ensure reliable email delivery. --- orchestrator/activities/email.py | 32 ++++++++++++++++++++++++++++++-- values.yaml | 20 ++++++++++++++++++-- 2 files changed, 48 insertions(+), 4 deletions(-) diff --git a/orchestrator/activities/email.py b/orchestrator/activities/email.py index e85ee30..3030e91 100644 --- a/orchestrator/activities/email.py +++ b/orchestrator/activities/email.py @@ -1,4 +1,5 @@ +from smtplib import SMTPServerDisconnected from temporalio import workflow, activity with workflow.unsafe.imports_passed_through(): @@ -25,6 +26,7 @@ class Email(BaseActivity): self.sender_email = sender_email self.sender_password = sender_password self.smtp_port = smtp_port + self.smtp_server = smtp_server logger.info(f"Initializing Email with {smtp_server}:{smtp_port}") @@ -99,6 +101,33 @@ class Email(BaseActivity): return msg + def send_email(self, msg: MIMEMultipart, receivers: list[str]): + """ + Sends an email to the receivers. + """ + + try: + self.server.sendmail( + self.sender_email, receivers, msg.as_string()) + except SMTPServerDisconnected as e: + self.logger.error(f"SMTP server disconnected: {e}") + self.logger.info( + f"Reconnecting to {self.smtp_server}:{self.smtp_port}") + + if self.server: + try: + self.server.quit() + except SMTPServerDisconnected as e: + self.logger.info(f"Server already disconnected: {e}") + except Exception as e: + self.logger.error(f"Failed to quit server: {e}") + raise e + + self.server = smtplib.SMTP(self.smtp_server, self.smtp_port) + self.server.starttls() + self.server.login(self.sender_email, self.sender_password) + self.server.sendmail(self.sender_email, receivers, msg.as_string()) + @activity.defn(name="send_email") async def send_email(self, input_data: dict[str, Any]) -> dict[str, Any]: """ @@ -138,8 +167,7 @@ class Email(BaseActivity): if notification.get('attachment_content') is not None], msg) - self.server.sendmail( - self.sender_email, receivers, msg.as_string()) + self.send_email(msg, receivers) except Exception as e: self.error(f"Failed to send email to {group_name}: {e}", metadata=metadata) diff --git a/values.yaml b/values.yaml index a9502de..570ae29 100644 --- a/values.yaml +++ b/values.yaml @@ -171,17 +171,33 @@ env: value: "1" - name: EMAIL_SENDER - value: "sientia-alerts@aignosi.com" + value: "vitor.santos@aignosi.com.br" - name: EMAIL_SENDER_PASSWORD valueFrom: secretKeyRef: name: smtp-credentials - key: sender-password + key: app_password - name: EMAIL_SMTP_SERVER value: "smtp.gmail.com" - name: EMAIL_SMTP_PORT value: "587" + # Application variables + - name: POSTGRES_HOST + value: "paradedb-rw.paradedb.svc.cluster.local" + - name: POSTGRES_PORT + value: "5432" + - name: POSTGRES_USER + value: "sientia" + - name: POSTGRES_PASSWORD + value: "sientia" + - name: POSTGRES_DBNAME + value: "sientia" + - name: POSTGRES_MIN_CONNECTIONS + value: "10" + - name: POSTGRES_MAX_CONNECTIONS + value: "40" + - name: KAFKA_BOOTSTRAP_SERVERS value: "kafka.kafka.svc.cluster.local:9092"