Why the simple trigger doesn't work
The first time I tried this, I dropped a plain function named onEdit into the script editor, called Session.getActiveUser().getEmail(), and got back an empty string every single time. That's not a bug — it's documented behavior. Simple triggers run in a restricted security context that intentionally withholds the caller's identity. Google's reasoning is that simple triggers fire automatically without requesting any OAuth scope, so they can't expose personal data like an email address.
To get the editor's email, the trigger must be an installable on-edit trigger. Installable triggers run under the authorization of the script owner (who granted the scopes), and they receive the editing user's identity through the same Session API. The catch: that identity resolves only when the editor and the script owner share a Google Workspace domain. Personal gmail.com accounts editing a sheet owned by a gmail.com script owner will return a blank email — Google deliberately blocks cross-account identity surfacing outside Workspace.