Skip to content

Module formulaires & mail

Base commune : FormSurfaceController<TModel>

Controllers/FormSurfaceController.cs est le base generique de tous les formulaires (hors inscription JEMA qui a son propre controller). TModel : IFormViewModel, new().

Action Submit ([HttpPost], [ValidateAntiForgeryToken]) :

  1. Si ModelState invalide -> CurrentUmbracoPage().
  2. Anti-spam honeypot : si model.MiddleName est rempli -> log de l'IP/user-agent + RedirectToCurrentUmbracoPage() sans envoi.
  3. Sinon HandleValidSubmit(model, CurrentPage as IEmailSettings), puis TempData["FormSuccess"] = true et redirect.

Chaque formulaire concret override HandleValidSubmit.

Formulaires existants

ControllerView modelAction
ContactFormSurfaceControllerContactFormViewModelSendContactFormToClientAsync puis envoi a chaque emailSettings.EmailTo
ContactCraftsmanFormSurfaceControllerContactCraftsmanFormViewModelSendContactCraftsmanFormToCraftsmanAsync (a l'artisan) puis aux EmailTo
NewsletterController(email + culture)Opt-in newsletter via API Infomaniak (voir i18n-content.md)
JemaRegistrationControllerJemaRegistrationRequestRecordInscription JEMA (voir jema.md)

Les libelles de champs viennent du dictionnaire (Forms.Generic.*, Forms.Jema.*).

EmailService (Services/EmailService.cs)

Centralise tout l'envoi via FluentEmail + RazorRenderer. Construit a la creation deux SmtpSender :

  • principal (SmtpOptions) pour les formulaires de contact ;
  • JEMA (JemaSmtpOptions) pour les inscriptions/rappels (isJema: true).

SendEmailAsync(IFluentEmail, EmailSettingsRecord?, bool isJema) :

  • choisit l'expediteur/From selon isJema ;
  • applique sujet/CC depuis emailSettings ;
  • prefixe le sujet [DEV] ou [STAGING] hors production ;
  • envoie et logge le resultat (succes/echec).

Methodes par cas d'usage (contact, contact artisan, confirmations et rappels JEMA). Chaque methode :

  1. construit la liste de champs (EmailField) traduits via GetDictionaryValue(key, culture) ;
  2. construit le HTML des champs (BuildFieldsHtml / BuildContactFieldsHtml / tables de rappel) ;
  3. remplace les tokens du contenu editorial (ReplaceTokens : {donnees}, {prenom}, {nom}, {nom-complet}, {email}, ...) ;
  4. construit le modele d'email et appelle UsingTemplateFromEmbedded("Web.Mailing.Templates.<X>.cshtml", model, assembly, true).

Templates (Mailing/Templates/, embarques)

  • ContactRedCraftsman.cshtml, ContactCraftsman.cshtml : formulaires de contact.
  • GenericJemaRegistrationConfirmation.cshtml : confirmation d'inscription JEMA (visiteur + artisan).
  • JemaReminderCraftsman.cshtml, JemaReminderVisitor.cshtml : rappels JEMA.

Les templates sont declares <EmbeddedResource Include="Mailing\Templates\**" /> dans Web.csproj. Modeles associes dans Mailing/Models/ (EmailTemplateBaseModel, ContactEmailModel, JemaRegistrationConfirmationModel, JemaReminderEmailModel, JemaReminderVisitorEmailModel, EmailField).

Reglages email (composition)

Destinataires (EmailTo/Cc/Bcc), sujet et contenu (avec tokens) sont saisis par l'editeur dans la composition emailSettings (IEmailSettings) de la page portant le formulaire, et jemaRegistrationConfirmationEmailSettings pour les confirmations/rappels JEMA.

Configuration SMTP

Options/SmtpOptions.cs definit deux classes : SmtpOpions (section Smtp) et JemaSmtpOptions (section Smtp:Jema). En dev, SMTP local (localhost:25, smtp4dev). Les credentials reels sont injectes par environnement, jamais committes.

Contributors

No contributors

Changelog

No recent changes