diff --git a/docs/docs/partners-courts/email-review.md b/docs/docs/partners-courts/email-review.md index 3ba07404..408e94e7 100644 --- a/docs/docs/partners-courts/email-review.md +++ b/docs/docs/partners-courts/email-review.md @@ -77,6 +77,7 @@ submission_notifications: enabled: false # stay disabled until delivery, copy and sender signoff format: html # choose plain_text for the current SMTP transport templates: + from_email: "noreply@example.com email_confirmation_subject: "Your filing was submitted" email_confirmation_contents: |- The e-filing system received a filing in your submission. diff --git a/efile_app/efile/services/submission_notifications.py b/efile_app/efile/services/submission_notifications.py index 3bcb07be..4c76bdd4 100644 --- a/efile_app/efile/services/submission_notifications.py +++ b/efile_app/efile/services/submission_notifications.py @@ -10,7 +10,7 @@ from efile.services.filings import court_contact from efile.services.waiver_documents import has_waiver_document -PROXY_EMAIL_FIELDS = ( +PROXY_EMAIL_FIELDS_REQUIRED = ( "email_confirmation_subject", "email_confirmation_contents", "acceptance_subject", @@ -21,6 +21,8 @@ "neutral_contents", ) +PROXY_EMAIL_FIELDS = PROXY_EMAIL_FIELDS_REQUIRED + ("from_email",) + def strip_client_email_fields(efile_data): """Remove every supported notification field supplied by the browser.""" @@ -37,7 +39,7 @@ def submission_email_fields(request, draft, jurisdiction, config=None): templates = notification_config.get("templates") or {} if not isinstance(templates, dict) or not all( - isinstance(templates.get(field), str) and templates[field].strip() for field in PROXY_EMAIL_FIELDS + isinstance(templates.get(field), str) and templates[field].strip() for field in PROXY_EMAIL_FIELDS_REQUIRED ): return {} @@ -50,7 +52,11 @@ def submission_email_fields(request, draft, jurisdiction, config=None): "waiver_line": _waiver_line(draft, waiver_url), } values.update(_conditional_text(notification_config, draft)) - fields = {field: Template(templates[field]).safe_substitute(values).strip() for field in PROXY_EMAIL_FIELDS} + fields = { + field: Template(templates[field]).safe_substitute(values).strip() for field in PROXY_EMAIL_FIELDS_REQUIRED + } + if "from_email" in templates: + fields["from_email"] = Template(templates["from_email"]).safe_substitute(values).strip() if notification_config.get("format") == "html": from efile.services.filing_timing import court_filing_timing from efile.services.notification_email_html import render_notification_email diff --git a/efile_app/efile/tests/test_submission_notifications.py b/efile_app/efile/tests/test_submission_notifications.py index 67ee6ec9..768688f3 100644 --- a/efile_app/efile/tests/test_submission_notifications.py +++ b/efile_app/efile/tests/test_submission_notifications.py @@ -48,12 +48,14 @@ def test_plain_text_fallback_links_to_tracker_and_waiver_source(): config = deepcopy(config_loader.load_jurisdiction_config("illinois")) config["submission_notifications"]["enabled"] = True config["submission_notifications"]["format"] = "plain_text" + config["submission_notifications"]["templates"]["from_email"] = "noreply@example.com" config["fee_waiver"]["source_url"] = "https://example.test/waiver" fields = submission_email_fields(request, draft, "illinois", config) tracker_url = request.build_absolute_uri(reverse("submission_tracker", kwargs={"public_id": PUBLIC_ID})) assert set(fields) == set(PROXY_EMAIL_FIELDS) + assert "noreply@example.com" in fields["from_email"] assert tracker_url in fields["email_confirmation_contents"] assert "https://example.test/waiver" in fields["email_confirmation_contents"] assert "If you requested a fee waiver, check the court’s decision" in fields["email_confirmation_contents"] @@ -155,6 +157,7 @@ def test_default_templates_are_available_for_another_enabled_jurisdiction(): draft = fake_draft(selected_payment_account_type="CC", court_code="unknown") config = deepcopy(config_loader.load_jurisdiction_config("massachusetts")) config["submission_notifications"]["enabled"] = True + config["submission_notifications"]["templates"]["from_email"] = "noreply@example.com" fields = submission_email_fields(request, draft, "massachusetts", config) @@ -205,6 +208,7 @@ def test_forwarded_payload_strips_client_templates_and_preserves_lead_contact(en } config = deepcopy(config_loader.load_jurisdiction_config("illinois")) config["submission_notifications"]["enabled"] = enabled + config["submission_notifications"]["templates"]["from_email"] = "noreply@example.com" api_response = SimpleNamespace(status_code=201, json=lambda: {"envelopeId": "env-1"}) with ( @@ -259,6 +263,7 @@ def test_notification_config_error_does_not_block_or_retry_filing(): def test_missing_optional_contacts_and_waiver_url_leave_no_empty_labels(): config = deepcopy(config_loader.load_jurisdiction_config("massachusetts")) config["submission_notifications"]["enabled"] = True + config["submission_notifications"]["templates"]["from_email"] = "noreply@example.com" config.pop("fee_waiver", None) request = RequestFactory().get("/", HTTP_HOST="testserver") draft = fake_draft(selected_payment_account_type="WV", court_code="unknown")