fix(messaging): test email + EmailLog show effective config, not stale env
Some checks failed
Some checks failed
Two display bugs where admin-facing email diagnostics reported the .env-level config even when database overrides were in effect — so a prod admin who switched from SendGrid (.env) to SMTP via /admin/settings would receive a test email whose body still said "Provider: sendgrid" and "From: noreply@wizard.lu", even though the actual From header used the DB-overridden address. Confusing, and erodes trust in the page that exists specifically to verify the setup. - admin_settings.send_test_email: read get_effective_email_config(db) and display its provider + from_email in the test email's body. Also use the effective provider when stamping the audit-log row. - email_service: in the "template not found" EmailLog branch, record the effective from_email / from_name / provider from self._platform_config (already populated correctly by __init__), instead of falling back to the env-only settings.email_*. Verified by importing both modules; pure plumbing fix, no schema or behavior change for callers. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -656,10 +656,16 @@ def send_test_email(
|
|||||||
"""
|
"""
|
||||||
Send a test email using the platform email configuration.
|
Send a test email using the platform email configuration.
|
||||||
|
|
||||||
This tests the email provider configuration from environment variables.
|
Reports the *effective* config — DB overrides if any, else .env. The
|
||||||
|
test email's body must match what actually got used to send it,
|
||||||
|
otherwise admins can't trust the page they're testing from.
|
||||||
"""
|
"""
|
||||||
from app.modules.messaging.services.email_service import EmailService
|
from app.modules.messaging.services.email_service import EmailService
|
||||||
|
|
||||||
|
effective = get_effective_email_config(db)
|
||||||
|
eff_provider = effective.get("provider", app_settings.email_provider)
|
||||||
|
eff_from = effective.get("from_email", app_settings.email_from_address)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
email_service = EmailService(db)
|
email_service = EmailService(db)
|
||||||
|
|
||||||
@@ -676,13 +682,13 @@ def send_test_email(
|
|||||||
<p>If you received this email, your email settings are working correctly!</p>
|
<p>If you received this email, your email settings are working correctly!</p>
|
||||||
<hr style="border: none; border-top: 1px solid #e5e7eb; margin: 20px 0;">
|
<hr style="border: none; border-top: 1px solid #e5e7eb; margin: 20px 0;">
|
||||||
<p style="color: #6b7280; font-size: 12px;">
|
<p style="color: #6b7280; font-size: 12px;">
|
||||||
Provider: {app_settings.email_provider}<br>
|
Provider: {eff_provider}<br>
|
||||||
From: {app_settings.email_from_address}
|
From: {eff_from}
|
||||||
</p>
|
</p>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
""",
|
""",
|
||||||
body_text=f"Test email from Orion platform.\n\nProvider: {app_settings.email_provider}\nFrom: {app_settings.email_from_address}",
|
body_text=f"Test email from Orion platform.\n\nProvider: {eff_provider}\nFrom: {eff_from}",
|
||||||
is_platform_email=True,
|
is_platform_email=True,
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -695,7 +701,7 @@ def send_test_email(
|
|||||||
action="send_test_email",
|
action="send_test_email",
|
||||||
target_type="email",
|
target_type="email",
|
||||||
target_id=request.to_email,
|
target_id=request.to_email,
|
||||||
details={"provider": app_settings.email_provider},
|
details={"provider": eff_provider},
|
||||||
)
|
)
|
||||||
db.commit()
|
db.commit()
|
||||||
|
|
||||||
|
|||||||
@@ -1317,16 +1317,18 @@ class EmailService:
|
|||||||
if not resolved:
|
if not resolved:
|
||||||
logger.error(f"Email template not found: {template_code} ({resolved_language})")
|
logger.error(f"Email template not found: {template_code} ({resolved_language})")
|
||||||
# Create failed log entry
|
# Create failed log entry
|
||||||
|
# Use the *effective* config so the audit row reflects what the
|
||||||
|
# admin actually configured (DB overrides win over .env).
|
||||||
log = EmailLog(
|
log = EmailLog(
|
||||||
template_code=template_code,
|
template_code=template_code,
|
||||||
recipient_email=to_email,
|
recipient_email=to_email,
|
||||||
recipient_name=to_name,
|
recipient_name=to_name,
|
||||||
subject=f"[Template not found: {template_code}]",
|
subject=f"[Template not found: {template_code}]",
|
||||||
from_email=settings.email_from_address,
|
from_email=self._platform_config.get("from_email", settings.email_from_address),
|
||||||
from_name=settings.email_from_name,
|
from_name=self._platform_config.get("from_name", settings.email_from_name),
|
||||||
status=EmailStatus.FAILED.value,
|
status=EmailStatus.FAILED.value,
|
||||||
error_message=f"Template not found: {template_code} ({resolved_language})",
|
error_message=f"Template not found: {template_code} ({resolved_language})",
|
||||||
provider=settings.email_provider,
|
provider=self._platform_config.get("provider", settings.email_provider),
|
||||||
store_id=store_id,
|
store_id=store_id,
|
||||||
user_id=user_id,
|
user_id=user_id,
|
||||||
related_type=related_type,
|
related_type=related_type,
|
||||||
|
|||||||
Reference in New Issue
Block a user