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""" Welcome to Kortix Suna

Welcome to Kortix Suna!

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
""" def _get_welcome_email_text(self, user_name: str) -> str: return f"""Hi {user_name}, Welcome to 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! https://docs.google.com/forms/d/e/1FAIpQLSef1EHuqmIh_iQz-kwhjnzSC3Ml-V_5wIySDpMoMU9W_j24JQ/viewform 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: https://discord.com/invite/FjD644cfcs For your business: if you want to automate manual and ordinary tasks for your company, book a call with us here: https://cal.com/team/kortix/enterprise-demo Thanks again, and welcome to the Suna community 🌞 — The Suna Team Go to the platform: https://www.suna.so/ --- © 2024 Suna. All rights reserved. You received this email because you signed up for a Suna account.""" email_service = EmailService()