🔥 Just Launched! Werra Premium Template for HyväSee it in Action

How to Use Custom Variables in Transactional Email in Magento 2

By Sanjay JethvaUpdated on May 22, 2025 2 min read

Email marketing can be tricky business but the pay-offs are remarkable. Crafting a high-quality Email is difficult and when it comes to transactional Emails, they are the “must-see” emails. It contains information about the order that the customers are interested in and it must contain all the required details.

According to a study by Experian, transactional emails receive 8 times the opens compared to non-transactional marketing emails.

For Magento 2 store owners, this is an issue of concern as the default Magento 2 order Email is not up to the mark! The store owner may want to add customer-specific details, additional order details, etc. for delivering more information or for a personalized approach. This leads to using the custom variable in Magento 2 Emails.

To overcome this default limitation, here’s the solution to use custom variables in transactional Email in Magento 2 for optimizing the order Emails!

Method to use custom variables in transactional Email in Magento 2:

1. Create registration.php file in app\code\[Vendor]\[Namespace]\

<?php
        \Magento\Framework\Component\ComponentRegistrar::register(
            \Magento\Framework\Component\ComponentRegistrar::MODULE,
            '[Vendor]_[Namespace]',
            __DIR__
        );

2. Create module.xml file in app\code\[Vendor]\[Namespace]\etc

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
    <module name="Meetanshi_Gdpr" setup_version="1.0.2"/>
</config>

3. Create events.xml file in app\code\[Vendor]\[Namespace]\etc

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
    <event name="email_order_set_template_vars_before">
        <observer name="meetanshi_add_custom_variable_to_Order"
                  instance="[Vendor]\[Namespace]\Observer\ObserverforAddCustomVariable"/>
    </event>
</config>

4. Create ObserverforAddCustomVariable.php file in app\code\[Vendor]\[Namespace]\Observer

<?php
namespace [Vendor]\[namespace]\Observer;
use Magento\Customer\Api\CustomerRepositoryInterface;
use Magento\Framework\Event\ObserverInterface;
class ObserverforAddCustomVariable implements ObserverInterface
{
    protected $customerRepository;
    public function __construct(CustomerRepositoryInterface $customerRepository)
    {
        $this->customerRepository = $customerRepository;
    }
    public function execute(\Magento\Framework\Event\Observer $observer)
    {
        /** @var \Magento\Framework\App\Action\Action $controller */
        $transport = $observer->getEvent()->getTransport();
        if ($transport->getOrder() != null) 
        {
            $customer = $this->customerRepository->getById($transport->getOrder()->getCustomerId());
            if ($customer->getCustomAttribute('username')) 
            {
                $transport['username'] = $customer->getCustomAttribute('username')->getValue();
            }
        }
    }
}

You can use custom Email variable in email template like “{var username}”

With the above method, you can optimize your order Emails!

Thank you.

Sanjay Jethva Full Image
Article bySanjay Jethva

Sanjay is the co-founder and CTO of Meetanshi with hands-on expertise with Magento since 2011. He specializes in complex development, integrations, extensions, and customizations. Sanjay is one the top 50 contributor to the Magento community and is recognized by Adobe. His passion for Magento 2 and Shopify solutions has made him a trusted source for businesses seeking to optimize their online stores. He loves sharing technical solutions related to Magento 2 & Shopify.