The Email action is for sending email. ✅ It supports the store's email templates, and supports attachments constructed by file generators.


Mechanic sends email via Postmark, our email provider. Currently, Mechanic only supports Postmark's transactional message stream, which means that marketing and other bulk mail may not be sent. To learn more about what is and isn't a transactional message, see Postmark's article: "What are Transactional emails?".





Required; an array or comma-delimited string of recipient addresses


Required; a string specifying the message subject


Required; an HTML string of body content; supports HTML and CSS


Optional; an array or comma-delimited string of cc addresses


Optional; an array or comma-delimited string of bcc addresses


Optional; a single reply-to address


Optional; a string controlling the name (but not the address) of the sender


Optional; a string naming an email template from the current Mechanic account


Optional; an object specifying files to attach, using file generators


Additional options may be provided, and will be made available to email templates as variables, named after each option

Message formatting


Mechanic parses each email body for HTML and CSS, allowing authors to use <style> tags without having to think about email client compatibility.

If you're simply trying to add formatted text and aren't ready to dig into the code yourself, try using a tool like to quickly generate usable HTML.

Embedded images

Images may be embedded using the <img> tag, but must be hosted independently. Shopify provides basic file hosting, appropriate for uploading images for use with Mechanic emails. To learn more, see Uploading files to your website.

Changing the sender address

This action only supports sending from a single address (regardless of the sender name, as controlled by the from_display_name option).

By default, the sender address is a Mechanic address based on the store's subdomain. For example, the store will default to having its mail sent from

Changing the sender address involves adding it to the store's Mechanic account, and then configuring the email domain name with some DNS records for verification.

For more on this, see Custom email domain.


To achieve easily reusable headers and footers, Mechanic can be configured with one or more email templates, available in the Mechanic account settings. To learn more about configuring email templates, see Email templates.

To use a specific email template with the Email action, use the template option to specify the name of the desired email template.

Creating email template variables

All options used with the Email action will be made available as Liquid variables for the email template. This means that standard options may be used, like {{ subject }} and {{ body }}, and also custom options: passing in an "order_data" option, containing order data, may allow the email template to show the order name via {{ }}.

Note that custom options, like all task options, must be provided using standard JSON. This means that the data made available to email templates will be derived from plain JSON values.

For example, consider this action:

{% action "email" %}
    "to": "",
    "subject": "Thanks for your order!",
    "template": "order_acknowledgement",
    "order_data": {{ order | json }}
{% endaction %}

The template named "order_acknowledgement" could include the following Liquid, and get the expected results:

This is the first item: {{ order_data.line_items.first.title }}

But, because order_data is a plain hash based entirely on JSON data, instead of being an enhanced order object (see Environment variables), the following Liquid usage would fail:

Remember order {{ order_data.customer.orders.any.first.number }}, your first ever?


This action supports attachments given in Mechanic's file generator format. This structure allows the sender to construct a variety of files, including ad-hoc text-based files, PDFs rendered from HTML, files dynamically downloaded from external locations, and ZIP files containing any other files.

For more on this, see File generators.



{% action "email" %}
    "to": "",
    "subject": "Hello world",
    "body": "It's a mighty fine day!",
    "reply_to": {{ shop.customer_email | json }},
    "from_display_name": {{ | json }}
{% endaction %}

Using HTML

{% capture email_body %}

  It's fantastic to see you!
{% endcapture %}

{% action "email" %}
    "to": "",
    "subject": "Hello world",
    "body": {{ email_body | unindent | strip | newline_to_br | json }}
{% endaction %}

Using attachments

{% action "email" %}
    "to": "",
    "subject": "An image test",
    "body": "Please see attached. :)",
    "attachments": {
      "a_configured_image_from_the_web.png": {
        "url": ""
{% endaction %}

Last updated