The core Send Email action is for a subject and body you build in the flow. An Email Alert is for a Classic email template with merge fields, and it is the route to take when marketing owns the wording. Before you debug anything else, check Setup, Deliverability, because a sandbox defaults to System email only and will silently send nothing.
Send Email: the core action
Add an Action element and search for Send Email. The inputs that matter:
- Subject and Body, both text. The body accepts a text template, which is how you get formatting and merge values.
- Rich-Text-Formatted Body, a boolean. Leave it off and your HTML arrives as literal tags.
- Recipient Address List or a Text collection of addresses.
- Recipient ID, the Id of a Contact, Lead or User. Using this rather than a raw address is what lets Salesforce log the email against the record.
- Sender Type, one of the current user, the default workflow user, or an org-wide email address.
- Log Email on Send and Related Record ID, which together put the email in the record’s activity timeline.
Email Alerts, and when they win
An Email Alert is defined in Setup, tied to an object, and points at an email template. From a flow you call it as an Action, passing the record Id. The template does the merge fields.
Choose this when the content is owned by someone who is not going to open Flow Builder, when you need the same wording from several automations, or when you want translated templates. Choose the core Send Email action when the content is assembled from flow variables that do not exist as fields on a record.
Alerts have their own constraints. The recipient list is configured on the alert, not passed in, so a dynamic recipient means either a field on the record holding the address or the core action instead. The from address must be the current user or a verified org-wide address. And automated emails draw on a separate daily org allocation from the single-email limit that Apex uses, which is worth knowing before you schedule a flow that emails every account owner.
Deliverability is where most of the time goes
Setup, Email Administration, Deliverability has an Access Level with three settings: No access, System email only, and All email. Sandboxes are created with System email only, which blocks the email your flow sends while reporting success. Every “my flow does not send email” ticket should start here.
Do not send from a personal address in an automated flow. If the sender is the current user, every recipient sees whoever happened to trigger the record change, replies go to that person, and the person changes when someone leaves.
Org-wide addresses
Create one in Setup, Organization-Wide Addresses, verify it from the confirmation email, and restrict it to the profiles that should be able to use it. Then set Sender Type to org-wide address in the flow and pick it.
Getting the structure right
Do not put Send Email inside a Loop. Each iteration is an action call, each burns executed elements, and a hundred-record data load turns into a hundred separate sends. Build a Text collection of addresses and call the action once, or use an Email Alert on a record-triggered flow that the platform bulkifies for you.
Before-save record-triggered flows cannot call actions at all, so email always means an after-save or autolaunched flow. For anything that is not urgent, put the send on an asynchronous or scheduled path so the user is not waiting on it and so a mail failure does not roll back their save.
Frequently asked
Can the core Send Email action use an email template? Treat this as the dividing line between the two approaches. For a Classic template with merge fields, use an Email Alert. The core action is built around a subject and body you supply.
Why is the email not on the record’s activity timeline? You need both Log Email on Send and a Related Record ID, and for logging against a person, a Recipient ID rather than a plain address.
How do I attach a file? The core action does not take attachments. An Email Alert can use a template with attachments, and anything beyond that means invocable Apex using Messaging.SingleEmailMessage.
