Aller au contenu

Module 16 – Email (cours complet + mise en situation)

1. Pourquoi les emails sont importants dans un backend ?

Un backend ne sert pas qu’à stocker des données. Il sert à orchestrer des actions.

Exemples :

Email = “communication automatique” du système.


2. Problème : tester un SMTP en dev

Vous ne voulez pas :

Solution : MailHog (boîte mail fake).


3. Docker Compose : ajouter MailHog

mailhog:
  image: mailhog/mailhog
  ports:
    - "1025:1025"
    - "8025:8025"

Interface web : http://localhost:8025


4. Config Spring Boot

spring:
  mail:
    host: localhost
    port: 1025

5. MailService (simple et pédagogique)

@Service
public class MailService {

  private final JavaMailSender sender;

  public MailService(JavaMailSender sender) {
    this.sender = sender;
  }

  public void sendText(String to, String subject, String body) {
    SimpleMailMessage msg = new SimpleMailMessage();
    msg.setTo(to);
    msg.setSubject(subject);
    msg.setText(body);
    sender.send(msg);
  }
}

Pourquoi un service dédié ?


6. Intégrer au métier (InscriptionService)

Au moment où l’inscription est validée :

mailService.sendText(
  proprietaire.getEmail(),
  "Inscription confirmée",
  "Votre chien " + chien.getNom() + " est inscrit au concours " + concours.getNom()
);

7. Tests (on ne teste pas l’envoi réel)

@ExtendWith(MockitoExtension.class)
class MailServiceTest {

  @Mock JavaMailSender sender;
  @InjectMocks MailService service;

  @Test
  void should_send_message() {
    service.sendText("a@b.com", "Sujet", "Hello");
    verify(sender).send(any(SimpleMailMessage.class));
  }
}

8. Mini-exercices

  1. Envoyer un email quand un concours est fermé.
  2. Ajouter un template simple (String format).