Skip to main content

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:

  1. Create a Google Cloud project
  2. Enable Gmail API
  3. Create OAuth credentials
  4. Connect your account to Reeva

App Password authentication is not supported for Send Draft.

Using the Tool

1. Create a Send Draft Tool Instance

  1. Navigate to My Tools in Reeva
  2. Click Create New Tool
  3. Select Gmail - Send Draft from the base tools
  4. Give your tool a name (e.g., "Send Gmail Draft")
  5. Select your OAuth Gmail account (not App Password)
  6. 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

ParameterTypeRequiredDescription
draft_idstringYesGmail draft ID to send
toarrayNoOverride 'to' recipients (clears draft's to)
ccarrayNoOverride 'cc' recipients (clears draft's cc)
bccarrayNoOverride '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 with r-)
  • Example: "r-1234567890123456789"

to (optional):

  • Array of email addresses
  • If provided, completely replaces the draft's to recipients
  • If any recipient field is provided but to is omitted, to is cleared
  • Example: ["user@example.com", "another@example.com"]

cc (optional):

  • Array of CC (carbon copy) recipients
  • If provided, completely replaces the draft's cc recipients
  • If any recipient field is provided but cc is omitted, cc is cleared
  • Example: ["manager@company.com"]

bcc (optional):

  • Array of BCC (blind carbon copy) recipients
  • If provided, completely replaces the draft's bcc recipients
  • If any recipient field is provided but bcc is omitted, bcc is 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

  1. Provided fields replace the draft's original values entirely
  2. Non-provided fields are cleared (not inherited from the draft)
  3. At least one recipient must exist after overrides

Examples

You ProvideDraft HadEmail Sent To
Nothingto: alice, cc: bobto: alice, cc: bob
to: ["dave"]to: alice, cc: bobto: dave only
to: ["dave"], cc: ["eve"]to: alice, cc: bobto: dave, cc: eve
cc: ["eve"]to: alice, cc: bobcc: eve only
bcc: ["frank"]to: alice, cc: bobbcc: frank only

Important Notes

  • If you provide to: [] (empty array), to is 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: true when recipient override was used
  • final_recipients: Object showing exactly who received the email (only when overridden)
    • to: Array of to recipients used
    • cc: Array of cc recipients used
    • bcc: Array of bcc recipients used

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

FeatureOAuthApp Password
Send drafts❌ Not supported
ReasonGmail API supports draft sendingIMAP 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, or bcc
  • 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

  1. Verify Before Sending: Use List Drafts with format: "full" to review draft content before sending

  2. Save the draft_id: When creating drafts, save the draft_id for later use

  3. Check Sent Folder: After sending, verify the email appears in your Sent folder

  4. No Going Back: Once sent, the draft is gone - double-check before sending

  5. Track Thread IDs: Save the returned thread_id to track conversation replies

  6. Use Read Email: After sending, use Read Email tool with message_id to verify what was sent

  7. Override clears other fields: If you provide to but not cc, the draft's cc is cleared. Provide all fields you want to keep.

  8. Test with override: Use to: ["your-test-email@example.com"] to test a draft before sending to real recipients.

  9. Check final_recipients: When overriding, verify final_recipients in the response matches your intent.

Limitations

  1. OAuth Only: App Password authentication is not supported

  2. No Undo: Draft is permanently deleted after sending

  3. Immediate Send: Email is sent immediately, no scheduling option

  4. One at a Time: Each call sends one draft - batch operations require multiple calls

  5. Cannot Resend: Once sent, you cannot send the same draft_id again

  6. 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: true in 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_recipients in 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

Support

Need help? Reach out to our support team or join our Discord community.