Virginia Tech® home

Email List

If you downloaded the Gradebook at one time, the PIDs are listed in the file. 

If not, you can get the emails from HokieSpa. 

  1. Open HokieSpa
  2. Navigate to Faculty Access (tab)
  3. Click "Summary Class List"
  4. Hit F12 to get to the Developer Tools of the Brower
  5. Paste the following code into the Console (*You might need to type allow pasting first)
    (() => {
      // Grab all mailto links inside the class list
      const anchors = document.querySelectorAll('.datadisplaytable a[href^="mailto:"]');
      const emails = Array.from(anchors)
        .map(a => {
          // Prefer the mailto href, fall back to the visible text
          const fromHref = (a.getAttribute('href') || '')
            .replace(/^mailto:/i, '')
            .split('?')[0];
          const fromText = (a.textContent || '').trim();
          const raw = (fromHref || fromText).trim();
    
          // Clean: remove trailing '#' some entries have, trim spaces
          return decodeURIComponent(raw).replace(/\s*#\s*$/, '').trim();
        })
        .filter(e => e && /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(e));
    
      // De-dupe case-insensitively, preserve order
      const seen = new Set();
      const unique = emails.filter(e => {
        const k = e.toLowerCase();
        if (seen.has(k)) return false;
        seen.add(k);
        return true;
      });
    
      const out = unique.join('; ');
    
      // Try clipboard API; fallback to a prompt for manual copy
      (async () => {
        try {
          await navigator.clipboard.writeText(out);
          console.log(`Copied ${unique.length} email(s) to clipboard.`);
        } catch (err) {
          console.warn('Clipboard API failed, showing a copy prompt instead.', err);
          window.prompt(`Copy ${unique.length} email(s):`, out);
        }
        console.log(out);
      })();
    })();
    

  6. Copy Emails
  7. Paste into BCC of Email

If you have a big class, you might need to in batches of less than 100.