Trouvez des e-mails légitimes dans votre dossier spam Gmail avec l'IA et Google Script

Publié: 2024-06-08

Les faux positifs dans Gmail sont rares mais peuvent survenir, ce qui signifie qu'un e-mail important peut se retrouver par erreur dans votre dossier spam. Lorsque vous traitez quotidiennement des centaines de messages de spam, identifier ces e-mails légitimes devient encore plus difficile.

Vous pouvez créer des filtres dans Gmail afin que les e-mails provenant d'expéditeurs spécifiques ou contenant certains mots-clés ne soient jamais marqués comme spam. Mais ces filtres ne fonctionneraient évidemment pas pour les e-mails provenant d’expéditeurs nouveaux ou inconnus.

Rechercher des messages mal classés dans Gmail Spam

Et si nous utilisions l’IA pour analyser nos spams dans Gmail et prédire lesquels sont susceptibles d’être des faux positifs ? Avec cette liste d'e-mails mal classés, nous pourrions automatiquement déplacer ces e-mails vers la boîte de réception ou générer un rapport pour examen manuel.

Voici un exemple de rapport généré à partir de Gmail. Il comprend une liste d'e-mails avec un faible score de spam qui sont probablement légitimes et doivent être déplacés vers la boîte de réception. Le rapport comprend également un résumé du contenu de l'e-mail dans votre langue préférée.

Gmail Spam Summary

Pour commencer, ouvrez ce script Google et faites-en une copie dans votre Google Drive. Basculez vers l'éditeur Apps Script et indiquez votre adresse e-mail, votre clé API OpenAI et votre langue préférée pour le résumé de l'e-mail.

Choisissez la fonction reportFalsePositives dans la liste déroulante et cliquez sur le bouton de lecture pour exécuter le script. Il recherchera les spams non lus dans votre compte Gmail, les analysera à l'aide de l'API d'OpenAI et vous enverra un rapport sur les e-mails avec un faible score de spam.

Si vous souhaitez exécuter ce script automatiquement à intervalles réguliers, accédez au menu « Déclencheurs » dans l'éditeur de script Google Apps et configurez un déclencheur temporel pour exécuter ce script une fois par jour, comme indiqué ci-dessous. Vous pouvez également choisir l'heure de la journée à laquelle vous souhaitez recevoir le rapport.

Google Script - Time Trigger

Comment fonctionne la classification du spam AI - La partie technique

Si vous êtes curieux de savoir comment fonctionne le script, voici un bref aperçu :

Le script Gmail utilise l'API Gmail pour rechercher les courriers indésirables non lus dans votre compte Gmail. Il envoie ensuite le contenu de l'e-mail à l'API d'OpenAI pour classer le score de spam et générer un résumé dans votre langue préférée. Les e-mails avec un faible score de spam sont probablement des faux positifs et peuvent être déplacés vers la boîte de réception.

1. Configuration utilisateur

Vous pouvez fournir votre adresse e-mail à laquelle le rapport doit être envoyé, votre clé API OpenAI, votre modèle LLM préféré et la langue du résumé par e-mail.

 // Basic configuration const USER_EMAIL = '[email protected]' ; // Email address to send the report to const OPENAI_API_KEY = 'sk-proj-123' ; // API key for OpenAI const OPENAI_MODEL = 'gpt-4o' ; // Model name to use with OpenAI const USER_LANGUAGE = 'English' ; // Language for the email summary

2. Rechercher les e-mails non lus dans le dossier Spam de Gmail

Nous utilisons l'époque pour rechercher les courriers indésirables arrivés au cours des dernières 24 heures et qui ne sont toujours pas lus.

 const HOURS_AGO = 24 ; // Time frame to search for emails (in hours) const MAX_THREADS = 25 ; // Maximum number of email threads to process const getSpamThreads_ = ( ) => { const epoch = ( date ) => Math . floor ( date . getTime ( ) / 1000 ) ; const beforeDate = new Date ( ) ; const afterDate = new Date ( ) ; afterDate . setHours ( afterDate . getHours ( ) - HOURS_AGO ) ; const searchQuery = ` is:unread in:spam after: ${ epoch ( afterDate ) } before: ${ epoch ( beforeDate ) } ` ; return GmailApp . search ( searchQuery , 0 , MAX_THREADS ) ; } ;

3. Créez une invite pour le modèle OpenAI

Nous créons une invite pour le modèle OpenAI à l'aide du message électronique. L'invite demande au modèle d'IA d'analyser le contenu de l'e-mail et d'attribuer un score de spam sur une échelle de 0 à 10. La réponse doit être au format JSON.

 const SYSTEM_PROMPT = ` You are an AI email classifier. Given the content of an email, analyze it and assign a spam score on a scale from 0 to 10, where 0 indicates a legitimate email and 10 indicates a definite spam email. Provide a short summary of the email in ${ USER_LANGUAGE } . Your response should be in JSON format. ` ; const MAX_BODY_LENGTH = 200 ; // Maximum length of email body to include in the AI prompt const getMessagePrompt_ = ( message ) => { const body = message . getPlainBody ( ) . replace ( / https?:\/\/[^\s>]+ / g , '' ) . replace ( / [\n\r\t] / g , ' ' ) . replace ( / \s+ / g , ' ' ) . trim ( ) ; // remove all URLs, and whitespace characters return [ ` Subject: ${ message . getSubject ( ) } ` , ` Sender: ${ message . getFrom ( ) } ` , ` Body: ${ body . substring ( 0 , MAX_BODY_LENGTH ) } ` , ] . join ( '\n' ) ; } ;

4. Appelez l'API OpenAI pour obtenir le score de spam

Nous transmettons l'invite du message à l'API OpenAI et obtenons le score de spam et un résumé du contenu de l'e-mail. Le score de spam est utilisé pour déterminer si l'e-mail est un faux positif.

La variable tokens garde une trace du nombre de jetons utilisés dans les appels de l'API OpenAI et est incluse dans le rapport par courrier électronique. Vous pouvez utiliser ces informations pour surveiller votre utilisation de l'API.

 let tokens = 0 ; const getMessageScore_ = ( messagePrompt ) => { const apiUrl = ` https://api.openai.com/v1/chat/completions ` ; const headers = { 'Content-Type' : 'application/json' , Authorization : ` Bearer ${ OPENAI_API_KEY } ` , } ; const response = UrlFetchApp . fetch ( apiUrl , { method : 'POST' , headers , payload : JSON . stringify ( { model : OPENAI_MODEL , messages : [ { role : 'system' , content : SYSTEM_PROMPT } , { role : 'user' , content : messagePrompt } , ] , temperature : 0.2 , max_tokens : 124 , response_format : { type : 'json_object' } , } ) , } ) ; const data = JSON . parse ( response . getContentText ( ) ) ; tokens += data . usage . total_tokens ; const content = JSON . parse ( data . choices [ 0 ] . message . content ) ; return content ; } ;

5. Traitez les courriers indésirables et envoyez le rapport par courrier électronique

Vous pouvez exécuter ce script Google manuellement ou configurer un déclencheur cron pour l'exécuter automatiquement à intervalles réguliers. Il marque les courriers indésirables comme lus afin qu'ils ne soient pas traités à nouveau.

 const SPAM_THRESHOLD = 2 ; // Threshold for spam score to include in the report const reportFalsePositives = ( ) => { const html = [ ] ; const threads = getSpamThreads_ ( ) ; for ( let i = 0 ; i < threads . length ; i += 1 ) { const [ message ] = threads [ i ] . getMessages ( ) ; const messagePrompt = getMessagePrompt_ ( message ) ; // Get the spam score and summary from OpenAI const { spam_score , summary } = getMessageScore_ ( messagePrompt ) ; if ( spam_score <= SPAM_THRESHOLD ) { // Add email message to the report if the spam score is below the threshold html . push ( ` <tr><td> ${ message . getFrom ( ) } </td> <td> ${ summary } </td></tr> ` ) ; } } threads . forEach ( ( thread ) => thread . markRead ( ) ) ; // Mark all processed emails as read if ( html . length > 0 ) { const htmlBody = [ ` <table border="1"> ` , '<tr><th>Email Sender</th><th>Summary</th></tr>' , html . join ( '' ) , '</table>' , ] . join ( '' ) ; const subject = ` Gmail Spam Report - ${ tokens } tokens used ` ; GmailApp . sendEmail ( USER_EMAIL , subject , '' , { htmlBody } ) ; } } ;

Voir aussi : Authentifier vos messages Gmail