feat: Add runtime config, trusted senders, JMAP identities, and UI improvements

- Runtime environment variables for Docker-friendly configuration
- Trusted senders list for automatic image loading
- JMAP identities for proper sender address
- Improved email composer readability
- Horizontal scroll for wide HTML emails
This commit is contained in:
Matthieu MALVACHE
2026-01-08 02:08:18 +01:00
committed by Matthieu MALVACHE
parent dbffaf2a15
commit 58cfe09dc6
18 changed files with 778 additions and 100 deletions
+31 -2
View File
@@ -7,11 +7,18 @@
"password_placeholder": "Enter your password",
"sign_in": "Sign in",
"signing_in": "Signing in...",
"loading": "Loading...",
"error": {
"invalid_credentials": "Invalid email or password",
"connection_failed": "Failed to connect to the server",
"generic": "An error occurred. Please try again."
}
},
"config_error": {
"title": "Configuration Error",
"fetch_failed": "Unable to load application configuration. Please try again later.",
"server_not_configured": "The mail server has not been configured. Please contact your administrator."
},
"remove_from_history": "Remove from history"
},
"sidebar": {
"compose": "Compose",
@@ -82,6 +89,7 @@
"hide_details": "Hide details",
"external_content_warning": "Images and external content have been blocked",
"load_external_content": "Load images",
"trust_sender": "Always trust this sender",
"message_details": "Message Details",
"authentication": {
"title": "Authentication",
@@ -132,6 +140,7 @@
"reply_to": "Reply",
"reply_all_to": "Reply All",
"forward_message": "Forward",
"from": "From",
"to": "To",
"cc": "CC",
"bcc": "BCC",
@@ -139,7 +148,8 @@
"body_placeholder": "Write your message...",
"send": "Send",
"cancel": "Cancel",
"attach": "Attach files",
"attach": "Attach",
"discard": "Discard",
"discard_draft_confirm": "You have unsaved changes. Do you want to discard this draft?",
"quote": {
"reply_header": "On {{date}}, {{sender}} wrote:",
@@ -313,6 +323,25 @@
"ask": "Always ask",
"block": "Always block",
"allow": "Always allow"
},
"trusted_senders": {
"label": "Trusted Senders",
"description": "Manage senders whose images load automatically",
"count_zero": "None",
"count_one": "1 sender",
"count_other": "{count} senders",
"modal_title": "Trusted Senders",
"empty_title": "No trusted senders yet",
"empty_description": "When viewing an email with blocked images, click \"Always trust this sender\" to add them here.",
"add_manually": "Add sender manually",
"add_button": "Add",
"add_placeholder": "Enter email address",
"search_placeholder": "Search senders...",
"no_results": "No senders match your search",
"remove": "Remove",
"close": "Close",
"invalid_email": "Please enter a valid email address",
"already_added": "This sender is already trusted"
}
},
"composer": {
+31 -2
View File
@@ -7,11 +7,18 @@
"password_placeholder": "Entrez votre mot de passe",
"sign_in": "Se connecter",
"signing_in": "Connexion en cours...",
"loading": "Chargement...",
"error": {
"invalid_credentials": "Email ou mot de passe invalide",
"connection_failed": "Échec de la connexion au serveur",
"generic": "Une erreur s'est produite. Veuillez réessayer."
}
},
"config_error": {
"title": "Erreur de configuration",
"fetch_failed": "Impossible de charger la configuration de l'application. Veuillez réessayer plus tard.",
"server_not_configured": "Le serveur de messagerie n'a pas été configuré. Veuillez contacter votre administrateur."
},
"remove_from_history": "Supprimer de l'historique"
},
"sidebar": {
"compose": "Composer",
@@ -82,6 +89,7 @@
"hide_details": "Masquer les détails",
"external_content_warning": "Les images et le contenu externe ont été bloqués",
"load_external_content": "Charger les images",
"trust_sender": "Toujours faire confiance à cet expéditeur",
"message_details": "Détails du message",
"authentication": {
"title": "Authentification",
@@ -132,6 +140,7 @@
"reply_to": "Répondre",
"reply_all_to": "Répondre à tous",
"forward_message": "Transférer",
"from": "De",
"to": "À",
"cc": "CC",
"bcc": "CCI",
@@ -139,7 +148,8 @@
"body_placeholder": "Écrivez votre message...",
"send": "Envoyer",
"cancel": "Annuler",
"attach": "Joindre des fichiers",
"attach": "Joindre",
"discard": "Supprimer",
"discard_draft_confirm": "Vous avez des modifications non enregistrées. Voulez-vous supprimer ce brouillon ?",
"quote": {
"reply_header": "Le {{date}}, {{sender}} a écrit :",
@@ -313,6 +323,25 @@
"ask": "Toujours demander",
"block": "Toujours bloquer",
"allow": "Toujours autoriser"
},
"trusted_senders": {
"label": "Expéditeurs de confiance",
"description": "Gérer les expéditeurs dont les images se chargent automatiquement",
"count_zero": "Aucun",
"count_one": "1 expéditeur",
"count_other": "{count} expéditeurs",
"modal_title": "Expéditeurs de confiance",
"empty_title": "Aucun expéditeur de confiance",
"empty_description": "Lorsque vous consultez un email avec des images bloquées, cliquez sur « Toujours faire confiance à cet expéditeur » pour l'ajouter ici.",
"add_manually": "Ajouter manuellement",
"add_button": "Ajouter",
"add_placeholder": "Entrez une adresse email",
"search_placeholder": "Rechercher...",
"no_results": "Aucun expéditeur ne correspond à votre recherche",
"remove": "Supprimer",
"close": "Fermer",
"invalid_email": "Veuillez entrer une adresse email valide",
"already_added": "Cet expéditeur est déjà de confiance"
}
},
"composer": {