URL à utiliser dans vos sites pour envoyer des emails
Clé requise dans le header X-MAIL-HUB-KEY
⚠️ Sécurité : Ne partagez jamais la Master Key publiquement. Stockez-la uniquement dans les fichiers .env de vos sites.
Comment ça fonctionne ?
1. Hub centralisé
Le Mail Hub reçoit les demandes d'envoi d'emails depuis vos sites via l'API /api/mail-hub
2. Sécurité double
Authentification en 2 niveaux : Master Key (commune) + Secret unique par site. Rate limiting : 10 emails/minute.
3. Amazon SES
Envoi via Amazon SES depuis noreply@dev-digiflow.fr vers l'email du proprio configuré.
Flux d'un email
Formulaire site → POST /api/mail-hub (avec headers) → Validation secret → Amazon SES → Email proprio ✅
Guide complet d'intégration
1
Créer le site dans Jarvis Mail Hub
▶ Cliquez sur le bouton "Ajouter un site" en haut de cette page
Remplissez le formulaire :
ID du site : un identifiant unique (ex: mon-site-vitrine)
Nom du site : le nom affiché dans les emails (ex: Mon Site Vitrine)
Email du propriétaire : où vous voulez recevoir les emails (ex: contact@monsite.fr)
✅ Après validation : Un secret unique sera généré. COPIEZ-LE IMMÉDIATEMENT car il ne sera plus affiché !
📋 Vous aurez 3 informations à copier :
✅ Master Key (depuis la section violette "Configuration globale" ⬆️)
✅ SITE_ID (l'ID que vous avez choisi)
✅ SITE_SECRET (généré automatiquement, dans la popup)
2
Ajouter les variables d'environnement dans le site
▶ Ouvrez le fichier .env de votre site (ou .env.local pour Next.js)
# ========================================
# MAIL HUB - Jarvis Health Manager
# ========================================
# Master Key (commune à tous vos sites)
MAIL_HUB_KEY=e6141ae6b17f34efd87f16268f4af787aa9b39399d716bc6a1956a933a17f212
# Identifiant unique de ce site
SITE_ID=mon-site-vitrine
# Secret unique généré lors de la création (ne JAMAIS partager!)
SITE_SECRET=abc123def456...copiez-le-secret-ici
⚠️ Important : Après avoir modifié le .env, redémarrez votre serveur de développement (Ctrl+C puis npm run dev)
3
Modifier la route de contact
🟦 Pour un site Next.js / React :
▶ Remplacez le contenu de app/api/contact/route.ts par :
✅ Avantages : Plus besoin de gérer les credentials SMTP, tout est centralisé !
5
Tester et vérifier
🧪 Procédure de test :
Redémarrez votre serveur de développement
Allez sur le formulaire de contact de votre site
Remplissez et envoyez un message de test
Revenez sur cette page Jarvis
Scrollez en bas dans "Logs récents" ⬇️
Vérifiez que l'email apparaît avec ✅ (succès)
Vérifiez votre boîte email (celle du propriétaire)
⚠️ Si ça ne fonctionne pas :
Vérifiez les 3 variables dans .env (MAIL_HUB_KEY, SITE_ID, SITE_SECRET)
Vérifiez que le serveur a bien redémarré après modification du .env
Regardez les logs dans la console du navigateur (F12)
Regardez les "Logs récents" en bas de cette page pour voir l'erreur
Vérifiez que le site est bien activé (badge vert dans la liste des sites)
🎉 C'est tout ! Une fois le test réussi, déployez en production et répétez pour vos autres sites.
🤖 Automatisation avec Claude AI
Gagnez du temps : Copiez les instructions ci-dessous et donnez-les à Claude AI pour qu'il configure automatiquement vos sites existants !
Instructions pour Claude AI
# MISSION : Intégrer le Mail Hub Jarvis dans ce site existant
## CONTEXTE
Ce site possède actuellement un formulaire de contact qui envoie des emails. Je veux le migrer vers le système Mail Hub centralisé de Jarvis Health Manager pour :
- Utiliser un seul compte Amazon SES pour tous mes sites
- Centraliser la gestion des emails
- Simplifier la maintenance
## INFORMATIONS DU SITE (à compléter par l'utilisateur)
- **SITE_ID** : [ex: mon-site-vitrine]
- **SITE_SECRET** : [généré depuis Jarvis, à copier depuis la popup]
- **MASTER_KEY** : e6141ae6b17f34efd87f16268f4af787aa9b39399d716bc6a1956a933a17f212
- **Email du propriétaire** : [ex: contact@monsite.fr]
## ÉTAPES À SUIVRE
### 1. ANALYSE DU SITE EXISTANT
- Utilise `Glob` pour trouver tous les fichiers de routes API (app/api/**/route.ts, pages/api/**/*.ts, ou *.php)
- Identifie le fichier qui gère l'envoi d'emails de contact (cherche "nodemailer", "mail", "smtp", "sendgrid", etc.)
- Lis le fichier identifié et analyse la structure actuelle
- Liste les dépendances email actuelles (package.json pour Next.js, composer.json pour PHP)
### 2. CRÉER LE SITE DANS JARVIS (si pas encore fait)
Si l'utilisateur n'a pas encore créé le site dans Jarvis :
- Demande-lui d'aller sur https://jarvis-health.fr/mail-hub
- Demande-lui de cliquer sur "Ajouter un site"
- Demande-lui de renseigner :
- ID du site : [identifiant unique, ex: mon-site-vitrine]
- Nom du site : [nom affiché dans les emails]
- Email du propriétaire : [où recevoir les emails]
- Demande-lui de COPIER le SITE_SECRET qui sera affiché une seule fois
- Attends qu'il te fournisse le SITE_ID et le SITE_SECRET avant de continuer
### 3. AJOUTER LES VARIABLES D'ENVIRONNEMENT
- Trouve le fichier .env ou .env.local (ou crée-le s'il n'existe pas)
- Ajoute les 3 variables suivantes (utilise les valeurs fournies par l'utilisateur) :
```bash
# ========================================
# MAIL HUB - Jarvis Health Manager
# ========================================
# Master Key (commune à tous les sites)
MAIL_HUB_KEY=e6141ae6b17f34efd87f16268f4af787aa9b39399d716bc6a1956a933a17f212
# Identifiant unique de ce site
SITE_ID=[SITE_ID fourni par l'utilisateur]
# Secret unique généré lors de la création
SITE_SECRET=[SITE_SECRET fourni par l'utilisateur]
```
### 4. MODIFIER LA ROUTE DE CONTACT
**Pour Next.js (TypeScript/JavaScript) :**
Remplace le contenu du fichier de route API par :
```typescript
import { NextRequest, NextResponse } from 'next/server';
export async function POST(req: NextRequest) {
try {
// 1. Récupérer les données du formulaire
const { name, email, message, subject } = await req.json();
// 2. Validation basique
if (!name || !email || !message) {
return NextResponse.json(
{ error: 'Tous les champs sont requis' },
{ status: 400 }
);
}
// 3. Appeler le Mail Hub
const response = await fetch('https://jarvis-health.fr/api/mail-hub', {
method: 'POST',
headers: {
'X-MAIL-HUB-KEY': process.env.MAIL_HUB_KEY!,
'X-SITE-ID': process.env.SITE_ID!,
'X-SITE-SECRET': process.env.SITE_SECRET!,
'Content-Type': 'application/json'
},
body: JSON.stringify({
subject: subject || `Nouveau contact depuis ${name}`,
message: `
<div style="font-family: Arial, sans-serif;">
<h2>Nouveau message de contact</h2>
<p><strong>Nom:</strong> ${name}</p>
<p><strong>Email:</strong> ${email}</p>
<hr>
<p><strong>Message:</strong></p>
<p>${message.replace(/\n/g, '<br>')}</p>
</div>
`,
replyTo: email
})
});
const data = await response.json();
// 4. Retourner le résultat
if (response.ok) {
return NextResponse.json({
success: true,
message: 'Email envoyé avec succès !'
});
} else {
return NextResponse.json(
{ error: data.error || 'Erreur lors de l\'envoi' },
{ status: response.status }
);
}
} catch (error: any) {
console.error('Erreur contact:', error);
return NextResponse.json(
{ error: 'Erreur serveur' },
{ status: 500 }
);
}
}
```
**Pour PHP :**
Remplace le contenu du fichier de contact PHP par :
```php
<?php
header('Content-Type: application/json');
// 1. Récupérer les données du formulaire
$name = $_POST['name'] ?? '';
$email = $_POST['email'] ?? '';
$message = $_POST['message'] ?? '';
// 2. Validation basique
if (empty($name) || empty($email) || empty($message)) {
echo json_encode(['error' => 'Tous les champs sont requis']);
exit;
}
// 3. Charger les variables d'environnement
// Remplace par les vraies valeurs depuis le .env
define('MAIL_HUB_KEY', getenv('MAIL_HUB_KEY'));
define('SITE_ID', getenv('SITE_ID'));
define('SITE_SECRET', getenv('SITE_SECRET'));
// 4. Préparer les données
$data = [
'subject' => "Nouveau contact depuis " . $name,
'message' => "
<div style='font-family: Arial, sans-serif;'>
<h2>Nouveau message de contact</h2>
<p><strong>Nom:</strong> " . htmlspecialchars($name) . "</p>
<p><strong>Email:</strong> " . htmlspecialchars($email) . "</p>
<hr>
<p><strong>Message:</strong></p>
<p>" . nl2br(htmlspecialchars($message)) . "</p>
</div>
",
'replyTo' => $email
];
// 5. Appeler le Mail Hub avec cURL
$ch = curl_init('https://jarvis-health.fr/api/mail-hub');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'X-MAIL-HUB-KEY: ' . MAIL_HUB_KEY,
'X-SITE-ID: ' . SITE_ID,
'X-SITE-SECRET: ' . SITE_SECRET,
'Content-Type: application/json'
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
// 6. Retourner le résultat
if ($httpCode === 200) {
echo json_encode(['success' => true, 'message' => 'Email envoyé !']);
} else {
echo json_encode(['error' => 'Erreur lors de l\'envoi']);
}
?>
```
### 5. NETTOYER L'ANCIEN CODE
**Pour Next.js :**
- Supprime nodemailer des dépendances : `npm uninstall nodemailer @types/nodemailer`
- Supprime les anciennes variables d'environnement SMTP du .env (SMTP_HOST, SMTP_USER, SMTP_PASS, etc.)
- Supprime tout code d'import ou d'utilisation de nodemailer
**Pour PHP :**
- Supprime les anciennes bibliothèques SMTP (PHPMailer, SwiftMailer, etc.)
- Supprime les anciennes variables d'environnement SMTP
### 6. TESTER L'INTÉGRATION
- Demande à l'utilisateur de redémarrer son serveur de développement
- Demande-lui de tester le formulaire de contact
- Demande-lui de vérifier les logs sur https://jarvis-health.fr/mail-hub (section "Logs récents")
- Vérifie qu'un ✅ apparaît dans les logs
- Demande-lui de vérifier sa boîte email
### 7. RAPPORT FINAL
Fournis un rapport détaillé avec :
- ✅ Liste des fichiers modifiés
- ✅ Changements apportés (avant/après)
- ✅ Dépendances supprimées
- ✅ Variables d'environnement ajoutées/supprimées
- ✅ Instructions pour le déploiement en production
- ✅ Checklist de vérification
## RÈGLES IMPORTANTES
- ❌ NE JAMAIS hardcoder les secrets dans le code (utilise toujours les variables d'environnement)
- ❌ NE PAS continuer si l'utilisateur n'a pas fourni le SITE_ID et SITE_SECRET
- ✅ Toujours demander confirmation avant de supprimer du code
- ✅ Créer une sauvegarde de l'ancien code (ex: route.ts.backup)
- ✅ Être explicite sur chaque modification
## NOTES
- L'API Mail Hub est déjà configurée sur https://jarvis-health.fr/api/mail-hub
- Les emails sont envoyés depuis noreply@dev-digiflow.fr via Amazon SES
- Le rate limit est de 10 emails par minute par site
- Tous les logs sont visibles sur https://jarvis-health.fr/mail-hub
Comment utiliser : Copiez ces instructions et collez-les dans une conversation avec Claude AI. Claude analysera automatiquement votre site et effectuera tous les changements nécessaires.
⚡ Avant de lancer : Assurez-vous d'avoir créé le site dans Jarvis et copié le SITE_SECRET. Remplacez les valeurs [entre crochets] par vos vraies informations.
💡 Astuce : Claude va vous demander le SITE_ID et SITE_SECRET. Préparez-les à l'avance en créant le site ici d'abord !