type InvitationEmailInput = { associationName: string; invitationLink: string; expiresAt: Date; }; function formatDate(date: Date) { return new Intl.DateTimeFormat("fr-FR", { day: "2-digit", month: "2-digit", year: "numeric", hour: "2-digit", minute: "2-digit", }).format(date); } function escapeHtml(value: string) { return value .replaceAll("&", "&") .replaceAll("<", "<") .replaceAll(">", ">") .replaceAll('"', """) .replaceAll("'", "'"); } export function generateAssociationInvitationEmail(input: InvitationEmailInput) { const expiryLabel = formatDate(input.expiresAt); const associationName = escapeHtml(input.associationName); const invitationLink = escapeHtml(input.invitationLink); const subject = `Invitation au Portail Associations - ${input.associationName}`; const text = [ `Bonjour,`, ``, `L'association "${input.associationName}" est invitée à activer son espace sur le Portail Associations.`, `Ce lien est personnel, remplace les précédents liens d'invitation et reste valide jusqu'au ${expiryLabel}.`, ``, `${input.invitationLink}`, ``, `Si vous n'êtes pas la bonne personne, merci de transmettre ce message au référent de l'association.`, ].join("\n"); const html = `

Invitation au Portail Associations

L'association ${associationName} est invitée à activer son espace sur le portail.

Ce lien est personnel, remplace les précédents liens d'invitation et reste valide jusqu'au ${expiryLabel}.

Activer l'espace association

Si le bouton ne fonctionne pas, utilisez ce lien :

${invitationLink}

`; return { subject, text, html }; }