refactor: Powiadomienia email przez Microsoft Graph zamiast SMTP
- Używa istniejącego email_service.py z Microsoft Graph API - Ładniejszy HTML email z dark theme - Usunięto niepotrzebne importy smtplib/MIMEText Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
3584bba717
commit
acae42869c
71
app.py
71
app.py
@ -34,10 +34,7 @@ from werkzeug.security import generate_password_hash, check_password_hash
|
||||
from dotenv import load_dotenv
|
||||
from user_agents import parse as parse_user_agent
|
||||
import uuid
|
||||
import smtplib
|
||||
import traceback as tb_module
|
||||
from email.mime.text import MIMEText
|
||||
from email.mime.multipart import MIMEMultipart
|
||||
|
||||
# Load environment variables (override any existing env vars)
|
||||
# Try .env first, then nordabiz_config.txt for production flexibility
|
||||
@ -12595,13 +12592,15 @@ def not_found(error):
|
||||
|
||||
|
||||
def send_error_notification(error, request_info):
|
||||
"""Send email notification about 500 errors"""
|
||||
"""Send email notification about 500 errors via Microsoft Graph"""
|
||||
try:
|
||||
smtp_host = os.getenv('SMTP_HOST', 'localhost')
|
||||
smtp_port = int(os.getenv('SMTP_PORT', 25))
|
||||
mail_from = os.getenv('MAIL_FROM', 'noreply@nordabiznes.pl')
|
||||
error_email = os.getenv('ERROR_NOTIFY_EMAIL', 'maciej.pienczyn@inpi.pl')
|
||||
from email_service import send_email, is_configured
|
||||
|
||||
if not is_configured():
|
||||
logger.warning("Email service not configured - skipping error notification")
|
||||
return
|
||||
|
||||
error_email = os.getenv('ERROR_NOTIFY_EMAIL', 'maciej.pienczyn@inpi.pl')
|
||||
if not error_email:
|
||||
return
|
||||
|
||||
@ -12611,8 +12610,7 @@ def send_error_notification(error, request_info):
|
||||
|
||||
subject = f"🚨 NordaBiz ERROR 500: {request_info.get('path', 'Unknown')}"
|
||||
|
||||
body = f"""
|
||||
⚠️ BŁĄD 500 NA NORDABIZNES.PL
|
||||
body_text = f"""⚠️ BŁĄD 500 NA NORDABIZNES.PL
|
||||
{'='*50}
|
||||
|
||||
🕐 Czas: {error_time}
|
||||
@ -12635,16 +12633,53 @@ def send_error_notification(error, request_info):
|
||||
🔧 Sprawdź logi: ssh maciejpi@10.22.68.249 "sudo journalctl -u nordabiznes --since '10 minutes ago'"
|
||||
"""
|
||||
|
||||
msg = MIMEMultipart()
|
||||
msg['From'] = mail_from
|
||||
msg['To'] = error_email
|
||||
msg['Subject'] = subject
|
||||
msg.attach(MIMEText(body, 'plain', 'utf-8'))
|
||||
body_html = f"""<!DOCTYPE html>
|
||||
<html>
|
||||
<head><meta charset="UTF-8"></head>
|
||||
<body style="font-family: 'Courier New', monospace; background: #1e1e1e; color: #d4d4d4; padding: 20px;">
|
||||
<div style="max-width: 800px; margin: 0 auto;">
|
||||
<div style="background: #dc2626; color: white; padding: 15px 20px; border-radius: 8px 8px 0 0;">
|
||||
<h1 style="margin: 0; font-size: 20px;">🚨 BŁĄD 500 NA NORDABIZNES.PL</h1>
|
||||
</div>
|
||||
<div style="background: #2d2d2d; padding: 20px; border-radius: 0 0 8px 8px;">
|
||||
<table style="width: 100%; border-collapse: collapse;">
|
||||
<tr><td style="color: #9ca3af; padding: 5px 0;">🕐 Czas:</td><td style="color: #fbbf24;">{error_time}</td></tr>
|
||||
<tr><td style="color: #9ca3af; padding: 5px 0;">🌐 URL:</td><td style="color: #60a5fa; word-break: break-all;">{request_info.get('url', 'N/A')}</td></tr>
|
||||
<tr><td style="color: #9ca3af; padding: 5px 0;">📍 Ścieżka:</td><td style="color: #34d399;">{request_info.get('path', 'N/A')}</td></tr>
|
||||
<tr><td style="color: #9ca3af; padding: 5px 0;">📝 Metoda:</td><td>{request_info.get('method', 'N/A')}</td></tr>
|
||||
<tr><td style="color: #9ca3af; padding: 5px 0;">👤 Użytkownik:</td><td>{request_info.get('user', 'Anonimowy')}</td></tr>
|
||||
<tr><td style="color: #9ca3af; padding: 5px 0;">🖥️ IP:</td><td>{request_info.get('ip', 'N/A')}</td></tr>
|
||||
</table>
|
||||
<div style="margin-top: 20px; padding: 15px; background: #1e1e1e; border-radius: 8px; border-left: 4px solid #dc2626;">
|
||||
<div style="color: #f87171; font-weight: bold; margin-bottom: 10px;">📋 BŁĄD:</div>
|
||||
<pre style="margin: 0; white-space: pre-wrap; color: #fca5a5;">{str(error)}</pre>
|
||||
</div>
|
||||
<div style="margin-top: 20px; padding: 15px; background: #1e1e1e; border-radius: 8px; border-left: 4px solid #f59e0b;">
|
||||
<div style="color: #fbbf24; font-weight: bold; margin-bottom: 10px;">📜 TRACEBACK:</div>
|
||||
<pre style="margin: 0; white-space: pre-wrap; font-size: 12px; color: #9ca3af; max-height: 400px; overflow: auto;">{traceback_str}</pre>
|
||||
</div>
|
||||
<div style="margin-top: 20px; padding: 15px; background: #1e3a5f; border-radius: 8px;">
|
||||
<div style="color: #60a5fa;">🔧 <strong>Sprawdź logi:</strong></div>
|
||||
<code style="display: block; margin-top: 10px; color: #34d399; word-break: break-all;">ssh maciejpi@10.22.68.249 "sudo journalctl -u nordabiznes --since '10 minutes ago'"</code>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>"""
|
||||
|
||||
with smtplib.SMTP(smtp_host, smtp_port, timeout=10) as server:
|
||||
server.sendmail(mail_from, [error_email], msg.as_string())
|
||||
result = send_email(
|
||||
to=[error_email],
|
||||
subject=subject,
|
||||
body_text=body_text,
|
||||
body_html=body_html,
|
||||
email_type='error_notification'
|
||||
)
|
||||
|
||||
if result:
|
||||
logger.info(f"Error notification sent to {error_email}")
|
||||
else:
|
||||
logger.error(f"Failed to send error notification to {error_email}")
|
||||
|
||||
logger.info(f"Error notification sent to {error_email}")
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to send error notification: {e}")
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user