The one setting that breaks everything if you skip it
Open your form, go to Settings, and find the "Collect email addresses" toggle under the Responses tab. It needs to be set to either "Verified" (Google-authenticated respondents only) or "Responder input" (they type it in). Without this, `e.response.getRespondentEmail()` returns an empty string every single time, and your script silently does nothing. The first time I hit this I spent twenty minutes staring at the trigger logs before I thought to check the form itself.
Once that setting is on, the email address is captured server-side at submission and attached to the FormResponse object. The script reads it off that object rather than trying to parse an answer from a specific question, so it works regardless of where the email field sits in your form layout.