Configuration SMTP pour l'envoi de rappels email aux signataires attendus.
Le service email d'Ackify permet d'envoyer des rappels automatiques aux utilisateurs qui n'ont pas encore signé un document.
Fonctionnalités :
- Envoi de rappels multilingues (fr, en, es, de, it)
- Templates HTML et texte brut
- Historique des envois dans PostgreSQL
- Support TLS/STARTTLS
- Timeout configurable
Note : Le service email est optionnel. Si ACKIFY_MAIL_HOST n'est pas défini, les emails sont désactivés.
# Serveur SMTP
ACKIFY_MAIL_HOST=smtp.gmail.com
ACKIFY_MAIL_PORT=587
ACKIFY_MAIL_USERNAME=your-email@gmail.com
ACKIFY_MAIL_PASSWORD=your-app-password
# Adresse expéditeur
ACKIFY_MAIL_FROM=noreply@company.com# Nom affiché de l'expéditeur (défaut: ACKIFY_ORGANISATION)
ACKIFY_MAIL_FROM_NAME="Ackify - ACME Corporation"
# Préfixe pour le sujet des emails (optionnel)
ACKIFY_MAIL_SUBJECT_PREFIX="[Ackify]"
# Activer TLS (défaut: true)
ACKIFY_MAIL_TLS=true
# Activer STARTTLS (défaut: true)
ACKIFY_MAIL_STARTTLS=true
# Désactiver la vérification des certificats TLS (défaut: false)
# Utile pour les certificats auto-signés en développement/test
# /!\ NE PAS UTILISER EN PRODUCTION
ACKIFY_MAIL_INSECURE_SKIP_VERIFY=false
# Timeout de connexion (défaut: 10s)
ACKIFY_MAIL_TIMEOUT=10s
# Répertoire des templates email (défaut: templates/emails)
ACKIFY_MAIL_TEMPLATE_DIR=templates/emails
# Langue par défaut pour les emails (défaut: en)
# Langues supportées : en, fr, es, de, it
ACKIFY_MAIL_DEFAULT_LOCALE=frConfiguration :
ACKIFY_MAIL_HOST=smtp.gmail.com
ACKIFY_MAIL_PORT=587
ACKIFY_MAIL_USERNAME=your-email@gmail.com
ACKIFY_MAIL_PASSWORD=your-app-password
ACKIFY_MAIL_TLS=true
ACKIFY_MAIL_STARTTLS=truePrérequis :
- Activer la validation en 2 étapes sur votre compte Google
- Générer un "App Password" : https://myaccount.google.com/apppasswords
- Utiliser ce mot de passe dans
ACKIFY_MAIL_PASSWORD
ACKIFY_MAIL_HOST=smtp.sendgrid.net
ACKIFY_MAIL_PORT=587
ACKIFY_MAIL_USERNAME=apikey
ACKIFY_MAIL_PASSWORD=your-sendgrid-api-key
ACKIFY_MAIL_FROM=noreply@your-domain.com
ACKIFY_MAIL_TLS=trueACKIFY_MAIL_HOST=email-smtp.us-east-1.amazonaws.com
ACKIFY_MAIL_PORT=587
ACKIFY_MAIL_USERNAME=your-smtp-username
ACKIFY_MAIL_PASSWORD=your-smtp-password
ACKIFY_MAIL_FROM=noreply@verified-domain.com
ACKIFY_MAIL_TLS=trueImportant : Vérifier votre domaine dans AWS SES avant d'envoyer.
ACKIFY_MAIL_HOST=smtp.mailgun.org
ACKIFY_MAIL_PORT=587
ACKIFY_MAIL_USERNAME=postmaster@your-domain.mailgun.org
ACKIFY_MAIL_PASSWORD=your-mailgun-smtp-password
ACKIFY_MAIL_FROM=noreply@your-domain.com
ACKIFY_MAIL_TLS=trueACKIFY_MAIL_HOST=mail.company.com
ACKIFY_MAIL_PORT=587
ACKIFY_MAIL_USERNAME=ackify@company.com
ACKIFY_MAIL_PASSWORD=secure_password
ACKIFY_MAIL_FROM=ackify@company.com
ACKIFY_MAIL_TLS=true
ACKIFY_MAIL_STARTTLS=true
# Pour certificats auto-signés uniquement (/!\ pas en production)
# ACKIFY_MAIL_INSECURE_SKIP_VERIFY=trueLes templates sont dans /backend/templates/emails/ avec support multilingue.
templates/emails/
├── fr/
│ ├── reminder.html # Template HTML français
│ └── reminder.txt # Template texte brut français
├── en/
│ ├── reminder.html # Template HTML anglais
│ └── reminder.txt # Template texte brut anglais
└── ...
Dans les templates, vous pouvez utiliser :
{{.RecipientName}} // Nom du destinataire
{{.DocumentID}} // ID du document
{{.DocumentTitle}} // Titre du document
{{.DocumentURL}} // URL du document (si définie dans metadata)
{{.SignURL}} // URL pour signer
{{.OrganisationName}} // Nom de l'organisation
{{.SenderName}} // Nom de l'expéditeur (admin)<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Rappel de signature</title>
</head>
<body>
<h1>Bonjour {{.RecipientName}},</h1>
<p>
Vous êtes attendu(e) pour signer le document
<strong>{{.DocumentTitle}}</strong>.
</p>
<p>
<a href="{{.SignURL}}" style="background: #0066cc; color: white; padding: 10px 20px; text-decoration: none; border-radius: 5px;">
Signer maintenant
</a>
</p>
<p>
Cordialement,<br>
{{.OrganisationName}}
</p>
</body>
</html>Pour utiliser des templates personnalisés :
ACKIFY_MAIL_TEMPLATE_DIR=/custom/path/to/email/templatesAssurez-vous de conserver la même structure de répertoires (langue/reminder.html).
- Aller sur
/admin - Sélectionner un document
- Cliquer sur "Expected Signers"
- Sélectionner les destinataires
- Cliquer sur "Send Reminders"
curl -X POST http://localhost:8080/api/v1/admin/documents/doc_id/reminders \
-b cookies.txt \
-H "Content-Type: application/json" \
-H "X-CSRF-Token: YOUR_TOKEN" \
-d '{
"emails": ["user1@company.com", "user2@company.com"],
"locale": "fr"
}'Réponse :
{
"sent": 2,
"failed": 0,
"errors": []
}Les envois sont tracés dans la table reminder_logs :
SELECT
recipient_email,
sent_at,
status,
error_message
FROM reminder_logs
WHERE doc_id = 'my_document'
ORDER BY sent_at DESC;Statuts possibles :
sent- Envoyé avec succèsfailed- Échec d'envoibounced- Rebond (email invalide)
# 1. Se connecter en tant qu'admin
# 2. Ajouter un expected signer avec votre email
curl -X POST http://localhost:8080/api/v1/admin/documents/test_doc/signers \
-b cookies.txt \
-H "Content-Type: application/json" \
-H "X-CSRF-Token: YOUR_TOKEN" \
-d '{
"email": "your-email@company.com",
"name": "Test User"
}'
# 3. Envoyer un rappel test
curl -X POST http://localhost:8080/api/v1/admin/documents/test_doc/reminders \
-b cookies.txt \
-H "Content-Type: application/json" \
-H "X-CSRF-Token: YOUR_TOKEN" \
-d '{
"emails": ["your-email@company.com"],
"locale": "en"
}'docker compose logs -f ackify-ce | grep -i mailVous devriez voir :
INFO Email sent successfully to: your-email@company.com
Vérifier :
ACKIFY_MAIL_HOSTetACKIFY_MAIL_PORTsont corrects- Votre serveur autorise les connexions sortantes sur le port SMTP
ACKIFY_MAIL_TLS=truesi le serveur requiert TLS
Cette erreur se produit avec des certificats auto-signés. Pour les environnements de développement/test uniquement :
ACKIFY_MAIL_INSECURE_SKIP_VERIFY=true/!\ Attention : Cette option désactive la vérification des certificats TLS. Ne JAMAIS l'utiliser en production !
Vérifier :
ACKIFY_MAIL_USERNAMEetACKIFY_MAIL_PASSWORDsont corrects- Pour Gmail : utiliser un "App Password", pas votre mot de passe principal
- Pour SendGrid : le username doit être
apikey
Vérifier :
- Dossier spam/courrier indésirable
- SPF/DKIM/DMARC de votre domaine (pour éviter les filtres anti-spam)
- L'adresse
ACKIFY_MAIL_FROMest vérifiée chez votre provider
Vérifier :
ACKIFY_MAIL_TEMPLATE_DIRpointe vers le bon répertoire- La structure
{locale}/reminder.htmlexiste - Les fichiers ont les bonnes permissions (readable)
Augmenter le timeout :
ACKIFY_MAIL_TIMEOUT=30s- ✅ Utiliser un service SMTP dédié (SendGrid, Mailgun, SES)
- ✅ Vérifier votre domaine (SPF, DKIM, DMARC)
- ✅ Utiliser une adresse
noreply@pourACKIFY_MAIL_FROM - ✅ Monitorer les
reminder_logspour détecter les échecs - ✅ Tester régulièrement l'envoi d'emails
- ✅ Ne jamais commiter
ACKIFY_MAIL_PASSWORDdans git - ✅ Utiliser des secrets Docker ou variables d'environnement
- ✅ Restreindre les permissions du compte SMTP
- ✅ Activer TLS/STARTTLS en production
- Les emails sont envoyés synchrones lors de l'appel API
- Pour de gros volumes, envisager une queue asynchrone
- Limiter le nombre de destinataires par batch (recommandé : < 100)
Pour désactiver complètement le service email :
# Supprimer ou commenter ACKIFY_MAIL_HOST
# ACKIFY_MAIL_HOST=Le dashboard admin n'affichera plus les options d'envoi de rappels.