Aller au contenu

Configurer le SMTP Mailer du projet

Chaque projet Jambo peut avoir son propre serveur SMTP. Le mailer est utilisé pour envoyer des emails (formulaires de contact, réinitialisation de mot de passe, etc.). Le mot de passe est chiffré côté serveur avec XSalsa20-Poly1305.

GET /api/projects/{projectUuid}/settings/mailer
PUT /api/projects/{projectUuid}/settings/mailer
POST /api/projects/{projectUuid}/settings/mailer/test

Authentification

Nécessite soit :

  • Une session admin valide (cookie, pour l’interface d’administration)
  • Un token API avec l’ability create
Fenêtre de terminal
Authorization: Bearer VOTRE_TOKEN_API

GET — Lire la configuration SMTP

Fenêtre de terminal
curl https://votre-domaine.com/api/projects/{projectUuid}/settings/mailer \
-H "Authorization: Bearer VOTRE_TOKEN_API"

Réponse (configuré)

{
"data": {
"host": "smtp.resend.com",
"port": 587,
"username": "resend",
"encryption": "tls",
"from_email": "noreply@exemple.com",
"from_name": "Mon Projet",
"enabled": true
}
}

Réponse (non configuré)

{
"data": null
}

PUT — Créer ou modifier la configuration SMTP

Fenêtre de terminal
curl -X PUT https://votre-domaine.com/api/projects/{projectUuid}/settings/mailer \
-H "Authorization: Bearer VOTRE_TOKEN_API" \
-H "Content-Type: application/json" \
-d '{
"host": "smtp.gmail.com",
"port": 587,
"username": "apikey",
"password": "votre-mot-de-passe-app",
"encryption": "tls",
"from_email": "noreply@exemple.com",
"from_name": "Mon Projet",
"enabled": true
}'

Corps de la requête

ChampTypeRequisDescription
hoststringNonHôte SMTP (validé : pas d’IPs privées)
portintegerNonPort SMTP. Autorisés : 25, 465, 587, 2525
usernamestringNonNom d’utilisateur SMTP
passwordstringNonMot de passe SMTP (chiffré au repos, mis à jour si fourni)
encryptionstringNontls, ssl, ou none
from_emailstringNonAdresse email expéditeur (email valide requis)
from_namestringNonNom affiché de l’expéditeur
enabledbooleanNonActiver ou désactiver le mailer

Réponse

{
"data": {
"host": "smtp.gmail.com",
"port": 587,
"username": "apikey",
"encryption": "tls",
"from_email": "noreply@exemple.com",
"from_name": "Mon Projet",
"enabled": true
}
}

POST — Envoyer un email de test

Envoie un email de test à l’adresse from_email configurée.

Fenêtre de terminal
curl -X POST https://votre-domaine.com/api/projects/{projectUuid}/settings/mailer/test \
-H "Authorization: Bearer VOTRE_TOKEN_API"

Réponse (succès)

{ "sent": true }

Réponse (échec)

{ "error": "Échec de l'envoi. Vérifiez votre configuration SMTP." }

Codes de statut

StatutDescription
200Configuration lue ou modifiée avec succès
400Hôte invalide (IP privée) ou port invalide
403Accès refusé
404Projet introuvable
422Mailer non configuré ou désactivé

Envoi d’emails (programmatique)

Pour envoyer des emails depuis votre application, utilisez le ProjectMailerService :

use App\Service\ProjectMailerService;
use App\Message\Attachment;
$mailerService->send(
project: $project,
to: 'client@exemple.com',
subject: 'Bienvenue !',
body: 'Texte brut de fallback',
htmlBody: '<h1>Bienvenue !</h1><p>Merci de votre inscription.</p>',
replyTo: 'support@exemple.com',
cc: ['manager@exemple.com'],
bcc: ['archive@exemple.com'],
attachments: [
new Attachment(
content: file_get_contents('/chemin/rapport.pdf'),
filename: 'rapport_mensuel.pdf',
mimeType: 'application/pdf',
),
],
);

Les emails sont envoyés de manière asynchrone via Symfony Messenger et journalisés dans la table email_log.