Trova email legittime nella cartella Spam di Gmail con AI e Google Script

Pubblicato: 2024-06-08

I falsi positivi in ​​Gmail sono rari ma possono verificarsi, il che significa che un'e-mail importante potrebbe finire erroneamente nella cartella spam. Quando hai a che fare quotidianamente con centinaia di messaggi di spam, identificare queste e-mail legittime diventa ancora più difficile.

Puoi creare filtri in Gmail in modo che le email provenienti da mittenti specifici o con determinate parole chiave non vengano mai contrassegnate come spam. Ma questi filtri ovviamente non funzionerebbero per le email provenienti da mittenti nuovi o sconosciuti.

Trova messaggi classificati in modo errato nello spam di Gmail

E se utilizzassimo l'intelligenza artificiale per analizzare le nostre e-mail di spam in Gmail e prevedere quali sono probabilmente falsi positivi? Con questo elenco di e-mail classificate erroneamente, potremmo spostare automaticamente queste e-mail nella posta in arrivo o generare un rapporto per la revisione manuale.

Ecco un rapporto di esempio generato da Gmail. Include un elenco di e-mail con un punteggio di spam basso che probabilmente sono legittime e dovrebbero essere spostate nella posta in arrivo. Il rapporto include anche un riepilogo del contenuto dell'e-mail nella lingua preferita.

Gmail Spam Summary

Per iniziare, apri questo Google Script e creane una copia nel tuo Google Drive. Passa all'editor Apps Script e fornisci il tuo indirizzo email, la chiave API OpenAI e la lingua preferita per il riepilogo email.

Scegli la funzione reportFalsePositives dal menu a discesa e fai clic sul pulsante di riproduzione per eseguire lo script. Cercherà le e-mail di spam non lette nel tuo account Gmail, le analizzerà utilizzando l'API di OpenAI e ti invierà un rapporto di e-mail con un punteggio di spam basso.

Se desideri eseguire questo script automaticamente a intervalli regolari, vai al menu "Trigger" nell'editor di script di Google Apps e imposta un trigger basato sul tempo per eseguire questo script una volta al giorno, come mostrato di seguito. Puoi anche scegliere l'orario del giorno in cui desideri ricevere il report.

Google Script - Time Trigger

Come funziona la classificazione dello spam AI - La parte tecnica

Se sei curioso di sapere come funziona lo script, ecco una breve panoramica:

Lo script Gmail utilizza l'API Gmail per cercare e-mail di spam non lette nel tuo account Gmail. Quindi invia il contenuto dell'e-mail all'API di OpenAI per classificare il punteggio di spam e generare un riepilogo nella tua lingua preferita. Le e-mail con un punteggio di spam basso sono probabilmente falsi positivi e possono essere spostate nella posta in arrivo.

1. Configurazione utente

Puoi fornire il tuo indirizzo e-mail a cui inviare il report, la chiave API OpenAI, il modello LLM preferito e la lingua per il riepilogo 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. Trova le email non lette nella cartella Spam di Gmail

Usiamo l'epoca per trovare le email di spam arrivate nelle ultime 24 ore e non ancora lette.

 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. Creare un prompt per il modello OpenAI

Creiamo un prompt per il modello OpenAI utilizzando il messaggio di posta elettronica. La richiesta chiede al modello AI di analizzare il contenuto dell'e-mail e di assegnare un punteggio di spam su una scala da 0 a 10. La risposta deve essere in formato 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. Chiama l'API OpenAI per ottenere il punteggio di spam

Passiamo la richiesta del messaggio all'API OpenAI e otteniamo il punteggio di spam e un riepilogo del contenuto dell'email. Il punteggio spam viene utilizzato per determinare se l'e-mail è un falso positivo.

La variabile tokens tiene traccia del numero di token utilizzati nelle chiamate API OpenAI ed è inclusa nel report e-mail. Puoi utilizzare queste informazioni per monitorare l'utilizzo dell'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. Elaborare le e-mail di spam e inviare il rapporto tramite e-mail

Puoi eseguire questo script di Google manualmente o impostare un trigger cron per eseguirlo automaticamente a intervalli regolari. Contrassegna le e-mail di spam come lette in modo che non vengano elaborate nuovamente.

 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 } ) ; } } ;

Vedi anche: Autentica i tuoi messaggi Gmail