agentic.email/backend/app/services/org_invitations.py
2026-10-04 21:02:19 +05:30

56 lines
1.8 KiB
Python

"""Employee invitation emails sent from the platform domain."""
from __future__ import annotations
from sqlalchemy.ext.asyncio import AsyncSession
from app.config import get_settings
from app.models import Account
from app.services.domain_provisioning import get_domain_by_name
from app.services.email_templates import BRAND_NAME, build_employee_invitation_email
from app.services.mail_sender import deliver_email
async def send_employee_invitation(
session: AsyncSession,
*,
member: Account,
manager: Account,
initial_password: str,
force_password_change: bool,
) -> None:
if not member.invitation_email:
raise ValueError("Invitation email is required.")
settings = get_settings()
platform_domain = await get_domain_by_name(session, settings.platform_domain)
if platform_domain is None:
raise ValueError("Platform mail domain is not configured.")
login_url = f"https://{settings.app_public_host}/login"
manager_name = f"{manager.first_name} {manager.last_name}".strip()
company = member.company_domain or settings.platform_domain
subject, body_text, body_html = build_employee_invitation_email(
member_first_name=member.first_name,
member_email=member.email,
manager_name=manager_name,
manager_email=manager.email,
company_domain=company,
login_url=login_url,
initial_password=initial_password,
force_password_change=force_password_change,
)
sender = f"{BRAND_NAME} <noreply@{settings.platform_domain}>"
await deliver_email(
sender=sender,
recipients=[member.invitation_email],
cc=[],
bcc=[],
subject=subject,
body_text=body_text,
body_html=body_html,
domain=platform_domain,
reply_to=manager.email,
)