AmmarFahmy
adding all files
105b369
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"