mirror of
https://github.com/Significant-Gravitas/AutoGPT.git
synced 2026-04-30 03:00:41 -04:00
### Why / What / How **Why:** When a user or LLM supplies a malformed recipient string (e.g. a bare username, a JSON blob, or an empty value) to `GmailSendBlock`, `GmailCreateDraftBlock`, or any reply block, the Gmail API returns an opaque `HttpError 400: "Invalid To header"`. This surfaces as a `BlockUnknownError` with no actionable guidance, making it impossible for the LLM to self-correct. (Fixes #11954) **What:** Adds a lightweight `validate_email_recipients()` function that checks every recipient against a simplified RFC 5322 pattern (`local@domain.tld`) and raises a clear `ValueError` listing all invalid entries before any API call is made. **How:** The validation is called in two shared code paths — `create_mime_message()` (used by send and draft blocks) and `_build_reply_message()` (used by reply blocks) — so all Gmail blocks that compose outgoing email benefit from it with zero per-block changes. The regex is intentionally permissive (any `x@y.z` passes) to avoid false positives on unusual but valid addresses. ### Changes 🏗️ - Added `validate_email_recipients()` helper in `gmail.py` with a compiled regex - Hooked validation into `create_mime_message()` for `to`, `cc`, and `bcc` fields - Hooked validation into `_build_reply_message()` for reply/draft-reply blocks - Added `TestValidateEmailRecipients` test class covering valid, invalid, mixed, empty, JSON-string, and field-name scenarios ### Checklist 📋 #### For code changes: - [x] I have clearly listed my changes in the PR description - [x] I have made a test plan - [x] I have tested my changes according to the test plan: - [x] Verified `validate_email_recipients` correctly accepts valid emails (`user@example.com`, `a@b.com`, `test@sub.domain.co`) - [x] Verified it rejects malformed entries (bare names, missing domain dot, empty strings, JSON strings) - [x] Verified error messages include the field name and all invalid entries - [x] Verified empty recipient lists pass without error - [x] Confirmed `gmail.py` and test file parse correctly (AST check) --------- Co-authored-by: Zamil Majdy <zamil.majdy@agpt.co>