Status: Aktiv
Zeitpunkt: {datetime.now().strftime('%d.%m.%Y %H:%M:%S')}
OPNsense Monitoring ist aktiv und überwacht folgende Events:
- DHCP Leases
- Neue Geräte (ARP)
- Interface Status
- Gateway Status
import smtplib import logging from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from datetime import datetime from typing import Dict, List logger = logging.getLogger(__name__) class EmailHandler: """Handle email notifications for Watchdog events""" def __init__(self, config: Dict): self.config = config self.smtp_server = config['smtp_server'] self.smtp_port = config['smtp_port'] self.smtp_use_tls = config['smtp_use_tls'] self.smtp_username = config['smtp_username'] self.smtp_password = config['smtp_password'] self.from_address = config['from_address'] self.to_addresses = config['to_addresses'] logger.info(f"EmailHandler initialized for {self.smtp_server}:{self.smtp_port}") def _send_email(self, subject: str, html_content: str): """Send an email""" try: # Create message msg = MIMEMultipart('alternative') msg['Subject'] = subject msg['From'] = self.from_address msg['To'] = ', '.join(self.to_addresses) # Add HTML content html_part = MIMEText(html_content, 'html') msg.attach(html_part) # Send email with smtplib.SMTP(self.smtp_server, self.smtp_port) as server: if self.smtp_use_tls: server.starttls() server.login(self.smtp_username, self.smtp_password) server.send_message(msg) logger.info(f"Email sent: {subject}") return True except Exception as e: logger.error(f"Failed to send email: {e}", exc_info=True) return False def send_event_notification(self, event: Dict): """Send notification for a single event""" subject = self._format_subject(event) html_content = self._format_event_email(event) self._send_email(subject, html_content) def send_startup_notification(self): """Send notification when Watchdog starts""" subject = "🟢 Watchdog Docker gestartet" html_content = f"""
Monitoring gestartet
Status: Aktiv
Zeitpunkt: {datetime.now().strftime('%d.%m.%Y %H:%M:%S')}
OPNsense Monitoring ist aktiv und überwacht folgende Events:
{event.get('details', 'Event detected')}