Skip to main content

Email Module

Send personalized emails from a workflow through your own Azure Communication Services (ACS) resource.

Sending through another provider (Microsoft 365, Gmail, SendGrid, Mailgun, Amazon SES or your own mail server), or to a whole list at once? Use the MailKit Module, which builds emails the same way.

The Email Module adds one Task, SendEmail. It sends an email built from one of your Workspace's email templates (Storage → Templates in the portal), from HTML written in the Task, or from plain text. {variable} placeholders are filled with the flow's variables when the email is sent.

What you can build​

  • Appointment confirmations: collect a date in a chat conversation, then send the Appointment confirmation template with {appointmentDate} and {appointmentTime} filled in.
  • Reminders: a Process started by the Scheduler Module sends the Appointment reminder template the day before.
  • Welcome emails: send the Welcome / onboarding template when a lead signs up.
  • Contracts by email: attach a document from workspace storage, such as a contract kept under templates/documents/.

Configuration​

Every Workspace connects its own ACS Email resource, so sender domains, deliverability and costs stay with you. Configure it per Environment in the Module's settings.

ACS connection string​

Required. Azure portal → your Communication Services resource → Settings → Keys → Connection string (endpoint=https://…;accesskey=…).

Sender address​

Required. A MailFrom address of a domain connected to your ACS resource, for example DoNotReply@contoso.com or the Azure-managed DoNotReply@xxxx.azurecomm.net.

Default reply-to​

Optional. Where replies go when a Task doesn't set its own Reply-to.

To set up ACS Email: create an Email Communication Services resource, provision a domain (Azure-managed or your own, verified with DNS records), then connect that domain to your Communication Services resource.

Email templates​

Email templates are HTML files stored in your Workspace's storage under templates/emails/. You manage them in Storage → Templates:

  • Gallery: ready-made starters (appointment confirmation, appointment reminder, welcome, product announcement, promotional offer). Use template copies one into your Workspace, where you can edit it.
  • Editor: HTML source with a live preview (desktop and mobile width), an Insert variable helper and a Test data panel to preview the email with sample values.
  • Subject: the template's <title> is the email subject, and it can contain placeholders (<title>Your appointment on {appointmentDate}</title>).

Write templates the way email clients expect: table-based layout, about 600px wide, inline styles and absolute https:// image URLs. A <style> block is fine: its rules are copied inline when the email is sent, because Gmail and Outlook drop <style>. Scripts and forms are removed by every email client, so don't use them.

SendEmailTask​

PropertyRequiredNotes
ToyesRecipient addresses separated by commas or semicolons. Accepts {variables}.
Cc / BccnoSame format as To. At most 50 recipients in total.
BodyyesEmail template, Inline HTML or Plain text.
Templatewith Email templateFile name of a template in Storage → Templates, for example appointment-confirmation.html (.html is added if missing). Accepts {variables}.
Subjectwith HTML / Plain textOverrides the template's <title>. Accepts {variables}.
HTMLwith Inline HTMLFull HTML body.
Textwith Plain textPlain-text body.
AttachmentsnoFiles, one per line or comma-separated: file fields such as ref-session:{report} or ref-storage:terms.pdf, or workspace storage paths such as templates/documents/terms.pdf. 10 MB in total.
Reply-tonoDefaults to the Module's Default reply-to.
OutputVariablenoReceives the ACS message id.

Values inserted into HTML bodies are HTML-encoded, so text a user typed in a conversation can never inject markup into the email. Each HTML email also gets a plain-text alternative, which improves deliverability.

When sending fails (the Module isn't configured, a template or attachment is missing, an address is invalid, or ACS rejects the message) the Task sets its output to error, so an outgoing flow named error can handle it.