> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.ovalbee.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.ovalbee.com/_mcp/server.

# Send email

> Send an email notification via SMTP from within a flow.

## Overview

Sends an email from a flow using an email secret with SMTP settings. The node requires a pre-configured email secret.

Use it at the end of a flow when a report, model comparison, or other automated step should notify someone.

```mermaid
flowchart LR
  n1["Compare object detectors"] --> n2["Send Email"]
```

## Prerequisites

| Requirement      | What you need                                                                                 |
| ---------------- | --------------------------------------------------------------------------------------------- |
| **Email secret** | An existing `email` secret in the workspace, holding the SMTP host, port, and sender address. |
| **SMTP access**  | Network access from the worker to that SMTP server.                                           |

## How it works

Reads the SMTP host, port, and sender address from the selected email secret.

Builds a plain-text message from **To**, **Subject**, **Body**, and the optional **CC**.

Connects over SSL or STARTTLS, signs in when the secret holds a password, and sends the message.

## FAQ

#### What must the email secret contain?

Host, port, and sender address are required. Sender name, username, password, and connection mode are optional. The run fails when a required field is missing or the secret is not of type `email`.

#### How is the connection secured?

The secret's connection mode decides it: SSL, STARTTLS, or none. Without that field, a secret marked secure uses SSL and everything else uses STARTTLS.

#### Is a password required?

No. Without one the node skips the sign-in and sends unauthenticated, which suits an internal relay. When a password is set and no username is given, the sender address is used.

#### Can the body contain HTML?

No. The body is sent as plain text.

#### Why did sending fail?

The secret may be incomplete, the SMTP server may reject the sign-in or the sender, or the connection may not open within 30 seconds. Check the run logs for the reported SMTP error.

## Inputs

**`Email secret`** `secret` — required

Your SMTP server address, sender address and sign-in details, stored as a secret. Allowed credential types: `email`. Key: `EMAIL_SECRET`.

---

**`To`** `string` — required

Address the email is sent to. Key: `TO_EMAIL`.

---

**`CC`** `string`

Address that receives a copy. Leave empty to write to the recipient only. Key: `TO_EMAIL_CC`.

---

**`Subject`** `string` — required

Subject line the recipient sees in their inbox. Key: `SUBJECT`.

---

**`Body`** `text` — required

Message text. Sent as plain text, so HTML and formatting are not rendered. Key: `BODY`.

---

## Outputs

**`Status`** `string`

Delivery status message. Key: `STATUS`.

---

## JSON config

Machine-readable node interface for automation and advanced usage.

#### Show JSON

```json
{
  "name": "Send email",
  "description": "Send an email notification via SMTP from within a flow.",
  "category": "Notifications",
  "namespace": null,
  "templateKey": "notifications/send_email",
  "version": "v1",
  "inputs": [
    {
      "key": "EMAIL_SECRET",
      "label": "Email secret",
      "type": "secret",
      "description": "Your SMTP server address, sender address and sign-in details, stored as a secret.",
      "required": true,
      "default": null,
      "visibleWhen": null,
      "options": {
        "types": [
          "email"
        ]
      }
    },
    {
      "key": "TO_EMAIL",
      "label": "To",
      "type": "string",
      "description": "Address the email is sent to.",
      "required": true,
      "default": null,
      "visibleWhen": null
    },
    {
      "key": "TO_EMAIL_CC",
      "label": "CC",
      "type": "string",
      "description": "Address that receives a copy. Leave empty to write to the recipient only.",
      "required": false,
      "default": null,
      "visibleWhen": null
    },
    {
      "key": "SUBJECT",
      "label": "Subject",
      "type": "string",
      "description": "Subject line the recipient sees in their inbox.",
      "required": true,
      "default": null,
      "visibleWhen": null
    },
    {
      "key": "BODY",
      "label": "Body",
      "type": "text",
      "description": "Message text. Sent as plain text, so HTML and formatting are not rendered.",
      "required": true,
      "default": null,
      "visibleWhen": null
    }
  ],
  "outputs": [
    {
      "key": "STATUS",
      "label": "Status",
      "type": "string",
      "description": "Delivery status message.",
      "artifact": false,
      "badge": false,
      "badgeOpens": null,
      "hidden": false
    }
  ]
}
```