ค้นหาอีเมลที่ถูกต้องในโฟลเดอร์สแปม Gmail ของคุณด้วย AI และ Google Script
เผยแพร่แล้ว: 2024-06-08ผลบวกลวงใน Gmail เป็นเรื่องปกติแต่สามารถเกิดขึ้นได้ ซึ่งหมายความว่าอีเมลสำคัญอาจไปอยู่ในโฟลเดอร์สแปมของคุณโดยไม่ได้ตั้งใจ เมื่อคุณต้องรับมือกับข้อความสแปมหลายร้อยข้อความทุกวัน การระบุอีเมลที่ถูกต้องเหล่านี้จะยิ่งท้าทายมากขึ้น
คุณสามารถสร้างตัวกรองใน Gmail เพื่อให้อีเมลจากผู้ส่งที่ระบุหรือคำหลักบางคำไม่ถูกทำเครื่องหมายว่าเป็นสแปม แต่เห็นได้ชัดว่าตัวกรองเหล่านี้ใช้ไม่ได้กับอีเมลจากผู้ส่งรายใหม่หรือผู้ส่งที่ไม่รู้จัก
ค้นหาข้อความที่จัดประเภทไม่ถูกต้องในจดหมายขยะ Gmail
จะเกิดอะไรขึ้นถ้าเราใช้ AI เพื่อวิเคราะห์อีเมลสแปมของเราใน Gmail และคาดการณ์ว่าอีเมลใดที่มีแนวโน้มว่าจะเป็นผลบวกลวง? ด้วยรายการอีเมลที่ไม่จัดประเภทนี้ เราสามารถย้ายอีเมลเหล่านี้ไปที่กล่องจดหมายโดยอัตโนมัติหรือสร้างรายงานสำหรับการตรวจสอบด้วยตนเอง
นี่คือรายงานตัวอย่างที่สร้างจาก Gmail ประกอบด้วยรายการอีเมลที่มีคะแนนสแปมต่ำซึ่งมีแนวโน้มว่าจะถูกต้องและควรย้ายไปยังกล่องจดหมาย รายงานยังประกอบด้วยสรุปเนื้อหาอีเมลในภาษาที่คุณต้องการอีกด้วย
ในการเริ่มต้น ให้เปิด Google Script นี้และทำสำเนาใน Google Drive ของคุณ เปลี่ยนไปใช้โปรแกรมแก้ไขสคริปต์ Apps และระบุที่อยู่อีเมล คีย์ OpenAI API และภาษาที่ต้องการสำหรับสรุปอีเมล
เลือกฟังก์ชัน reportFalsePositives
จากดรอปดาวน์แล้วคลิกปุ่มเล่นเพื่อเรียกใช้สคริปต์ มันจะค้นหาอีเมลสแปมที่ยังไม่ได้อ่านในบัญชี Gmail ของคุณ วิเคราะห์โดยใช้ API ของ OpenAI และส่งรายงานอีเมลที่มีคะแนนสแปมต่ำถึงคุณ
หากคุณต้องการเรียกใช้สคริปต์นี้โดยอัตโนมัติตามช่วงเวลาที่สม่ำเสมอ ให้ไปที่เมนู "ทริกเกอร์" ในตัวแก้ไขสคริปต์ของ Google Apps และตั้งค่าทริกเกอร์ที่ขับเคลื่อนด้วยเวลาเพื่อเรียกใช้สคริปต์นี้วันละครั้งดังที่แสดงด้านล่าง คุณสามารถเลือกเวลาของวันที่คุณต้องการรับรายงานได้
AI Spam Classification ทำงานอย่างไร - ส่วนทางเทคนิค
หากคุณอยากรู้ว่าสคริปต์ทำงานอย่างไร ต่อไปนี้เป็นภาพรวมโดยย่อ:
สคริปต์ Gmail ใช้ Gmail API เพื่อค้นหาอีเมลสแปมที่ยังไม่ได้อ่านในบัญชี Gmail ของคุณ จากนั้นจะส่งเนื้อหาอีเมลไปยัง API ของ OpenAI เพื่อจัดประเภทคะแนนสแปมและสร้างข้อมูลสรุปในภาษาที่คุณต้องการ อีเมลที่มีคะแนนสแปมต่ำมีแนวโน้มที่จะเป็นผลบวกที่ผิดพลาดและสามารถย้ายไปยังกล่องจดหมายได้
1. การกำหนดค่าผู้ใช้
คุณสามารถระบุที่อยู่อีเมลของคุณที่ควรส่งรายงาน คีย์ OpenAI API โมเดล LLM ที่คุณต้องการ และภาษาสำหรับสรุปอีเมล
// 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. ค้นหาอีเมลที่ยังไม่ได้อ่านในโฟลเดอร์สแปม Gmail
เราใช้เวลายุคเพื่อค้นหาอีเมลขยะที่มาถึงใน 24 ชั่วโมงที่ผ่านมาและยังไม่ได้อ่าน
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. สร้างพรอมต์สำหรับโมเดล OpenAI
เราสร้างพรอมต์สำหรับโมเดล OpenAI โดยใช้ข้อความอีเมล พรอมต์จะขอให้โมเดล AI วิเคราะห์เนื้อหาอีเมลและกำหนดคะแนนสแปมในระดับตั้งแต่ 0 ถึง 10 การตอบกลับควรอยู่ในรูปแบบ 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. เรียก OpenAI API เพื่อรับคะแนนสแปม
เราส่งข้อความแจ้งไปยัง OpenAI API และรับคะแนนสแปมและสรุปเนื้อหาอีเมล คะแนนสแปมใช้เพื่อพิจารณาว่าอีเมลเป็นผลบวกลวงหรือไม่
ตัวแปร tokens
จะติดตามจำนวนโทเค็นที่ใช้ในการเรียก OpenAI API และรวมอยู่ในรายงานอีเมล คุณสามารถใช้ข้อมูลนี้เพื่อตรวจสอบการใช้งาน 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. ประมวลผลอีเมลขยะและส่งอีเมลรายงาน
คุณสามารถเรียกใช้สคริปต์ Google นี้ด้วยตนเองหรือตั้งค่าทริกเกอร์ cron ให้เรียกใช้โดยอัตโนมัติตามช่วงเวลาที่สม่ำเสมอ จะทำเครื่องหมายอีเมลขยะว่าอ่านแล้วเพื่อไม่ให้ประมวลผลอีกครั้ง
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 } ) ; } } ;
ดูเพิ่มเติมที่: ตรวจสอบสิทธิ์ข้อความ Gmail ของคุณ