Add email delivery check command
This commit is contained in:
@@ -24,7 +24,7 @@ from pve_backup_report.coverage import (
|
||||
STATUS_PBS_PLANNED,
|
||||
analyze_backup_coverage,
|
||||
)
|
||||
from pve_backup_report.email_report import EmailReportError, send_report_email
|
||||
from pve_backup_report.email_report import EmailReportError, send_report_email, send_test_email
|
||||
from pve_backup_report.logging_config import configure_logging
|
||||
from pve_backup_report.pbs_client import PbsApiError, PbsClient
|
||||
from pve_backup_report.pve_client import PveApiError, PveClient
|
||||
@@ -50,6 +50,11 @@ def build_parser() -> argparse.ArgumentParser:
|
||||
action="store_true",
|
||||
help="teste les endpoints PVE /nodes, /storage et /cluster/backup puis quitte",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--check-email",
|
||||
action="store_true",
|
||||
help="envoie un email de test avec la configuration SMTP puis quitte",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--dump-inventory",
|
||||
action="store_true",
|
||||
@@ -156,6 +161,15 @@ def run(argv: Sequence[str] | None = None) -> int:
|
||||
)
|
||||
return 3 if has_error else 0
|
||||
|
||||
if args.check_email:
|
||||
try:
|
||||
send_test_email(config.email)
|
||||
except EmailReportError as exc:
|
||||
logger.error("Verification email echouee: %s", exc)
|
||||
return 6
|
||||
logger.info("Email de test envoye a %s", ", ".join(config.email.smtp_to))
|
||||
return 0
|
||||
|
||||
if args.dump_inventory:
|
||||
report_data = collect_data_or_log_error(config, "inventaire")
|
||||
if report_data is None:
|
||||
|
||||
@@ -20,7 +20,25 @@ def send_report_email(config: EmailConfig, pdf_path: Path) -> None:
|
||||
raise EmailReportError("configuration email incomplete")
|
||||
|
||||
message = build_report_message(config, pdf_path)
|
||||
send_email_message(config, message)
|
||||
|
||||
|
||||
def send_test_email(config: EmailConfig) -> None:
|
||||
if not config.enabled:
|
||||
raise EmailReportError("REPORT_EMAIL_ENABLED=false")
|
||||
if config.smtp_host is None or config.smtp_from is None or not config.smtp_to:
|
||||
raise EmailReportError("configuration email incomplete")
|
||||
|
||||
message = build_base_message(config, f"[TEST] {config.subject}")
|
||||
message.set_content(
|
||||
"Bonjour,\n\n"
|
||||
"Ceci est un email de test envoye par PVE Backup Report.\n\n"
|
||||
"Cordialement.\n"
|
||||
)
|
||||
send_email_message(config, message)
|
||||
|
||||
|
||||
def send_email_message(config: EmailConfig, message: EmailMessage) -> None:
|
||||
try:
|
||||
if config.smtp_ssl:
|
||||
with smtplib.SMTP_SSL(
|
||||
@@ -44,13 +62,7 @@ def send_report_email(config: EmailConfig, pdf_path: Path) -> None:
|
||||
|
||||
|
||||
def build_report_message(config: EmailConfig, pdf_path: Path) -> EmailMessage:
|
||||
message = EmailMessage()
|
||||
message["Subject"] = config.subject
|
||||
message["From"] = config.smtp_from or ""
|
||||
message["To"] = ", ".join(config.smtp_to)
|
||||
message["Date"] = formatdate(localtime=True)
|
||||
message["Message-ID"] = make_msgid(domain=message_id_domain(config.smtp_from))
|
||||
message["Auto-Submitted"] = "auto-generated"
|
||||
message = build_base_message(config, config.subject)
|
||||
message.set_content(
|
||||
"Bonjour,\n\n"
|
||||
"Veuillez trouver ci-joint le rapport de sauvegardes Proxmox VE.\n\n"
|
||||
@@ -65,6 +77,17 @@ def build_report_message(config: EmailConfig, pdf_path: Path) -> EmailMessage:
|
||||
return message
|
||||
|
||||
|
||||
def build_base_message(config: EmailConfig, subject: str) -> EmailMessage:
|
||||
message = EmailMessage()
|
||||
message["Subject"] = subject
|
||||
message["From"] = config.smtp_from or ""
|
||||
message["To"] = ", ".join(config.smtp_to)
|
||||
message["Date"] = formatdate(localtime=True)
|
||||
message["Message-ID"] = make_msgid(domain=message_id_domain(config.smtp_from))
|
||||
message["Auto-Submitted"] = "auto-generated"
|
||||
return message
|
||||
|
||||
|
||||
def message_id_domain(address: str | None) -> str | None:
|
||||
if address is None:
|
||||
return None
|
||||
|
||||
Reference in New Issue
Block a user