Toutes les dernières mises à jour, fonctionnalités et améliorations de MailMCP.
Conversion : nudge sur le mur des 5 appels/jour (message MCP enrichi + email auto Free->Pro)
Alerte observabilite : filtre le spam/phishing des mails support (plus d'alerte pour les arnaques 'domaine suspendu')
Observabilite : filtre les rejets SMTP destinataire (Recipient address rejected / No valid recipient) = erreur input LLM, pas notre bug
create_folder idempotent : dossier deja existant = succes (fin du faux positif 'bug')
Upgrade Pro : le flux generique renvoie vers Comptes email pour choisir la boite
Webhook Polar : matching de secours par user_id/email quand account_id absent (flux seats)
Daily stats : fix variable $num manquante dans la closure delta
Daily stats : mail matinal en dashboard HTML + ventes/CA de la veille + churn
Fixes: server/discover en INFO+(-32601), message quota adapte au Pro, formulations Pro exactes (fin des 'illimites')
CGV : article 'Commande, facturation et paiement' complet (exigences Polar MST + droit FR)
Quota Free: corrige '20 -> 5 appels MCP/jour' sur tout le site (le quota reel est 5)
Legal : allege l'editeur (mentions), corrige les quotas CGV, DPA en page imprimable
Legal : refonte en centre légal structuré (1 document = 1 page)
Legal/statut : alleger sous-processeurs + epurer la page /status
Mentions legales : ajout du bloc Prestataire de paiement (Polar Software Inc., Merchant of Record)
Paiement : expliquer au client le role de Polar (Merchant of Record) + corriger 'Stripe' -> 'Polar'
CGV : Stripe -> Polar (Merchant of Record) + palier Free = essai, pas de remboursement au-dela du delai legal
support:import-external : echec IMAP transitoire -> WARNING + SUCCESS (au lieu de FAILURE)
Live chat : bulle plus humaine (photo + 'Assistant IA' + point vert anime ping) + en-tete dynamique (nom — Assistant IA, statut 'En ligne · l'IA peut faire des erreurs' avec point vert anime)
Profil : pre-remplit le pays avec le pays detecte a l'inscription (registration_country) si le champ est vide
observability:alerts : ignore les erreurs des scripts de diag CLI (trace 'Standard input code')
Paiement ouvert a tous : gate IP leve + fix metadata Polar (account_id vide refuse -> omis si absent)
Upgrade : badges de confiance = icones colorees + texte, sans fond/bordure (ne fait plus 'bouton')
Upgrade : badges de confiance en pastilles colorees (vert=securite Stripe, bleu=facture TVA, indigo=resiliable) plus visibles
Page upgrade plus vendeuse : reassurance 'test gratuit', preuve sociale, badges confiance (Stripe/TVA/resiliable)
Facturation : retire le blocage avant Pro, Polar collecte l'adresse + webhook la synchronise
Facturation : pays requis + adresse obligatoire avant Pro + autocomplete adresse (Photon/OSM)
Upgrade : bloquer la souscription tant que l'email n'est pas verifie
Profil : Full name + champs requis/optionnel + select pays recherchable
Devise : regle Europe->EUR / hors Europe->USD + pays d'inscription pour les users connectes
Devise auto selon le pays (US=USD, sinon EUR) + page upgrade currency-aware
Tarifs : retire la mention '10 boites en annuel = 19,90/mois refacturable' (home #pricing + /pricing) — chiffre incoherent avec la grille par-boite
Quota par boite : filet de securite pour les clients payants (plan au niveau user)
Quota MCP par boite (aligne sur le tarif par siege)
Page compte : formulaire d'edition des parametres de connexion (reconnexion)
Upgrade : lien CGV selon la langue active (EN -> /en/legal#terms, FR -> /legal#terms)
Dates d'expiration + resiliation Pro + downgrade auto + CGV obligatoires
Phase 3 : webhook Polar -> provisioning Pro par boite (metadata.account_id)
Factures : onglet dedie 'Facturation' dans /dashboard/profile (retire de la page upgrade)
Offre par boite (siege) : badge + bouton upgrade sur chaque compte
Dashboard: badge plan + bouton Passer a Pro + page souscription Polar (gate IP preview)
Tarifs : selecteur 3 paliers (Mensuel / 12 mois -63% / 24 mois -75%) + textes
ObservabilityAlerts : silence 'non trouve ou deja envoye' (cancel_scheduled input)
Legal : bascule editeur MailMCP vers STAY WEB (SASU) + nouvelle adresse
Doc chatgpt-email : write fonctionne aussi sur Plus (test reel), retrait du caveat lecture seule
MCP OAuth : renvoyer le scope demandé dans la réponse /token (fix warning ChatGPT)
Doc chatgpt-email : corriger le prerequis de plan (Developer mode, write Business/Enterprise)
MCP OAuth /authorize : ne plus rejeter un client dyn_ dont l'enregistrement a expiré
ObservabilityAlerts : silence 'filename et (content OR attachment_id)' (PJ input LLM)
MCP draft_email : auto-créer le dossier Brouillons si absent + détection localisée
ObservabilityAlerts : silence 'réservée aux comptes Pro' (gate Outreach Free->Pro)
MCP move_email : accepter folder/target/dest… en alias de destination
ObservabilityAlerts : silence 'Failed to connect to IMAP server' (miroir anglais)
MCP move_email : resolver de destination (namespace préfixé + dossier existant)
ObservabilityAlerts : silence 'Impossible de se connecter au SMTP' + 'RateLimitReached'
MCP : accepter q/search/term/keyword en alias de query (search_emails)
ObservabilityAlerts : silence 'base64 invalide après' (troncature PJ)
ObservabilityAlerts : silence 'contenu base64 invalide'
ImapService : encoder les noms de dossiers en modified UTF-7 (RFC 3501)
ObservabilityAlerts : silence 'Combined chunks could not be decoded'
MCP : accepter email_id/emailId en alias de id sur les tools email
MCP : toggle par-BAL pour l'alerte "nouvelle IP" (fix ticket Max Kossatz #242544)
ObservabilityAlerts : silence 'SMTP rejected email'
ObservabilityAlerts : silence 'Generate signature failed'
ObservabilityAlerts : silence 'Email ID is required'
Onboarding rescue funnel : 3 mails auto de rattrapage (H+48h / J+3 sans BAL / J+3 sans call MCP)
MCP dispatcher : fallback tolérant method=tool_name + silence l'alerte résiduelle
Dashboard accounts/{id} : onglet Statistiques MCP — Option B
Dashboard accounts : ajoute compteur MCP inline (aujourd'hui/semaine/mois) — Option A
search_emails/list_emails : expose 'mailbox' + 'note' pour éviter le bug UID cross-mailbox
OAuth refresh_token : grace period 30s après revocation (fix race condition claude.ai)
TEMP: log détaillé tools/call pour diag pourquoi mcp_calls reste vide
urgent : restaure le fallback OAuth /authorize (safe) — claude.ai n'envoie pas de resource
balise <title> dashboard — strip_tags sur page-title pour retirer HTML/SVG
Sécurise le OAuth MCP /authorize — exige login + consent + supprime le fallback dangereux
UX sidebar : signaler la cliquabilité de la user card (profil)
Chrome password suggestion — ajout autocomplete sur profile/login/reset
i18n /dashboard/accounts batch 2 : wizard entier (step 1/2/3)
i18n /dashboard/accounts batch 1 : strings hors wizard
Wizard : URLs des steps provider cliquables (target=_blank)
P1 wizard BAL : guide contextuel provider + auto-fill hosts + conseils erreur
Review asks : rate 20→10/jour + section stats dans daily report 08:00
Stats mail auto : sélecteur de période 30j / 3 mois / 12 mois / Tout
Stats mail auto : CTR global + CTR par trigger
Ajoute section « Détail des 4 triggers » (accordion) dans onglet Mail auto
Ajoute les mails automatiques (review-ask, review-followup) dans l'onglet Templates
Système auto de demandes d'avis Trustpilot (feature flag OFF par défaut)
Filtre business : « non trouvé ou déjà envoyé » (cancel_scheduled stale)
SMTP bare LF rejection (552) — normalise CRLF sur body/bodyHtml/htmlSignature
send_email/draft_email/schedule_email : ajout du champ bcc
observability:alerts — filtre 'base64 invalide après' (PJ inline tronquée)
Alerte MCP enrichie : localisation, ASN, client probable, user-agent
observability:alerts — filtre 'Combined chunks could not be decoded as base64'
observability:alerts — filtre 'Recipient address rejected' (user input)
security: bump guzzle 7.11→7.12, psr7 2.11→2.12, phpseclib 3.0.52→3.0.55
observability:alerts — filtre 'Failed to move email' (erreur user input)
observability:alerts — affiche "FIX PROBABLE : commit XXX" si commit post-erreur
Schedule::command->everyTwentyMinutes() n'existe pas, utiliser cron('*/20 * * * *')
MCP base64 PJ : détection troncature dès 2KB + signatures binaires
support:check-followups : skip si on a re-écrit au client après le Sent en question
support:check-followups : skip alerte J+24h si ma réponse n attendait pas de retour
MCP OAuth : tokens persistants en DB + refresh_token (transparent côté Claude)
attribution: exempter mailmcp_attrib de EncryptCookies
SmtpService::sendMail : split 'to' string comma/semicolon-separated
observability:alerts : filtrer is_answered=false dans detectNewSupport
filtre support:import-external trop large (catchait threads internes LWS)
2 trous identifiés sur support : placeholder + sync externe
Phase 6 : header Top traffic sources désaligné (4 cells body / 3 cells head)
Phase 6 : utiliser registration_country (rempli au signup) au lieu de users.country (réservé billing)
Phase 6 analytics : colonne Inscriptions sur toutes les tables
Phase 5 analytics : export CSV + rapport mensuel auto
Phase 3 analytics : line chart SVG avec overlay période précédente
Phase 2 analytics : funnel d'inscription + landing pages + sources de signup
Phase 1 analytics : précision device_type + skip self-crawlers
MCP OAuth loop + notifications spam logs
MCP delete_email : message d'erreur actionnable + filtre alerte
Crawl quotidien broken-links + alerte mail nicolas@lws.fr
2 erreurs 404/403 trouvées par le broken-link checker
/compare 404 + ajout broken-link checker
Add apple-touch-icon-precomposed.png (copy of apple-touch-icon.png) — fixes iOS 404
Analytics : User-Agent + device type + score bot + détection bots IA séparés
Analytics: lecture en direct depuis page_views (plus dépendant du rollup cron)
Analytics : dashboard stats site dans le BO + tracking RGPD-friendly
MCP read_email/mark_read : message d'erreur précis + filtre alerte
MCP attachment chunked : tolère les 2 stratégies de découpage base64
Observability : filtre aussi schedule_email avec date passée
MCP draft_email : message d'erreur précis (parité avec send_email) + filtre
MCP OAuth : client_id inconnu = WARNING, pas ERROR + filtre alertes
MCP upload chunké : instruction next_action explicite pour forcer Claude à finir
Observability: re-test live avant d'alerter sur une régression compte
MCP OAuth : ne plus exiger client_secret quand PKCE est validé (OAuth 2.1)
MCP: message d'erreur explicite quand base64 tronqué sur grosse image
MCP : upload chunké pour pièces jointes volumineuses (> ~75KB)
MCP send_email : images inline via cid: (RFC 2392) + auto-convert data URI
SupportInboxSync : dédup pour ne plus créer de doublons après move IMAP
/subprocessors 500 — apostrophe parasite dans le __() cookies
emails affichés en double @@ partout — @@ n'est pas un escape en texte libre
MCP attachments : tolérer base64 multi-ligne + préfixe data URI
détection EU provider insensible à la casse
Conformité IA/RGPD : centralisation OpenRouter + log métadonnées + transparence
Réduction du bruit log : 3 bugs analysés et adressés
ObservabilityAlerts : filtre les erreurs business + parse JSON contexte
MCP move_email : auto-création du dossier de destination + meilleure description
2 bugs sur les stats observabilité
Observability : split en alerts événementiels + daily stats (au lieu d'un mail horaire générique)
Observabilité : redirige les digests vers nicolas@lws.fr (au lieu de Gmail perso)
Observabilité : digest auto mail chaque heure si l'état système change
Funnel tracking : combler les 5 gaps d'instrumentation identifiés
SMTP STARTTLS support + user_events funnel + account_setup log channel
SMTP : fix greeting multi-ligne + fallback AUTH PLAIN (cas thundercloud / Charlie Lidbury)
Support inbox : lecture depuis DB cache (au lieu d'IMAP direct)
Support inbox : cache DB des emails (sync IMAP, rétention 45j, scheduler 10min)
MCP OAuth: token longue durée (30j) sans refresh — pattern repris de gadspilot
Outreach: présenter la feature comme 'bientôt disponible' avec teaser complet
MCP OAuth : TTL access token 1h → 24h (refresh 30j → 90j)
MCP: corriger discovery send_email (description simplifiée + instructions assertives)
ApifyService: logging détaillé + timeout 50s→90s + champ 'videos' input
Outreach: actor Apify exporter24/youtube-email-bulk-scraper validé
Outreach: filtre 'Min abonnés' dans find-similar (élimine nano-chaînes)
Outreach: extraction IA des mots-clés thématiques (au lieu de fréquence)
Outreach: pré-remplissage mots-clés find-similar + alerte actor Apify
Outreach: 3 améliorations UX (bulk delete, Apify per-row, find-similar preview)
Outreach: fix find-similar (mots-clés desc.) + intégration Apify (Step 6)
Outreach: feature 'Trouver des chaînes similaires' (YouTube search.list)
Outreach: tabs bulletproof — class Tailwind 'hidden' au lieu de CSS custom
Outreach: bouton bulk rescan + fix bug tabs (timing JS)
Outreach: dédup chaîne, rescan, copy/open URL + fix bug tabs
Outreach: extraction email depuis ytInitialData JSON dans /about
Outreach: cascade Step 5 — scan des 5 dernières descriptions vidéos
Outreach: déblocage UX (saisie email manuelle, suppression cible, tabs)
Outreach: 3 fixes (UNIQUE race, URLs vidéo, batch resilience)
Outreach: ajout suppression de campagne (icône liste + bouton détail)
Outreach: mode live (dispatchSync) — pas besoin de worker queue
Outreach: WebsiteContextService — l'IA visite le site du user pour écrire un pitch factuel (au lieu de placeholders [à préciser])
Outreach: pitch IA plus persuasif (preuve sociale + tarifs explicites)
Outreach: pré-remplissage pitch + brief IA depuis le profil utilisateur
Phase 6: 4 outils MCP outreach exposés à Claude/ChatGPT/Cursor
Phase 5: dashboard UI outreach branchée sur les services réels
Phase 4: jobs async outreach (Find + Send) avec retry et idempotence
Phase 3: services métier outreach (Quota, YouTube, EmailFinder, Pitch)
Phase 2: schéma DB outreach (campaigns, targets, usage, global quota)
outreach 500: échapper le placeholder {{channel_name}} en @{{ }}
Dashboard: page démo Outreach influenceurs YouTube (mockup visuel)
Yahoo Mail: nouvelle landing /guides/email-yahoo-ia + slug EN
blank pages: strip rogue v-cloak from non-Vue pages
SMTP: MIME-encode From/To/Cc display names + auto-promote HTML body
MCP: send/draft/schedule_email accept body_html for HTML emails
Léa — Assistant IA
En ligne · l'IA peut faire des erreurs
Besoin d'un humain ? contact@mailmcp.io