Encuentre correos electrónicos legítimos en su carpeta de spam de Gmail con IA y Google Script
Publicado: 2024-06-08Los falsos positivos en Gmail son poco comunes, pero pueden ocurrir, lo que significa que un correo electrónico importante podría terminar por error en su carpeta de spam. Cuando se trata de cientos de mensajes de spam diariamente, identificar estos correos electrónicos legítimos se vuelve aún más difícil.
Puedes crear filtros en Gmail para que los correos electrónicos de remitentes específicos o con determinadas palabras clave nunca se marquen como spam. Pero estos filtros obviamente no funcionarían para correos electrónicos de remitentes nuevos o desconocidos.
Encuentra mensajes clasificados incorrectamente en Gmail Spam
¿Qué pasaría si usáramos IA para analizar nuestros correos electrónicos no deseados en Gmail y predecir cuáles son probablemente falsos positivos? Con esta lista de correos electrónicos mal clasificados, podríamos mover automáticamente estos correos electrónicos a la bandeja de entrada o generar un informe para revisión manual.
Aquí hay un informe de muestra generado desde Gmail. Incluye una lista de correos electrónicos con una puntuación baja de spam que probablemente sean legítimos y deben trasladarse a la bandeja de entrada. El informe también incluye un resumen del contenido del correo electrónico en su idioma preferido.
Para comenzar, abra este Google Script y haga una copia en su Google Drive. Cambie al editor de Apps Script y proporcione su dirección de correo electrónico, clave API de OpenAI y idioma preferido para el resumen del correo electrónico.
Elija la función reportFalsePositives
del menú desplegable y haga clic en el botón de reproducción para ejecutar el script. Buscará correos electrónicos no deseados no leídos en su cuenta de Gmail, los analizará utilizando la API de OpenAI y le enviará un informe de los correos electrónicos con una puntuación de spam baja.
Si desea ejecutar este script automáticamente a intervalos regulares, vaya al menú "Activadores" en el editor de Google Apps Script y configure un activador controlado por tiempo para ejecutar este script una vez al día, como se muestra a continuación. También podrás elegir la hora del día en la que deseas recibir el informe.
Cómo funciona la clasificación de spam mediante IA: la parte técnica
Si tiene curiosidad por saber cómo funciona el guión, aquí tiene una breve descripción general:
Gmail Script utiliza la API de Gmail para buscar correos electrónicos no deseados no leídos en su cuenta de Gmail. Luego envía el contenido del correo electrónico a la API de OpenAI para clasificar la puntuación de spam y generar un resumen en su idioma preferido. Los correos electrónicos con una puntuación de spam baja probablemente sean falsos positivos y pueden trasladarse a la bandeja de entrada.
1. Configuración de usuario
Puede proporcionar su dirección de correo electrónico a la que se debe enviar el informe, su clave API de OpenAI, su modelo LLM preferido y el idioma del resumen del correo electrónico.
// 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. Busque correos electrónicos no leídos en la carpeta de spam de Gmail
Usamos el tiempo de época para buscar correos electrónicos no deseados que llegaron en las últimas 24 horas y aún no se han leído.
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. Cree un mensaje para el modelo OpenAI
Creamos un mensaje para el modelo OpenAI usando el mensaje de correo electrónico. El mensaje le pide al modelo de IA que analice el contenido del correo electrónico y asigne una puntuación de spam en una escala de 0 a 10. La respuesta debe estar en 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. Llame a la API de OpenAI para obtener la puntuación de spam
Pasamos el mensaje del mensaje a la API de OpenAI y obtenemos la puntuación de spam y un resumen del contenido del correo electrónico. La puntuación de spam se utiliza para determinar si el correo electrónico es un falso positivo.
La variable tokens
realiza un seguimiento de la cantidad de tokens utilizados en las llamadas a la API de OpenAI y se incluye en el informe por correo electrónico. Puede utilizar esta información para monitorear el uso de su 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. Procesar correos electrónicos no deseados y enviar el informe por correo electrónico
Puede ejecutar este script de Google manualmente o configurar un activador cron para ejecutarlo automáticamente a intervalos regulares. Marca los correos electrónicos no deseados como leídos para que no se procesen nuevamente.
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 } ) ; } } ;
Ver también: Autentica tus mensajes de Gmail