How it works
Apps Script reads the active sheet via SpreadsheetApp.getActiveSheet() and pulls every row in one call to getValues() — far cheaper than reading row by row.
For each non-empty row that hasn't already been marked "sent", GmailApp.sendEmail dispatches the message. The function is a normal Gmail send, so it counts against your daily quota (1,500/day for Workspace, 100/day for free Gmail).
After every successful send, the script writes "sent" back to column C. That makes the function safely idempotent: re-running it picks up where it left off, instead of double-sending.