Organization invitations could be used as an open relay: any signed-in account could create an Organization and make the app mail any address, with the Organization name as the subject. The subject is now a constant built from the product name, and the inviter's and Organization's names appear in the body as attributed plain text (Name (verified address) invited you to join the organization "…"), HTML-escaped, length-capped and with link-shaped tokens defanged so no client auto-links them. Every template applies the same treatment to names, and the security notice prints a readable UTC timestamp (Email, commit e951425).
Sending now requires a verified inviter email even when AUTH_SKIP_EMAIL_VERIFICATION is true, and is limited to 20 invitations per inviter and 50 per Organization per rolling day, 50 pending invitations per Organization, and 10 invite-member requests per 10 minutes per client IP. The default owner, admin and member roles are written down in the plugin configuration. Refusals are typed codes translated in en, de and fr (Authentication and Organizations, commit 88e8671). The web invite dialog and the mobile invite group show the verify-your-email state with a button that sends the verification email (commit b9e63fd).
EMAIL_REPLY_TO sets a Reply-To on every message through the Worker binding, Cloudflare REST and Resend, and the product name every email prints comes from EMAIL_FROM's display name; the hard-coded fallback is gone. The email guide documents the SPF, DKIM and DMARC records the sending domain needs for either provider (commit 8f90bc5).