# Send scheduled emails from Gmail or any mailbox

Send recurring and one-time emails from your own mailbox: Gmail, Google Workspace, iCloud, Fastmail, Outlook, Zoho, or any SMTP server. Recipients see your real address, and the message can be filled in from any API first.

## Example: a weekly report email

Every Monday at 08:00, fetch last week's numbers and email them:

```json
{
  "name": "Weekly numbers",
  "cron": { "expression": "0 8 * * MON", "time_zone": "America/Chicago" },
  "nodes": [
    { "id": "report", "request": { "method": "GET", "endpoint": "https://analytics.example.com/api/reports/last-week", "credential_id": "YOUR_ANALYTICS_TOKEN_ID" } },
    { "id": "email", "smtp_send_email": {
        "credential_id": "YOUR_GMAIL_CREDENTIAL_ID",
        "to": "team@acme.com",
        "subject": "Week of {{ format(now:America/Chicago - days(7), \"MMM DD\") }}: {{ $.signups }} signups",
        "text": "Signups: {{ $.signups }}\nRevenue: ${{ $.revenue }}\nChurned: {{ $.churned }}\n\nFull report: https://analytics.example.com/weekly" } }
  ]
}
```

## Example: a one-time reminder email

```json
{
  "name": "Renew the lease",
  "run_at": "2027-03-01T09:00:00-08:00",
  "nodes": [
    { "id": "email", "smtp_send_email": {
        "credential_id": "YOUR_GMAIL_CREDENTIAL_ID",
        "to": "me@example.com",
        "subject": "Lease renewal due this month",
        "text": "The office lease renews on March 31. Call the landlord this week." } }
  ]
}
```

## Set up

Add an **SMTP** credential in **Settings → Credentials**. Templates fill in the server for common providers:

| Provider | Host | Port and security | Password |
| --- | --- | --- | --- |
| Gmail and Google Workspace | `smtp.gmail.com` | 465 TLS | An [app password](https://support.google.com/accounts/answer/185833) |
| iCloud | `smtp.mail.me.com` | 587 STARTTLS | An [app-specific password](https://support.apple.com/en-us/102654) |
| Fastmail | `smtp.fastmail.com` | 465 TLS | An app password |
| Yahoo | `smtp.mail.yahoo.com` | 465 TLS | An app password |
| Zoho | `smtp.zoho.com` | 465 TLS | Your password or an app password |

cronservices always uses TLS and refuses a server that doesn't offer it. Messages are plain text. For sending from a domain at volume, use [Resend](/integrations/resend) or [SendGrid](/integrations/sendgrid).

## Reference

### Send an email from your mailbox: `smtp_send_email`

**Sends** A plain-text email through your own SMTP server, over TLS or STARTTLS. **Output** for the next step: `{"to": …, "subject": …}` as sent, once the mail server accepts the message.

| Field | Type | Notes |
| --- | --- | --- |
| `credential_id` | string, required | The id of a `smtp` credential holding your mail server, username, password and from address. |
| `to` | string, required | One recipient address. Placeholders allowed. |
| `subject` | string, required | One line, up to 998 characters. Placeholders allowed. |
| `text` | string, required | Plain text, up to 40,000 characters. Placeholders allowed. |

## More ideas

- Your [Stripe balance](/integrations/stripe) every morning.
- A monthly invoice reminder to a client on the 1st: `0 9 1 * *`.
- A birthday email at 08:00 in the recipient's time zone, as a one-time job.
