Gmail - Send Draft
Send existing draft emails from Gmail, optionally overriding recipients at send time. The draft will be sent and automatically removed from your Drafts folder.
Overview
The Gmail Send Draft tool sends a previously created draft email. This completes the draft workflow, allowing you to review and approve emails before sending. When you send a draft, Gmail automatically removes it from the Drafts folder.
Key Features:
- Send any existing draft by draft_id
- Optionally override recipients at send time
- Replace draft's to/cc/bcc with new addresses
- Draft automatically deleted after sending
- Returns sent message details with final recipients
Common Use Cases:
- AI-assisted email approval workflow
- Review draft content then send
- Redirect draft to different recipients
- Send draft to test email first
- Forward draft content to new recipients
- Batch send multiple pre-composed drafts
- Complete draft → review → send workflow
Prerequisites
OAuth Authentication Required: This tool only works with OAuth authentication. App Password accounts will return an error.
Setup OAuth
Follow our Google Account OAuth Setup Guide to:
- Create a Google Cloud project
- Enable Gmail API
- Create OAuth credentials
- Connect your account to Reeva
App Password authentication is not supported for Send Draft.
Using the Tool
1. Create a Send Draft Tool Instance
- Navigate to My Tools in Reeva
- Click Create New Tool
- Select Gmail - Send Draft from the base tools
- Give your tool a name (e.g., "Send Gmail Draft")
- Select your OAuth Gmail account (not App Password)
- Click Create
2. Send a Draft (Standard)
Send an existing draft with its original recipients:
{
"draft_id": "r-1234567890123456789"
}
That's it! The draft will be sent immediately to the recipients saved in the draft.
3. Send with Overridden Recipients
Override the draft's recipients at send time:
Send to different 'to' recipients:
{
"draft_id": "r-1234567890123456789",
"to": ["new-recipient@example.com"]
}
This sends ONLY to new-recipient@example.com, ignoring the draft's original recipients.
Send with new 'to' and 'cc':
{
"draft_id": "r-1234567890123456789",
"to": ["recipient@example.com"],
"cc": ["manager@example.com", "team@example.com"]
}
Send to BCC only (hidden recipients):
{
"draft_id": "r-1234567890123456789",
"bcc": ["hidden-recipient@example.com"]
}
Getting the draft_id
You can get the draft_id from:
- Create Draft tool response
- List Drafts tool response
Tool Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
draft_id | string | Yes | Gmail draft ID to send |
to | array | No | Override 'to' recipients (clears draft's to) |
cc | array | No | Override 'cc' recipients (clears draft's cc) |
bcc | array | No | Override 'bcc' recipients (clears draft's bcc) |
Parameter Details
draft_id (required):
- Gmail draft ID from Create Draft or List Drafts
- Format:
r-XXXXXXXXXXXXXXXXX(typically 19 digits prefixed withr-) - Example:
"r-1234567890123456789"
to (optional):
- Array of email addresses
- If provided, completely replaces the draft's
torecipients - If any recipient field is provided but
tois omitted,tois cleared - Example:
["user@example.com", "another@example.com"]
cc (optional):
- Array of CC (carbon copy) recipients
- If provided, completely replaces the draft's
ccrecipients - If any recipient field is provided but
ccis omitted,ccis cleared - Example:
["manager@company.com"]
bcc (optional):
- Array of BCC (blind carbon copy) recipients
- If provided, completely replaces the draft's
bccrecipients - If any recipient field is provided but
bccis omitted,bccis cleared - Example:
["archive@company.com"]
Recipient Override Behavior
When you provide any recipient field (to, cc, or bcc), the tool enters override mode:
Override Mode Rules
- Provided fields replace the draft's original values entirely
- Non-provided fields are cleared (not inherited from the draft)
- At least one recipient must exist after overrides
Examples
| You Provide | Draft Had | Email Sent To |
|---|---|---|
| Nothing | to: alice, cc: bob | to: alice, cc: bob |
to: ["dave"] | to: alice, cc: bob | to: dave only |
to: ["dave"], cc: ["eve"] | to: alice, cc: bob | to: dave, cc: eve |
cc: ["eve"] | to: alice, cc: bob | cc: eve only |
bcc: ["frank"] | to: alice, cc: bob | bcc: frank only |
Important Notes
- If you provide
to: [](empty array),tois cleared - Providing any recipient field clears ALL non-provided recipient fields
- This allows precise control over who receives the email
- At least one recipient must exist across all fields
Response Format
Successful Send (Standard)
When no recipients are overridden:
{
"success": true,
"message_id": "18d5f2a3b4c5d6e7",
"thread_id": "18d5f2a3b4c5d6e7",
"label_ids": ["SENT"],
"message": "Draft r-1234567890123456789 sent successfully",
"note": "Draft has been sent and automatically deleted from Drafts folder",
"recipients_overridden": false
}
Successful Send with Recipient Override
When recipients are overridden:
{
"success": true,
"message_id": "18d5f2a3b4c5d6e7",
"thread_id": "18d5f2a3b4c5d6e7",
"label_ids": ["SENT"],
"message": "Draft r-1234567890123456789 sent successfully with overridden recipients",
"note": "Draft has been sent and automatically deleted from Drafts folder",
"recipients_overridden": true,
"final_recipients": {
"to": ["new-recipient@example.com"],
"cc": ["manager@example.com"],
"bcc": []
}
}
Response Fields
- success: Whether the email was sent successfully
- message_id: Gmail message ID of the sent email
- thread_id: Gmail thread ID (for conversation tracking)
- label_ids: Labels applied (typically includes "SENT")
- message: Confirmation message
- note: Reminder that draft was deleted
- recipients_overridden:
truewhen recipient override was used - final_recipients: Object showing exactly who received the email (only when overridden)
- to: Array of
torecipients used - cc: Array of
ccrecipients used - bcc: Array of
bccrecipients used
- to: Array of
Important Behavior
Draft Deletion
When you send a draft:
- The email is sent immediately
- The draft is automatically deleted from your Drafts folder
- This is Gmail's default behavior and cannot be changed
- The draft_id becomes invalid after sending
No Undo
Once sent:
- The email cannot be unsent (unless Gmail's Undo Send is enabled in your account settings)
- The draft cannot be recovered
- Always verify draft content before sending
OAuth vs App Password
| Feature | OAuth | App Password |
|---|---|---|
| Send drafts | ✅ | ❌ Not supported |
| Reason | Gmail API supports draft sending | IMAP cannot send drafts |
Why OAuth only? IMAP (used by App Password) cannot send draft emails directly. It would require reading the draft, sending via SMTP, and deleting the draft - a complex workaround that's error-prone.
Use Cases
1. AI Email Approval Workflow
Workflow:
1. AI generates draft response with Create Draft
2. Human reviews draft in Gmail or via List Drafts
3. Human approves content
4. Send Draft sends the email
2. Batch Review and Send
Workflow:
1. AI creates multiple drafts throughout the day
2. End of day: Human reviews all drafts with List Drafts
3. Human sends approved drafts one by one with Send Draft
4. Rejected drafts are updated or deleted
3. Update Before Send
Workflow:
1. Create initial draft with Create Draft
2. Review and refine with Update Draft
3. Final review
4. Send with Send Draft
4. Send Multiple Drafts
Send multiple drafts sequentially:
// First draft
{ "draft_id": "r-1111111111111111111" }
// Second draft
{ "draft_id": "r-2222222222222222222" }
// Third draft
{ "draft_id": "r-3333333333333333333" }
5. Redirect Draft to Test Email
Test an email before sending to real recipients:
{
"draft_id": "r-1234567890123456789",
"to": ["test@yourcompany.com"]
}
6. Send Draft to Different Team
Repurpose a draft for a different audience:
{
"draft_id": "r-1234567890123456789",
"to": ["engineering-team@company.com"],
"cc": ["engineering-manager@company.com"]
}
7. Send with Hidden Recipients Only
Send confidentially to multiple people:
{
"draft_id": "r-1234567890123456789",
"bcc": ["person1@example.com", "person2@example.com", "person3@example.com"]
}
Error Handling
Draft Not Found
{
"error": "Draft with ID 'r-1234567890123456789' not found. It may have been deleted or already sent."
}
Causes:
- Draft was already sent
- Draft was deleted manually
- Invalid draft_id
- Draft_id from a different account
Solution:
- Verify draft exists with List Drafts
- Check if email is in Sent folder (already sent)
- Use correct draft_id
Invalid Draft ID
{
"error": "Draft ID is required"
}
Cause: Empty or missing draft_id
Solution: Provide a valid draft_id from Create Draft or List Drafts
No Recipients After Override
{
"error": "At least one recipient is required. Provide 'to', 'cc', or 'bcc' with at least one email address."
}
Cause: Provided recipient fields but they're all empty
Solution:
- Provide at least one email address in
to,cc, orbcc - Or don't provide any recipient fields to use draft's original recipients
Invalid Email Address
{
"error": "Invalid 'to' email address: not-an-email"
}
Cause: Malformed email address in to, cc, or bcc
Solution: Check email format (must be user@domain.com)
App Password Authentication
{
"error": "Send Draft requires OAuth authentication. App Password is not supported for this operation."
}
Solution: Set up OAuth authentication: OAuth Setup Guide
Gmail API Error
{
"error": "Gmail API error sending draft: [error details]"
}
Causes:
- OAuth token expired (should auto-refresh)
- Gmail API quota exceeded
- Account permissions issue
Solution:
- Reconnect Gmail account in Reeva
- Wait and retry if quota issue
- Check Gmail API is enabled in Google Cloud Console
Tips
-
Verify Before Sending: Use List Drafts with
format: "full"to review draft content before sending -
Save the draft_id: When creating drafts, save the draft_id for later use
-
Check Sent Folder: After sending, verify the email appears in your Sent folder
-
No Going Back: Once sent, the draft is gone - double-check before sending
-
Track Thread IDs: Save the returned
thread_idto track conversation replies -
Use Read Email: After sending, use Read Email tool with
message_idto verify what was sent -
Override clears other fields: If you provide
tobut notcc, the draft'sccis cleared. Provide all fields you want to keep. -
Test with override: Use
to: ["your-test-email@example.com"]to test a draft before sending to real recipients. -
Check final_recipients: When overriding, verify
final_recipientsin the response matches your intent.
Limitations
-
OAuth Only: App Password authentication is not supported
-
No Undo: Draft is permanently deleted after sending
-
Immediate Send: Email is sent immediately, no scheduling option
-
One at a Time: Each call sends one draft - batch operations require multiple calls
-
Cannot Resend: Once sent, you cannot send the same draft_id again
-
Recipient override is all-or-nothing: You can't selectively keep some of the draft's recipients. If you provide any recipient field, you must provide all recipients you want.
Troubleshooting
Email Not Appearing in Sent
Cause: Sync delay
Solution:
- Refresh Gmail
- Check a few seconds later
- Verify
success: truein response
Draft Still in Drafts Folder
Cause: Send may have failed silently
Solution:
- Check response for errors
- Try sending again
- Verify draft_id is correct
Recipient Didn't Receive
Cause: Various (spam, typo, delay)
Solution:
- Check Sent folder to verify it was sent
- Verify recipient email was correct (use List Drafts before sending)
- Check spam folder of recipient
- Allow time for delivery
"Already Sent" Error
Cause: Attempting to send same draft twice
Solution:
- Each draft can only be sent once
- Draft_id is invalid after sending
- Create a new draft if you need to resend
Override Not Working
Cause: Misunderstanding override behavior
Solution:
- Remember: providing ANY recipient field clears ALL non-provided fields
- Check
final_recipientsin the response to see what was actually used - If you want to keep the draft's
cc, you must include it in your request
Complete Workflow Example
Here's a complete workflow using all draft tools:
Step 1: Create Draft
Request: { "to": ["team@example.com"], "subject": "Weekly Update", "body": "..." }
Response: { "draft_id": "r-1234567890123456789", ... }
Step 2: Review with List Drafts
Request: { "format": "full", "subject_filter": "Weekly Update" }
Response: { "drafts": [{ "draft_id": "r-1234567890123456789", "body_plain": "...", ... }] }
Step 3: Update if Needed (Optional)
Request: { "draft_id": "r-1234567890123456789", "to": [...], "subject": "...", "body": "Updated content" }
Response: { "success": true, ... }
Step 4: Send Draft (with optional recipient override)
Request: { "draft_id": "r-1234567890123456789", "to": ["new-team@example.com"] }
Response: { "success": true, "message_id": "18d5f2a3b4c5d6e7", "recipients_overridden": true, "final_recipients": { "to": ["new-team@example.com"], "cc": [], "bcc": [] }, ... }
Step 5: Verify (Optional)
Use Read Email with message_id to confirm what was sent
Related Tools
- Gmail - Create Draft - Create new draft emails
- Gmail - Update Draft - Modify existing drafts
- Gmail - List Drafts - Browse and filter drafts
- Gmail - Delete Draft - Permanently delete drafts
- Gmail - Send Email - Send emails immediately (no draft)
- Gmail - Simple Search - Search inbox
- Gmail - Read Email - Read email content
- Gmail - Summarize Thread - AI summary of email threads
Support
Need help? Reach out to our support team or join our Discord community.