====== Automated Gmail-to-PDF Archiving System ====== [[Archive Update|Archive Update]] ===== Purpose ===== This system automatically searches Gmail for emails sent **to or from specific contacts or domains**, converts them into PDFs, and stores them in named folders in Google Drive. It's used to keep a searchable, organized, and timestamped record of key communications for future reference, especially across insurance and claim-related projects. ===== What It Does ===== * Searches Gmail for all emails **to or from** a specific sender or domain. * Converts each email into a timestamped **.pdf** file using Google Apps Script. * Stores the PDFs in organized folders within Google Drive, named after the contact or domain. * Filenames follow this format: ''YYYY-MM-DD - TO/FROM email@domain.com - Subject.pdf'' ===== How It Works ===== - Create a new [[https://script.google.com|Google Apps Script]] project. - Paste the provided script for the desired sender/domain (see below). - Run the script and authorize permissions. - The script auto-creates a Drive folder (if not existing) and fills it with PDFs. ===== Script Template ===== Replace ''@example.com'' or ''user@example.com'' with your target domain or address: function archiveAllEmailsWithDomain() { var domain = "@example.com"; var threads = GmailApp.search("from:" + domain + " OR to:" + domain); var folderName = "Gmail PDFs - Example (All Emails)"; var folders = DriveApp.getFoldersByName(folderName); var folder = folders.hasNext() ? folders.next() : DriveApp.createFolder(folderName); for (var i = 0; i < threads.length; i++) { var messages = threads[i].getMessages(); for (var j = 0; j < messages.length; j++) { var msg = messages[j]; var sender = msg.getFrom(); var recipient = msg.getTo(); var date = Utilities.formatDate(msg.getDate(), "GMT", "yyyy-MM-dd"); var subject = msg.getSubject().replace(/[^a-zA-Z0-9 ]/g, '').substring(0, 50); var direction = sender.includes(domain) ? "FROM" : "TO"; var contact = sender.includes(domain) ? sender : recipient; var contactClean = contact.match(/<(.+)>/) ? contact.match(/<(.+)>/)[1] : contact; var filename = `${date} - ${direction} ${contactClean} - ${subject}.pdf`; var blob = Utilities.newBlob(msg.getBody(), "text/html", filename).getAs("application/pdf"); folder.createFile(blob); } } } ===== Configured Examples ===== * **Shari Bradix (specific address):** ''Shari.Bradix@cna.com'' * **All CNA contacts:** ''@cna.com'' * **All J.S. Held engineers:** ''@jsheld.com'' * **Bockmon Insurance:** ''@bockmoninsurance.com'' ===== Next Steps (Optional) ===== * Add automatic scheduling to run these scripts daily/weekly. * Enhance script to export attachments or summarize content with AI. * Back up Drive folders to external storage/cloud systems. ---- ''This system is designed for accuracy, automation, and fast retrieval of critical email communication records.'' ====== Email Organization Overview ====== This page documents how our Gmail-to-PDF email archiving system is structured for project organization, historical tracking, and AI analysis. Each category corresponds to a specific contact, domain, or role, with emails exported and stored in clearly named Google Drive folders. ===== Folder Structure and Categories ===== * **Gmail PDFs - Shari Bradix (All)** → All emails to/from Shari.Bradix@cna.com * **Gmail PDFs - CNA (All Emails)** → All emails to/from @cna.com * **Gmail PDFs - CNA Other than Shari** → All CNA emails excluding Shari.Bradix@cna.com * **Gmail PDFs - J.S. Held (All Emails)** → All emails to/from @jsheld.com * **Gmail PDFs - Bockmon Insurance (All Emails)** → All emails to/from @bockmoninsurance.com * **Gmail PDFs - Marshall Texas (All Emails)** → All emails to/from @marshalltexas.net * **Gmail PDFs - Eric Powell (Marshall Texas)** → All emails to/from Powell.eric@marshalltexas.net ===== Notes on Script Execution ===== Scripts are designed to run one-time only (manually), and generate a PDF of each email retrieved by the Gmail query. All scripts follow the same structure: loop through threads → extract each message → convert to PDF → save in Drive folder. Each script is mapped to a unique folder name for safe targeting and easy retrieval. ===== Special Case: Eric Powell Email Filtering ===== Eric Powell’s original archive script was missing some emails. This was due to Gmail’s `.getTo()` and `.getFrom()` fields sometimes being blank or incomplete in: * Sent mail * BCC’d messages * Threaded replies where Powell was in earlier parts of the conversation Gmail correctly returned the threads, but the script was skipping emails inside those threads based on this check: ```javascript if (!(sender.includes(email) || recipient.includes(email))) { continue; } ``` **Fix:** We replaced this logic with a cleaner, dual-check method: ```javascript var isFrom = sender.includes(email.toLowerCase()); var isTo = recipient.includes(email.toLowerCase()); if (!isFrom && !isTo) continue; ``` This ensures that every message **directly involving Powell** is captured — no more skipped BCCs or sent replies. Other scripts (like domain-based searches for `@cna.com`) are not affected because they cast a wider net and don’t rely on a single recipient match. ===== Status ===== All seven archiving scripts are now finalized and verified: * 🟢 Folder names confirmed * 🟢 Gmail queries validated * 🟢 Powell fix implemented only where needed * 🟢 Manual execution completed with no errors We are ready to move to the summarization/AI review phase.