Spaces:
Runtime error
Runtime error
from typing import Optional | |
from phi.tools import Toolkit | |
from phi.utils.log import logger | |
class EmailTools(Toolkit): | |
def __init__( | |
self, | |
receiver_email: Optional[str] = None, | |
sender_name: Optional[str] = None, | |
sender_email: Optional[str] = None, | |
sender_passkey: Optional[str] = None, | |
): | |
super().__init__(name="email_tools") | |
self.receiver_email: Optional[str] = receiver_email | |
self.sender_name: Optional[str] = sender_name | |
self.sender_email: Optional[str] = sender_email | |
self.sender_passkey: Optional[str] = sender_passkey | |
self.register(self.email_user) | |
def email_user(self, subject: str, body: str) -> str: | |
"""Emails the user with the given subject and body. | |
:param subject: The subject of the email. | |
:param body: The body of the email. | |
:return: "success" if the email was sent successfully, "error: [error message]" otherwise. | |
""" | |
try: | |
import smtplib | |
from email.message import EmailMessage | |
except ImportError: | |
logger.error("`smtplib` not installed") | |
raise | |
if not self.receiver_email: | |
return "error: No receiver email provided" | |
if not self.sender_name: | |
return "error: No sender name provided" | |
if not self.sender_email: | |
return "error: No sender email provided" | |
if not self.sender_passkey: | |
return "error: No sender passkey provided" | |
msg = EmailMessage() | |
msg["Subject"] = subject | |
msg["From"] = f"{self.sender_name} <{self.sender_email}>" | |
msg["To"] = self.receiver_email | |
msg.set_content(body) | |
logger.info(f"Sending Email to {self.receiver_email}") | |
try: | |
with smtplib.SMTP_SSL("smtp.gmail.com", 465) as smtp: | |
smtp.login(self.sender_email, self.sender_passkey) | |
smtp.send_message(msg) | |
except Exception as e: | |
logger.error(f"Error sending email: {e}") | |
return f"error: {e}" | |
return "email sent successfully" | |