---
title: "Crafting Custom Email Content: Subject, Type, and Body"
description: "Write custom WooCommerce email content: recipients, subject, type, heading, body and attachments, plus how to attach invoices and show SKUs."
url: "https://wpfactory.com/docs/crafting-email-content/"
updated: "2026-10-05"
category: How to
tags:
  - Additional Custom Emails for WooCommerce
---

# Crafting Custom Email Content: Subject, Type, and Body

To write a custom email's content in [Additional Custom Emails & Recipients for WooCommerce](https://wpfactory.com/item/custom-emails-for-woocommerce/), open the email under **WooCommerce > Settings > Emails** and fill in the recipients, subject, email type, heading, body, styling and attachments. Every text field accepts shortcodes and standard placeholders, so you can pull in live order and customer data.

## Recipients

- Enter one or more email addresses in the **Recipients** field, comma separated.
- If you leave it blank, the email goes to your store admin email (the WordPress **admin_email**).
- Use `%customer%` to send to the order's billing email. You can mix it with fixed addresses, for example `%customer%, wa*******@*****le.com`.

## Subject

Write a clear **Subject** line. You can use shortcodes such as `[order_number]` and standard placeholders. The standard placeholders use braces: `{site_title}`, `{site_address}`, `{order_number}`, and `{order_date}`. If you leave the field blank, the default subject is used.

## Email type

- **Plain text**: a text-only email.
- **HTML**: lets you format the email with HTML for a richer layout.
- **Multipart**: sends both a plain-text and an HTML version so every email client can render it.

The option ID is `email_type`, default **HTML**.

## Header & footer

Tick **Header & footer** (option `wrap_in_wc_template`, default **Yes**) to wrap your content in the standard WooCommerce email header and footer, so custom emails match your other store emails. The **Email heading** field is used only when this is enabled.

## Email content

The **Email content** field is a rich text editor where you write the body. It supports shortcodes and standard placeholders. Click **Default content** below the editor to load a ready-made starting layout (order details plus billing and shipping addresses) that you can edit.

## Email style (optional)

If you are comfortable with CSS, add custom styles in the **Email style** field (option `alg_wc_ce_style`). Enter the CSS rules only, without the surrounding `<style></style>` tags.

## Email attachments (optional)

List file paths in **Email attachments**, one per line, relative to the **Base dir** set under WPFactory > Custom Emails > General (WP root directory by default). For example, with the WP root base dir, `wp-content/uploads/guide.pdf` attaches that file. Turn on Debug to log whether each attachment path resolved.

## FAQ: attachments, invoices and SKUs

### Can I attach a PDF or an image?

Yes. Enter the file's path on your server in **Email attachments**, not a web address. The path is added to the **Base dir** (WP root directory by default, or WP upload directory), so with the default setting a file in your uploads folder is entered as `wp-content/uploads/menu.pdf`. The same files are attached every time this email is sent. If a file does not arrive, turn on **Debug**: the log shows each attachment path followed by *ok* or *does not exist!*.

### Can I attach each order's PDF invoice?

Not with the **Email attachments** field, which only holds fixed files. Custom Emails passes its attachments through WooCommerce's standard `woocommerce_email_attachments` filter together with the custom email's ID, which is the hook invoice plugins use to add their PDFs to emails. Whether your invoice plugin lets you pick a custom email as a target depends on that plugin, so check its "attach to" settings or ask its developer.

### How do I show product SKUs in the order table?

The `[order_details]` shortcode prints WooCommerce's own order table, which shows SKUs only in store (admin) emails. Add the `sent_to_admin` attribute to get the admin version: `[order_details sent_to_admin="yes"]`. The admin version also links the order number to the order edit screen, so use it for emails that go to your staff or stores rather than to customers.

## Testing your email

There is no separate "send test" button. To test, open any order, and in the **Order actions** box choose **Send email: [your email's admin title]**, then click the update button. The email is sent immediately to its configured recipients and an order note records the send. Send it to yourself first by setting your address in Recipients while testing.

### Get more from your store emails

Everything above works in the free version on your one custom email. [Additional Custom Emails & Recipients for WooCommerce](https://wpfactory.com/item/custom-emails-for-woocommerce/) Pro lets you build a full set of custom emails and copy content between them. [See what Pro unlocks](https://wpfactory.com/item/custom-emails-for-woocommerce/).

Related articles

- [Custom Email Preview Shows the Wrong or Old Content](https://wpfactory.com/docs/custom-email-preview-wrong-content/)
- [Send a Custom Email from the Order Screen](https://wpfactory.com/docs/send-custom-email-from-order-screen/)
- [Conditional Email Content with [if]](https://wpfactory.com/docs/conditional-email-content-if/)
- [Order Targeting: Send Custom Emails Only for Certain Orders](https://wpfactory.com/docs/advanced-admin-order/)
- [Understanding Custom Emails: Triggers, Delays, and Scheduling](https://wpfactory.com/docs/custom-email-insights/)

 

[![Additional Custom Emails for WooCommerce](https://wpfactory.com/wp-content/uploads/Custom-Emails-for-WooCommerce.webp)](https://wpfactory.com/item/custom-emails-for-woocommerce/)
