Sherman Web Design Docs: switch app
Open the studio

Sending email from a flow (send_email and SMTP)

Your site's forms can send mail, for example to the office when someone fills in the contact form. Mail goes out through your own mail account over SMTP, so it comes from your own address and domain.

1. Connect your mail account

Ask the assistant (“set up email for my site from office@grace.org”) or, as an admin, use set_smtp_setting:

{ "name": "office", "host": "smtp.gmail.com", "port": 587, "username": "office@grace.org",
  "from_addresses": ["office@grace.org", "events@grace.org"], "from_name": "Grace Church" }
  • Port 587 (STARTTLS) or 465 (TLS). Port 25 isn't allowed.
  • An owner then stores the password in the setting's secret (the studio's password field, or request_secret SMTP_OFFICE_PASSWORD). It is never shown again.
  • Google Workspace / Gmail: use an app password. Microsoft 365: SMTP AUTH must be enabled for the mailbox (Microsoft is turning it off by default for existing tenants from the end of December 2026). Zoho: an app-specific password, smtp.zoho.com (or smtppro.zoho.com for paid organization accounts).
  • test_smtp_setting signs in without sending; add send_to with your own address for a test message.

2. Add the step

{ "name": "contact", "steps": [
  { "type": "store_submission" },
  { "id": "mail", "type": "send_email", "to": "office@grace.org", "reply_to": "{{input.email}}",
    "subject": "New message from {{input.name}}",
    "text": "{{input.message}}\n\nFrom: {{input.name}} <{{input.email}}>" },
  { "type": "respond", "redirect": "/thanks" } ] }
FieldMeaning
to, cc, bccAn address or a list; up to 10 each, 20 in total.
fromOne of the setting's From addresses (default: the first).
reply_toUsually the visitor's address, so you can just hit Reply.
subjectRequired, up to 200 characters.
text, htmlAt least one. Visitor input placed in html is escaped.
smtpWhich mail setting to use (default: the site's default).

Limits and log

10 messages a minute, and 200 messages / 500 recipients a day per site. After 3 refused sign-ins in a row sending pauses for 15 minutes. Every attempt (without the message body) is listed for 90 days in list_sent_email. Errors say plainly what went wrong: wrong or non-app password, port blocked, From address not allowed, recipient refused.

Deliverability

For domains bought through the studio, get_mail_dns shows your mail records and set_mail_dns sets them up for Google Workspace, Zoho or Microsoft 365: MX, SPF, DKIM and a DMARC policy (p=none). For domains managed elsewhere, set these at your DNS provider as your mail host describes.

Price

No extra charge: sending is part of the flow run (3.01 credits per 1,000 flow calls).

Updated October 23, 2026