Emails
Milo Subscriptions sends transactional emails to customers and admins at key points in the subscription lifecycle. This page lists the real emails shipped with the core plugin, how to configure them, and how to customize their templates.
How the emails work
Emails use the WooCommerce email system:
- Enable/disable, subject, heading, additional content, recipient, and format are configurable under Subscriptions → Settings → Emails.
- Templates can be overridden by copying files into your theme.
- Delivery runs through
wp_mail(); for reliable delivery, add an SMTP plugin.
The email list
The core plugin ships 16 email classes:
Customer-facing
- Activated subscription (milo_subscriptions_activated_subscription)
- Customer cancelled (milo_subscriptions_customer_cancelled)
- Customer completed renewal (milo_subscriptions_customer_completed_renewal)
- Customer expiration reminder (milo_subscriptions_customer_expiration_reminder)
- Customer expired (milo_subscriptions_customer_expired)
- Customer on-hold (milo_subscriptions_customer_on_hold)
- Customer plan switched (milo_subscriptions_customer_plan_switched)
- Customer processing renewal (milo_subscriptions_customer_processing_renewal)
- Customer renewal invoice (milo_subscriptions_customer_renewal_invoice)
- Customer renewal reminder (milo_subscriptions_customer_renewal_reminder)
- Customer trial ending (milo_subscriptions_customer_trial_ending)
- Re-authorize payment (milo_subscriptions_reauthorize_payment)
Admin-facing / internal
- Cancelled subscription (milo_subscriptions_cancelled_subscription)
- Expired subscription (milo_subscriptions_expired_subscription)
- New renewal order (milo_subscriptions_new_renewal_order)
- On-hold subscription (milo_subscriptions_on_hold_subscription)
Core does not ship a “payment retry” email, a “price change notification” email, or a “pause confirmation” email. Retry emails come from the Failed Payment Retry add-on.
Core does ship three reminders, all off by default: renewal reminder, trial ending, and expiration reminder. They share one template and are configured individually.
Configuring emails
Go to Subscriptions → Settings → Emails. Each email expands into a row where you can edit:
- Subject
- Heading
- Additional content
- Recipient(s) (admin emails only)
- Email type (HTML, plain text, or multipart)
- An enable/disable toggle
Placeholders
The settings UI surfaces three placeholders that can be inserted into subject and heading:
{site_title}{order_number}{site_url}
Individual emails may expose additional WooCommerce-style tokens inside their templates; refer to the specific template when customizing.
Previewing emails
Each email in the settings screen has a Preview button that opens a rendered HTML preview in a modal. There is no “Send test email” button in the core plugin.
Templates
Email templates live in wp-content/plugins/milosubscriptions/templates/emails/. The real files are:
activated-subscription.phpadmin-new-renewal-order.phpcancelled-subscription.phpcustomer-cancelled.phpcustomer-completed-renewal.phpcustomer-expired.phpcustomer-on-hold.phpcustomer-processing-renewal.phpcustomer-renewal-invoice.phpexpired-subscription.phpon-hold-subscription.phpcustomer-plan-switched.phpreauthorize-payment.phpsubscription-reminder.php
A plain/ subfolder contains the plain-text versions. subscription-reminder.php is shared by the three reminder emails; editing it changes all three.
To override a template, copy it into yourtheme/woocommerce/emails/. Our emails are loaded through WooCommerce’s own template system, so they follow its folder, not ours.
If you migrated from WooCommerce Subscriptions, check your existing overrides first. Several of our template files share a filename with that plugin and resolve from the same folder, so an override you wrote for it stays active with Milo and calls code that no longer exists, which produces a fatal error on the page or email concerned. The shared names are myaccount/subscriptions.php, myaccount/view-subscription.php, emails/admin-new-renewal-order.php, emails/cancelled-subscription.php, emails/customer-renewal-invoice.php, emails/expired-subscription.php, emails/on-hold-subscription.php, and their plain/ counterparts. If any of these are in your theme, move them aside and re-apply your changes to our versions.
Email styling
Branding (header image, footer text, base colors, text color) is inherited from WooCommerce’s email settings. Configure them under WooCommerce → Settings → Emails.
Deliverability tips
- Use an SMTP or transactional-mail plugin (WP Mail SMTP, FluentSMTP, or similar) configured with a provider like Postmark, SendGrid, Mailgun, or Amazon SES.
- Send from a real domain with SPF, DKIM, and DMARC configured.
- Keep the
Fromaddress consistent.
Troubleshooting
An email is not being sent
Check, in order:
- The email is enabled under Settings → Emails.
wp_mail()works on your site (test with any SMTP plugin’s test feature).- The triggering event actually happened (verify by inspecting the subscription’s notes in the admin detail page).
Emails are flagged as spam
Switch to a proper transactional service and configure DNS records (SPF, DKIM, DMARC) for your sending domain.
Next steps
Did this page miss something?
Tell us and we rewrite it, usually the same day.