Tool
RGM° · Tools

Email Subject Line, Preview Text & Content Tester

Score your email for spam-trigger risk, deliverability, length, readability, and compliance (CAN-SPAM, GDPR, CASL). Get AI-style alternatives and benchmark against your industry. Export to CSV, XLS, DOC, or push directly to Google Sheets / Docs.

Your email

Used to benchmark length, send time, and engagement expectations.
Influences the recommendations and benchmarks shown.
Mobile inbox truncates at ~35-40 chars (Gmail iOS), desktop ~70.
Mobile shows ~40-90 chars after the subject. Don't leave blank.
Used for spam-trigger detection, link checks, readability, and compliance scan.
'; return html; } function exportCSV(filename, rows){ _download(filename + '.csv', 'text/csv;charset=utf-8', toCSV(rows)); } function exportTSV(filename, rows){ _download(filename + '.tsv', 'text/tab-separated-values;charset=utf-8', toTSV(rows)); } function exportXLSX(filename, rows, sheetName){ // Saved as .xls so Excel/Numbers/Sheets auto-open the SpreadsheetML. _download(filename + '.xls', 'application/vnd.ms-excel;charset=utf-8', toSpreadsheetML(rows, sheetName)); } function exportDOCX(filename, title, sections){ // Saved as .doc — Word HTML format opens cleanly in Word and Google Docs. _download(filename + '.doc', 'application/msword;charset=utf-8', toWordHTML(title, sections)); } // Clipboard helpers function _copyText(text){ if(navigator.clipboard && navigator.clipboard.writeText){ return navigator.clipboard.writeText(text); } return new Promise(function(resolve, reject){ try{ var ta = document.createElement('textarea'); ta.value = text; ta.style.position = 'fixed'; ta.style.left = '-9999px'; document.body.appendChild(ta); ta.select(); document.execCommand('copy'); document.body.removeChild(ta); resolve(); } catch(e){ reject(e); } }); } // Google Sheets — honest workflow: copy TSV, open blank Sheet, prompt to paste. function openInGoogleSheets(rows, filenameHint){ var tsv = toTSV(rows); var modal = _ensureModal(); _copyText(tsv).then(function(){ modal.show({ title: 'Open in Google Sheets', steps: [ 'Data copied to your clipboard (TSV).', 'A new blank Google Sheet will open in a new tab — sign in if prompted.', 'In the new Sheet, click cell A1 and press Cmd/Ctrl + V to paste.', 'Save by going to File → Rename (Google saves automatically).' ], primary: { label: 'Open new Google Sheet', href: 'https://sheets.new' }, secondary: { label: 'Download as .xls instead', onClick: function(){ exportXLSX(filenameHint || 'rgm-export', rows); }}, honestNote: 'This static site cannot write directly to Google Sheets (that requires a backend server with OAuth). The paste workflow above is the most reliable equivalent.' }); }).catch(function(){ modal.show({ title: 'Copy did not work in your browser', steps: [ 'Use the download button to get an .xls file you can open in Sheets via File → Import.' ], primary: { label: 'Download .xls', onClick: function(){ exportXLSX(filenameHint||'rgm-export', rows); }}, secondary: { label: 'Close', onClick: function(){ modal.close(); }} }); }); } // Google Docs — same workflow, but plain text or HTML pasted. function openInGoogleDocs(title, sections, filenameHint){ // Build a plaintext summary for clipboard paste. var lines = [title, '']; sections.forEach(function(s){ if(s.heading) { lines.push(s.heading); lines.push(''); } if(s.textBody) { lines.push(s.textBody); lines.push(''); } if(s.table && s.table.length){ s.table.forEach(function(r){ lines.push(r.join('\t')); }); lines.push(''); } }); var text = lines.join('\n'); var modal = _ensureModal(); _copyText(text).then(function(){ modal.show({ title: 'Open in Google Docs', steps: [ 'Content copied to your clipboard (plain text).', 'A new blank Google Doc will open in a new tab — sign in if prompted.', 'Click into the doc and press Cmd/Ctrl + V to paste.', 'Rename via File → Rename.' ], primary: { label: 'Open new Google Doc', href: 'https://docs.new' }, secondary: { label: 'Download as .doc instead', onClick: function(){ exportDOCX(filenameHint||'rgm-export', title, sections); }}, honestNote: 'This static site cannot write directly to Google Docs (that requires a backend server with OAuth). The paste workflow above is the most reliable equivalent.' }); }).catch(function(){ modal.show({ title: 'Copy did not work', steps: ['Use the .doc download instead — it opens in Word and Google Docs (File → Open).'], primary: { label: 'Download .doc', onClick: function(){ exportDOCX(filenameHint||'rgm-export', title, sections); }}, secondary: { label: 'Close', onClick: function(){ modal.close(); }} }); }); } // Minimal modal var _modal = null; function _ensureModal(){ if(_modal) return _modal; var el = document.createElement('div'); el.className = 'dl-modal'; el.innerHTML = '

' + '' + '
'; document.body.appendChild(el); _modal = { show: function(opts){ el.querySelector('[data-mt]').textContent = opts.title || ''; var c = el.querySelector('[data-mc]'); c.innerHTML = ''; if(opts.steps && opts.steps.length){ var ol = document.createElement('ol'); opts.steps.forEach(function(s){ var li = document.createElement('li'); li.textContent = s; ol.appendChild(li); }); c.appendChild(ol); } var note = el.querySelector('[data-mn]'); if(opts.honestNote){ note.textContent = opts.honestNote; note.style.display = 'block'; } else { note.style.display = 'none'; } var b = el.querySelector('[data-mb]'); b.innerHTML = ''; if(opts.primary){ var p = document.createElement('button'); p.className = 'primary'; p.textContent = opts.primary.label; if(opts.primary.href){ p.onclick = function(){ window.open(opts.primary.href, '_blank', 'noopener'); _modal.close(); }; } else if(opts.primary.onClick){ p.onclick = function(){ opts.primary.onClick(); _modal.close(); }; } b.appendChild(p); } if(opts.secondary){ var s2 = document.createElement('button'); s2.className = 'secondary'; s2.textContent = opts.secondary.label; if(opts.secondary.href){ s2.onclick = function(){ window.open(opts.secondary.href, '_blank', 'noopener'); _modal.close(); }; } else if(opts.secondary.onClick){ s2.onclick = function(){ opts.secondary.onClick(); }; } b.appendChild(s2); } var cls = document.createElement('button'); cls.className = 'secondary'; cls.textContent = 'Close'; cls.onclick = function(){ _modal.close(); }; b.appendChild(cls); el.classList.add('open'); }, close: function(){ el.classList.remove('open'); } }; el.addEventListener('click', function(e){ if(e.target === el) _modal.close(); }); return _modal; } return { exportCSV: exportCSV, exportTSV: exportTSV, exportXLSX: exportXLSX, exportDOCX: exportDOCX, openInGoogleSheets: openInGoogleSheets, openInGoogleDocs: openInGoogleDocs, copy: _copyText }; })();