gateway/modules/connectors/connectorMessagingEmail.py
2025-12-15 21:55:26 +01:00

88 lines
2.9 KiB
Python

# Copyright (c) 2025 Patrick Motsch
# All rights reserved.
"""
Azure Communication Services Email Connector
Handles email sending via Azure Communication Services
"""
import logging
from typing import Optional
from azure.communication.email import EmailClient
from modules.shared.configuration import APP_CONFIG
logger = logging.getLogger(__name__)
class ConnectorMessagingEmail:
"""
Azure Communication Services Email connector.
Handles email sending.
"""
def __init__(self):
"""
Initialize Azure Communication Services Email client using APP_CONFIG.
"""
try:
connectionString = APP_CONFIG.get("MESSAGING_ACS_CONNECTION_STRING")
senderEmail = APP_CONFIG.get("MESSAGING_ACS_SENDER_EMAIL")
if not connectionString or not senderEmail:
logger.warning("Azure Communication Services credentials not configured for email")
self._client = None
self._senderEmail = None
return
self._client = EmailClient.from_connection_string(connectionString)
self._senderEmail = senderEmail
logger.info("Azure Communication Services Email client initialized successfully")
except Exception as e:
logger.error(f"Failed to initialize Azure Communication Services Email client: {e}")
self._client = None
self._senderEmail = None
def send(self, recipient: str, subject: str, message: str) -> bool:
"""
Send an email via Azure Communication Services.
Args:
recipient: Recipient email address
subject: Email subject
message: Email message content (can be HTML)
Returns:
bool: True if successful, False otherwise
"""
if not self._client or not self._senderEmail:
logger.error("Azure Communication Services Email client not initialized")
return False
try:
messageData = {
"senderAddress": self._senderEmail,
"recipients": {
"to": [{"address": recipient}]
},
"content": {
"subject": subject,
"html": message
}
}
# Try both API versions for compatibility
try:
poller = self._client.begin_send(messageData)
poller.result()
except AttributeError:
poller = self._client.begin_send_message(messageData)
poller.result()
logger.info(f"Email sent successfully to {recipient}")
return True
except Exception as e:
logger.error(f"Failed to send email to {recipient}: {e}")
return False