How to Send Custom Emails for Specific Products in Shopify (Without Paid Apps)

You have a pre-order product, a digital download, or a product that needs special post-purchase instructions. You want the customer to get a different order confirmation email than the standard one, something that acknowledges what they actually bought.

If you are selling digital products specifically, it is worth reading the full breakdown of how Shopify handles digital product delivery first — the email template is one piece of the picture, but delivery and file access are handled separately.

Similarly, if you are running a pre-order with a closing date, the guide on timed product drops and pre-orders covers how to set that up so the right customers receive your pre-order confirmation email.

Shopify sends one order confirmation email to every customer by default. You can customise it using Liquid conditionals to change the subject line or body content based on what is in the order. No paid app is required for this.

Custom Email for Specific Products in Shopify

How Shopify Email Templates Work

Shopify email notifications are written in Liquid, the same templating language used in Shopify themes. Each notification template has access to variables from the order, including the line items, product titles, tags, and variant information.

When Shopify sends an order confirmation, it runs through the template once and renders the email for that specific order. You can use Liquid if statements to check what products are in the order and show different content depending on the result.

Step 1: Open the Order Confirmation Template

Go to your Shopify admin. Click Settings, then Notifications. Under the Customer section, find Order confirmation and click on it.

On the notification page, click Edit code. This opens the full Liquid template for the order confirmation email.

The template has two parts: the subject line at the top, and the body below it. You can add conditional logic to both.

Step 2: Check for a Specific Product Using line_items

To conditionally change content based on what was ordered, you loop through line_items and check a property of each item. The most reliable approaches are checking the product title, the product handle, or a product tag.

Checking by product title:

{% assign is_preorder = false %}
{% for line_item in line_items %}
  {% if line_item.title == 'Your Pre-Order Product Title' %}
    {% assign is_preorder = true %}
  {% endif %}
{% endfor %}

Checking by product handle (more reliable, unaffected by title changes):

{% assign is_preorder = false %}
{% for line_item in line_items %}
  {% if line_item.product.url contains '/your-product-handle' %}
    {% assign is_preorder = true %}
  {% endif %}
{% endfor %}

Checking by product tag (useful when you want one rule to cover multiple products):

{% assign is_preorder = false %}
{% for line_item in line_items %}
  {% if line_item.product.tags contains 'pre-order' %}
    {% assign is_preorder = true %}
  {% endif %}
{% endfor %}

The tag approach is the most flexible. If you add the tag pre-order to any product, it will automatically trigger the custom email without you needing to update the template.

Step 3: Use the Variable in the Subject Line

The subject line sits at the very top of the template, above the HTML. It typically looks like:

Your order is confirmed

Replace it with a conditional:

{% assign is_preorder = false %}
{% for line_item in line_items %}
  {% if line_item.product.tags contains 'pre-order' %}
    {% assign is_preorder = true %}
  {% endif %}
{% endfor %}
{% if is_preorder %}Your pre-order is confirmed{% else %}Your order is confirmed{% endif %}

Shopify renders the subject line as plain text, so keep it clean with no HTML tags.

Step 4: Use the Variable in the Email Body

Anywhere inside the HTML body of the template, you can use the same variable to show different content:

{% if is_preorder %}
<p>Thank you for your pre-order. We will send you a shipping notification as soon as your item is ready to dispatch. Expected dispatch is within 3 to 4 weeks.</p>
{% else %}
<p>Your order has been confirmed and will be dispatched within 2 business days.</p>
{% endif %}

You can repeat this pattern anywhere in the template. Use it to swap out the intro paragraph, add product-specific instructions, or change the call to action button text.

Step 5: Save and Test

Click Save. To test the email, place an actual test order on your store using the product you are targeting. Shopify will send the confirmation email to the email address used on the order.

Check that the subject line and body content match what you configured. Also place a test order for a standard product to confirm the else branch renders correctly and the regular customers still receive the normal email.

If you want to preview without placing a real order, Shopify's notification page has a Send test email button. However, this sends a generic test with placeholder data, not real order data, so product-specific conditions will not trigger. A real test order is the only reliable way to confirm the logic works.

Handling Orders With Multiple Products

If a customer orders both a pre-order product and a regular product in the same cart, the is_preorder variable will be set to true because the loop finds the pre-order item. The entire email will use the pre-order messaging.

Whether this is the right behaviour depends on your situation. If you want the special messaging to appear only when the order contains exclusively pre-order items, you can add a counter approach:

{% assign preorder_count = 0 %}
{% for line_item in line_items %}
  {% if line_item.product.tags contains 'pre-order' %}
    {% assign preorder_count = preorder_count | plus: 1 %}
  {% endif %}
{% endfor %}
{% assign is_preorder_only = false %}
{% if preorder_count == line_items.size %}
  {% assign is_preorder_only = true %}
{% endif %}

Then use is_preorder_only in your conditionals instead.

When a Paid App Makes More Sense

Editing the order confirmation template works well for a single conditional. It becomes harder to manage when:

  • You have several different product types each needing different emails

  • You want to send a follow-up email days after the order rather than just an order confirmation

  • You need a visual editor rather than raw Liquid code

  • You want to A/B test email content

Email marketing tools like Omnisend let you build fully separate email flows per product or tag, with visual editors and send-time conditions. For complex post-purchase email sequences, they are a better fit than editing the built-in Shopify notification template.

For a single product or product type that needs a different order confirmation, the Liquid approach covered here is free, reliable, and does not require installing anything.