Sécurité et révocation d'accès
Des jetons, pas des mots de passe
Connecter un assistant ne lui transmet jamais votre mot de passe MailInApp ni une clé API. Approuver l'écran de consentement génère un jeton d'accès OAuth limité exactement aux permissions que vous avez cochées, lié exactement au compte que vous avez sélectionné. Les jetons sont des chaînes aléatoires opaques stockées sous forme hachée — le même schéma que MailInApp utilise déjà pour les clés API de développeur — de sorte qu'une lecture de la base de données ne peut pas récupérer un identifiant utilisable, et révoquer un jeton est instantané plutôt que d'attendre une expiration.
- Les jetons d'accès durent 1 heure.
- Les jetons de rafraîchissement durent 60 jours et tournent à chaque utilisation — l'ancien cesse de fonctionner dès qu'un nouveau est émis, et si un jeton de rafraîchissement déjà remplacé est un jour rejoué (signe qu'il a fuité), toute la connexion est révoquée automatiquement plutôt que ce seul jeton.
Confirmation en deux étapes avant tout envoi
L'octroi de campaigns:send ne signifie pas qu'un assistant peut envoyer un email à vos contacts en une seule étape. L'envoi passe toujours par deux appels d'outil distincts :
prepare_sendrésout votre audience, applique les suppressions, et génère un vrai aperçu — annoté comme lecture seule, car il n'envoie rien. Il renvoie le nombre de destinataires, un échantillon d'adresses, le HTML rendu, et unconfirmationTokende courte durée lié exactement à ce projet, cet objet et cette audience.confirm_sendexige exactement ce jeton, plus exactement le même projet/objet/audience pour lesquels il a été émis. Toute divergence — un objet différent, une sélection de lignes différente, un jeton expiré (fenêtre de 10 minutes) — est rejetée d'emblée.
L'effet pratique : un assistant ne peut pas envoyer de courrier sans avoir d'abord montré ce qu'il est sur le point d'envoyer et à combien de personnes, et il ne peut pas changer l'audience ou l'objet entre le moment où il vous montre l'aperçu et l'envoi effectif. Sur Claude, le résultat de prepare_send s'affiche comme une véritable carte avec son propre bouton Confirm & Send — ainsi, l'approbation humaine est un clic sur un aperçu rendu, pas une phrase dans une transcription de conversation qu'un modèle pourrait se convaincre de dépasser.
Chaque envoi effectué de cette façon passe en plus par les garde-fous existants de votre compte : le plafond connectorSendRecipientsMonthly de votre forfait (distinct de, et bien inférieur à, votre volume d'envoi mensuel habituel — 0 sur Free), la même liste de suppression que tout autre envoi vérifie, et le plafond d'envoi mensuel global de votre compte. Chacun est aussi enregistré comme son propre enregistrement d'audit.
Le contenu non fiable est encadré, jamais approuvé
Les champs de contact, les corps de message de messagerie entrante, et les réponses de formulaire en texte libre sont tous rédigés par des personnes autres que vous — un destinataire, ou quiconque écrit à votre boîte d'assistance. Les outils qui renvoient ce contenu l'encadrent clairement comme donnée non fiable dans le résultat de l'outil, afin que votre assistant le traite comme quelque chose à lire et résumer, jamais comme une instruction à suivre. (Pour les curieux côté technique : cet encadrement se trouve dans le résultat de l'outil, jamais dans la description de l'outil — placer des instructions comportementales dans une description est exactement le type de surface d'injection de prompt que les réviseurs de connecteurs rejettent à vue.)
Ce qu'aucun outil ne peut jamais atteindre
Aucun outil de connecteur — quelles que soient les portées que vous accordez — ne peut lire ni faire tourner une clé API, un secret de signature de webhook, un mot de passe SMTP, ou le secret client OAuth d'une source de données connectée ; modifier les paramètres de paiement, de domaine ou SMTP ; ou gérer les invitations d'équipe. Ce sont exactement les mêmes exceptions dont un coéquipier editor est déjà exclu partout ailleurs dans MailInApp. Rien ici ne touche non plus à Stripe ou à la facturation — une contestation de paiement ou un remboursement reste une action réservée au tableau de bord.
Pour quel compte, toujours revérifié
Une connexion est liée à un seul compte au moment du consentement et ne relit jamais un en-tête pour décider pour quel compte agir (contrairement à une session de tableau de bord connectée qui choisit entre plusieurs entreprises). Cette liaison est revalidée à chaque appel par rapport à votre appartenance d'équipe actuelle — si vous êtes retiré d'une équipe, ou si votre rôle change, le tout prochain appel sur cette connexion reflète la nouvelle réalité, pas ce qui était vrai quand vous l'avez accordée.
Révoquer une connexion
Allez dans Connexions dans le tableau de bord (/dashboard/connections). Chaque assistant que vous avez approuvé est listé avec ses portées accordées et la date de son dernier appel ; Révoquer prend effet immédiatement — chaque jeton détenu par cet assistant, accès et rafraîchissement compris, cesse de fonctionner dès son tout prochain appel. Il n'y a rien à défaire du côté de la plateforme (Claude/Gemini) au préalable ; révoquer ici est toujours suffisant.