feat: add email_send orchestrator tool
Wraps the existing email_utils.send_email helper as an admin-only tool. Accepts to, subject, body (plain text); newlines converted to <br> for HTML part. Registered in _CALLABLES, _ALL_DECLARATIONS, and TOOL_ROLES (admin). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -2,9 +2,10 @@
|
||||
Notification tools — proactively send messages to user channels.
|
||||
|
||||
nc_talk_send routes through notification.py → channels.json.
|
||||
Requires notification_channel and notification_room set in the user's channels.json.
|
||||
email_send uses the server SMTP config from .env (smtp_server, smtp_from_*).
|
||||
"""
|
||||
|
||||
import asyncio
|
||||
import logging
|
||||
|
||||
from persona import get_user
|
||||
@@ -12,6 +13,21 @@ from persona import get_user
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
async def email_send(to: str, subject: str, body: str) -> str:
|
||||
"""Send an email via the server's configured SMTP account."""
|
||||
from email_utils import send_email
|
||||
ok = await asyncio.to_thread(
|
||||
send_email,
|
||||
to_email=to,
|
||||
subject=subject,
|
||||
body_text=body,
|
||||
body_html=body.replace("\n", "<br>"),
|
||||
)
|
||||
if ok:
|
||||
return f"Email sent to {to}."
|
||||
return "Failed to send email — check SMTP configuration in .env."
|
||||
|
||||
|
||||
async def nc_talk_send(message: str) -> str:
|
||||
"""Send a message to the user via their configured notification channel.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user