import os import logging from typing import Optional import mailtrap as mt from utils.config import config logger = logging.getLogger(__name__) class EmailService: def __init__(self): self.api_token = os.getenv('MAILTRAP_API_TOKEN') self.sender_email = os.getenv('MAILTRAP_SENDER_EMAIL', 'dom@kortix.ai') self.sender_name = os.getenv('MAILTRAP_SENDER_NAME', 'Suna Team') if not self.api_token: logger.warning("MAILTRAP_API_TOKEN not found in environment variables") self.client = None else: self.client = mt.MailtrapClient(token=self.api_token) def send_welcome_email(self, user_email: str, user_name: Optional[str] = None) -> bool: if not self.client: logger.error("Cannot send email: MAILTRAP_API_TOKEN not configured") return False if not user_name: user_name = user_email.split('@')[0].title() subject = "🎉 Welcome to Suna — Let's Get Started " html_content = self._get_welcome_email_template(user_name) text_content = self._get_welcome_email_text(user_name) return self._send_email( to_email=user_email, to_name=user_name, subject=subject, html_content=html_content, text_content=text_content ) def _send_email( self, to_email: str, to_name: str, subject: str, html_content: str, text_content: str ) -> bool: try: mail = mt.Mail( sender=mt.Address(email=self.sender_email, name=self.sender_name), to=[mt.Address(email=to_email, name=to_name)], subject=subject, text=text_content, html=html_content, category="welcome" ) response = self.client.send(mail) logger.info(f"Welcome email sent to {to_email}. Response: {response}") return True except Exception as e: logger.error(f"Error sending email to {to_email}: {str(e)}") return False def _get_welcome_email_template(self, user_name: str) -> str: return f"""
Hi {user_name},
Welcome to Kortix Suna — we're excited to have you on board!
To get started, we'd like to get to know you better: fill out this short form!
To celebrate your arrival, here's a 15% discount for your first month to get more usage:
🎁 Use code WELCOME15 at checkout.
Let us know if you need help getting started or have questions — we're always here, and join our Discord community.
For your business: if you want to automate manual and ordinary tasks for your company, book a call with us here
Thanks again, and welcome to the Suna community 🌞
— The Suna Team
Go to the platform