- Shipped
- November 15, 2026 at 7:14 PM UTC
- Author
- Kamo
- Commit
- ee2a03b
- Email delivery posted to /api/email/transactional/send, which EmailService never had, with template keys that were never seeded: every borrower email was recorded FAILED. It now posts to /api/email/templates/send (InternalAuthFilter, X-Internal-Auth from the cluster's mlos-internal-auth secret) with the canonical loan.<kind> letter, the borrower's address, first name, amounts in the loan's currency, dates, days late and an absolute link on the lender's own live domain else the platform's (OrgLinkHosts) to /loans/<id> or /loans/offers/<id>. A kind with no letter, a borrower with no address or a missing loan is recorded FAILED with that reason. - ReminderSchedulingJob schedules the EMAIL copy of payment-due/late, offer-expiring and statement notices only when the organization's Collections policy turns on Email Borrowers (OFF by default; Kamo never turns it on); charge-off notices keep Remind Before Charge-Off. The in-app copy on the borrower's loan page is unchanged. - Policy GET/PUT carry borrowerNoticesEnabled; it's logged ("Email Borrowers") and undoable like the rest.
