Gmail

Send Email

Send an email through a connected Gmail or Outlook account.

1 creditRuns in your Gmail account

Endpoint

Parameters

NameTypeRequiredNote
senderstring · requiredstringrequired

Email account to send from. Select a connected Gmail or Outlook account.

Example: example@domain.com

sendAsstring · optionalstringoptional

Send from one of this mailbox's "Send mail as" addresses instead of its own: the address, or "Name <address>". The mailbox must already be allowed to send as it (in Gmail: Settings, Accounts). Leave empty to send as the mailbox itself.

Example: name@yourdomain.com

emailstring · requiredstringrequired

Recipient email address. Supports a {{…}} reference (an earlier step's output, the current Record's Field, or inside a For Each the loop item {{<For Each>.item.<Field>}}).

Example: recipient@example.com

ccstring · optionalstringoptional

CC recipients. Comma-separated for multiple. Supports template variables.

Example: cc@example.com

bccstring · optionalstringoptional

BCC recipients. Comma-separated for multiple. Supports template variables.

Example: bcc@example.com

subjectModestring · requiredstringrequired

Write the subject yourself or let AI generate it.

One of: manual (Write manually), ai_personalized (AI Personalized)

Default: manual

subjectstring · optionalstringoptional

Email subject line. Supports template variables.

Used only when subjectMode is manual.

subjectAiModelstring · optionalstringoptional

AI model used to generate the subject.

Used only when subjectMode is ai_personalized.

One of: the service/claude-opus-4.6 (Claude Opus 4.6), the service/claude-sonnet-4.5 (Claude Sonnet 4.5), the service/claude-haiku-4.5 (Claude Haiku 4.5), openai/gpt-5.2 (GPT-5.2), openai/gpt-5.1 (GPT-5.1), openai/gpt-4o-mini (GPT-4o Mini), moonshotai/kimi-k2.5 (Kimi K2.5), deepseek/deepseek-v3.2 (DeepSeek V3.2), google/gemini-2.5-flash (Gemini 2.5 Flash), google/gemini-2.5-pro (Gemini 2.5 Pro)

Default: the service/claude-opus-4.6

subjectPromptstring · optionalstringoptional

Prompt the AI uses to write the subject. Supports template variables.

Used only when subjectMode is ai_personalized.

messageModestring · requiredstringrequired

Write the body yourself or let AI generate it.

One of: manual (Write manually), ai_personalized (AI Personalized)

Default: manual

messagestring · required if messageMode is manual and messageMode is manualstringrequired if messageMode is manual and messageMode is manual

Email body. HTML allowed (<p> tags); newlines convert to <br> unless plain-text is on. Supports template variables.

messageAiModelstring · optionalstringoptional

AI model used to generate the body.

Used only when messageMode is ai_personalized.

One of: the service/claude-opus-4.6 (Claude Opus 4.6), the service/claude-sonnet-4.5 (Claude Sonnet 4.5), the service/claude-haiku-4.5 (Claude Haiku 4.5), openai/gpt-5.2 (GPT-5.2), openai/gpt-5.1 (GPT-5.1), openai/gpt-4o-mini (GPT-4o Mini), moonshotai/kimi-k2.5 (Kimi K2.5), deepseek/deepseek-v3.2 (DeepSeek V3.2), google/gemini-2.5-flash (Gemini 2.5 Flash), google/gemini-2.5-pro (Gemini 2.5 Pro)

Default: the service/claude-opus-4.6

messagePromptstring · required if messageMode is ai_personalized and messageMode is ai_personalizedstringrequired if messageMode is ai_personalized and messageMode is ai_personalized

Prompt the AI uses to write the body. Supports template variables.

attachmentstring · optionalstringoptional

File attachment. Provide a URL to the file or upload directly. Disabled when plain-text is on.

plainTextboolean · optionalbooleanoptional

When on, the body is sent as plain text (no HTML conversion, no attachments). Improves cold-outreach deliverability.

Default: false

replyInThreadboolean · optionalbooleanoptional

When on, this email is sent as a reply on the thread of a prior send-email node in the same workflow.

Default: false

replyToNodeIdemail-reply-source · optionalemail-reply-sourceoptional

Pick the upstream send-email node whose thread this reply joins.

Used only when replyInThread is true.

signatureIdemail-signature · optionalemail-signatureoptional

Workspace-shared signature appended below the body at send time.

conditionstring · requiredstringrequired

Guard against emailing when the recipient already replied or was already contacted. For a later follow-up after a wait, choose "No reply in this workflow" even when an earlier Filter already checked for a reply: that earlier check cannot see replies received during the later wait.

One of: always (Always send), no_reply_in_this_workflow (No reply in this workflow), lead_has_never_sent_message (No reply to any email), conversation_empty (No prior email contact)

Default: always

Response schema

{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "status",
    "email",
    "subject",
    "sentAt"
  ],
  "properties": {
    "note": {
      "type": "string"
    },
    "email": {
      "type": "string"
    },
    "sender": {
      "type": "string",
      "description": "Sender identifier used (for reply tracking)."
    },
    "sentAt": {
      "type": "string"
    },
    "status": {
      "enum": [
        "sent",
        "queued"
      ],
      "type": "string"
    },
    "message": {
      "type": "string",
      "description": "The resolved email body that was sent (with all template variables substituted)."
    },
    "subject": {
      "type": "string"
    },
    "threadId": {
      "type": [
        "string",
        "null"
      ],
      "description": "Provider thread id this email belongs to, when known at send time. A reply returns the thread it was sent into; a new email returns it only if the inbox had already synced the sent message, otherwise null. Never derived from a message id. Pass it to send-email threadId to reply, or to email-get-thread."
    },
    "messageId": {
      "type": "string"
    },
    "account_id": {
      "type": "string",
      "description": "Account ID used to send (for reply tracking when sender not available)."
    },
    "is_replied": {
      "type": "boolean",
      "default": false,
      "description": "Whether the recipient has replied (updated by the reply tracker; false until a reply is detected)."
    },
    "replied_at": {
      "type": "string",
      "description": "ISO timestamp when a reply was detected (present once replied)."
    },
    "attachments": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "attachmentId",
          "fileName",
          "mimeType",
          "size",
          "sha256"
        ],
        "properties": {
          "size": {
            "type": "number"
          },
          "sha256": {
            "type": "string"
          },
          "tabular": {
            "type": "object",
            "required": [
              "dataRows",
              "columns"
            ],
            "properties": {
              "columns": {
                "type": "number"
              },
              "dataRows": {
                "type": "number"
              }
            },
            "additionalProperties": false
          },
          "fileName": {
            "type": "string"
          },
          "mimeType": {
            "type": "string"
          },
          "attachmentId": {
            "type": "string"
          }
        },
        "additionalProperties": false
      },
      "description": "The chat files attached, as read from storage: size in bytes, SHA-256, and data rows for a CSV/TSV."
    },
    "provider_id": {
      "type": "string",
      "description": "Provider-side message id (Gmail/Outlook native). Used by downstream send-email nodes for reply-in-thread."
    },
    "conversationId": {
      "type": [
        "string",
        "null"
      ],
      "description": "Inbox conversation id of this email, known under the same rule as threadId, otherwise null. Pass it to wait-for-reply or email-get-thread. When null, pass provider_id as their messageId once the sent email has synced."
    },
    "reply_positive": {
      "type": "boolean",
      "description": "Whether the detected reply was classified positive (present once replied)."
    }
  },
  "additionalProperties": false
}

Get started

How to use this action

  1. Connect your AI

    Add Connie to ChatGPT, Claude or Slack once, then connect your account for this app. There’s no API key to manage.

  2. Ask for the outcome

    Describe what you need in plain words. Your AI runs this app’s actions when the job calls for them, along with any other tools it needs.

  3. Make it a workflow

    Add an action as a step in a workflow that runs the same way every time, on a schedule or when something happens.

  4. Stay in control

    Choose whether each action runs on its own or asks first. When it asks, you see an Allow or Deny card before anything changes in the app.