在 Magento 2 中,电子邮件通知是与客户进行沟通的重要方式之一。通过创建自定义的电子邮件模板,可以更好地满足特定业务需求,提供个性化的客户体验。本文将以 PHP 语言为例,详细介绍在 Magento 2 中创建电子邮件模板的方法。
一、电子邮件模板在 Magento 2 中的重要性
电子邮件模板在 Magento 2 中起着至关重要的作用。它们用于向客户发送各种通知,如订单确认、发货通知、密码重置等。通过使用自定义的电子邮件模板,可以:
- 提供一致的品牌形象
确保所有发送给客户的电子邮件都具有统一的外观和风格,增强品牌识别度。 - 个性化沟通
根据不同的场景和客户需求,定制电子邮件内容,提供更加个性化的服务。 - 提高客户体验
清晰、美观的电子邮件模板可以提高客户的阅读体验,增加客户对品牌的好感度。
二、创建电子邮件模板的准备工作
- 了解 Magento 2 的电子邮件系统架构
Magento 2 的电子邮件系统由多个组件组成,包括模板文件、布局文件、事件触发机制等。在创建电子邮件模板之前,需要了解这些组件的作用和相互关系。 - 确定电子邮件模板的需求
明确需要创建哪些类型的电子邮件模板,以及每个模板的用途和内容要求。例如,订单确认邮件可能需要包含订单详情、客户信息、发货时间等内容。 - 准备设计资源
如果需要创建具有特定设计风格的电子邮件模板,可以准备相应的设计资源,如图片、图标、颜色方案等。
三、创建电子邮件模板的步骤
- 创建模板文件
在 Magento 2 中,电子邮件模板文件通常位于app/code/Vendor/Module/view/frontend/email
目录下。可以使用以下步骤创建一个新的电子邮件模板文件:
(1)创建模板目录
如果模块中没有email
目录,可以在view/frontend
目录下创建一个名为email
的子目录。
(2)创建模板文件
在email
目录下,创建一个以.html
为扩展名的模板文件,例如order_confirmation.html
。
以下是一个简单的电子邮件模板文件示例:
收起
html
复制
<!--
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
-->
<!--@subject Order Confirmation @-->
<!--@vars {
"var customer_name":"Customer Name",
"var order_id":"Order ID",
"var order_total":"Order Total"
} @-->
<p>Dear {{var customer_name}},</p>
<p>Thank you for your order. Your order number is {{var order_id}}. The total amount of your order is {{var order_total}}.</p>
<p>We will process your order as soon as possible and keep you updated on the progress.</p>
<p>Best regards,</p>
<p>Your Store Team</p>
在这个模板文件中,使用了 Magento 2 的模板语法来定义变量和主题。变量可以在发送电子邮件时动态替换为实际的值。
- 注册电子邮件模板
为了让 Magento 2 系统能够识别和使用新创建的电子邮件模板,需要在模块的配置文件中进行注册。可以在模块的etc/email_templates.xml
文件中添加以下内容:
收起
xml
复制
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Email:etc/email_templates.xsd">
<template id="vendor_module_order_confirmation" label="Order Confirmation" file="order_confirmation.html" type="html" module="Vendor_Module" area="frontend"/>
</config>
在这个配置文件中,定义了一个名为vendor_module_order_confirmation
的电子邮件模板,指定了模板文件的路径、类型和所属模块等信息。
- 使用电子邮件模板
在 Magento 2 的代码中,可以使用以下方式发送电子邮件并使用自定义的电子邮件模板:
收起
php
复制
<?php
namespace Vendor\Module\Controller\Index;
use Magento\Framework\App\Action\Context;
use Magento\Framework\Mail\Template\TransportBuilder;
use Magento\Framework\Translate\Inline\StateInterface;
class Index extends \Magento\Framework\App\Action\Action
{
protected $transportBuilder;
protected $inlineTranslation;
public function __construct(Context $context, TransportBuilder $transportBuilder, StateInterface $inlineTranslation)
{
$this->transportBuilder = $transportBuilder;
$this->inlineTranslation = $inlineTranslation;
parent::__construct($context);
}
public function execute()
{
$customerName = 'John Doe';
$orderId = '12345';
$orderTotal = '$100.00';
$this->inlineTranslation->suspend();
$transport = $this->transportBuilder
->setTemplateIdentifier('vendor_module_order_confirmation')
->setTemplateOptions([
'area' => \Magento\Framework\App\Area::AREA_FRONTEND,
'store' => \Magento\Store\Model\Store::DEFAULT_STORE_ID,
])
->setTemplateVars([
'customer_name' => $customerName,
'order_id' => $orderId,
'order_total' => $orderTotal,
])
->setFrom('sender@example.com')
->addTo('recipient@example.com')
->getTransport();
$transport->sendMessage();
$this->inlineTranslation->resume();
}
}
在这个示例中,首先创建了一些变量来存储客户名称、订单 ID 和订单总价等信息。然后,使用TransportBuilder
类创建一个电子邮件传输对象,并设置电子邮件模板的标识符、模板选项和变量等信息。最后,设置发件人和收件人地址,并发送电子邮件。
四、电子邮件模板的高级用法
- 使用动态数据
可以在电子邮件模板中使用更多的动态数据,例如从数据库中获取的数据、根据特定规则计算的数据等。可以通过在模板文件中使用更多的变量和 Magento 2 的模板语法来实现。
例如,可以在模板文件中添加以下内容来显示订单中的商品列表:
收起
html
复制
<!--@vars {
"var customer_name":"Customer Name",
"var order_id":"Order ID",
"var order_total":"Order Total",
"var items":"Order Items"
} @-->
<p>Dear {{var customer_name}},</p>
<p>Thank you for your order. Your order number is {{var order_id}}. The total amount of your order is {{var order_total}}.</p>
<p>Here are the items in your order:</p>
<ul>
<!--@foreach($var.items as $item) @-->
<li>{{$item.name}} - {{$item.price}}</li>
<!--@endforeach @-->
</ul>
<p>We will process your order as soon as possible and keep you updated on the progress.</p>
<p>Best regards,</p>
<p>Your Store Team</p>
在发送电子邮件时,可以将订单中的商品列表作为变量传递给模板:
收起
php
复制
<?php
namespace Vendor\Module\Controller\Index;
use Magento\Framework\App\Action\Context;
use Magento\Framework\Mail\Template\TransportBuilder;
use Magento\Framework\Translate\Inline\StateInterface;
class Index extends \Magento\Framework\App\Action\Action
{
protected $transportBuilder;
protected $inlineTranslation;
public function __construct(Context $context, TransportBuilder $transportBuilder, StateInterface $inlineTranslation)
{
$this->transportBuilder = $transportBuilder;
$this->inlineTranslation = $inlineTranslation;
parent::__construct($context);
}
public function execute()
{
$customerName = 'John Doe';
$orderId = '12345';
$orderTotal = '$100.00';
// 获取订单中的商品列表
$items = [
[
'name' => 'Product 1',
'price' => '$50.00',
],
[
'name' => 'Product 2',
'price' => '$50.00',
],
];
$this->inlineTranslation->suspend();
$transport = $this->transportBuilder
->setTemplateIdentifier('vendor_module_order_confirmation')
->setTemplateOptions([
'area' => \Magento\Framework\App\Area::AREA_FRONTEND,
'store' => \Magento\Store\Model\Store::DEFAULT_STORE_ID,
])
->setTemplateVars([
'customer_name' => $customerName,
'order_id' => $orderId,
'order_total' => $orderTotal,
'items' => $items,
])
->setFrom('sender@example.com')
->addTo('recipient@example.com')
->getTransport();
$transport->sendMessage();
$this->inlineTranslation->resume();
}
}
- 自定义电子邮件主题和发件人
可以在发送电子邮件时自定义电子邮件的主题和发件人地址。可以通过在TransportBuilder
类的方法中设置相应的参数来实现。
例如,可以将电子邮件的主题设置为 “Your Order Confirmation from [Store Name]”,并将发件人地址设置为 “no-reply@example.com”:
收起
php
复制
<?php
namespace Vendor\Module\Controller\Index;
use Magento\Framework\App\Action\Context;
use Magento\Framework\Mail\Template\TransportBuilder;
use Magento\Framework\Translate\Inline\StateInterface;
class Index extends \Magento\Framework\App\Action\Action
{
protected $transportBuilder;
protected $inlineTranslation;
public function __construct(Context $context, TransportBuilder $transportBuilder, StateInterface $inlineTranslation)
{
$this->transportBuilder = $transportBuilder;
$this->inlineTranslation = $inlineTranslation;
parent::__construct($context);
}
public function execute()
{
$customerName = 'John Doe';
$orderId = '12345';
$orderTotal = '$100.00';
// 获取订单中的商品列表
$items = [
[
'name' => 'Product 1',
'price' => '$50.00',
],
[
'name' => 'Product 2',
'price' => '$50.00',
],
];
$this->inlineTranslation->suspend();
$transport = $this->transportBuilder
->setTemplateIdentifier('vendor_module_order_confirmation')
->setTemplateOptions([
'area' => \Magento\Framework\App\Area::AREA_FRONTEND,
'store' => \Magento\Store\Model\Store::DEFAULT_STORE_ID,
])
->setTemplateVars([
'customer_name' => $customerName,
'order_id' => $orderId,
'order_total' => $orderTotal,
'items' => $items,
])
->setFrom('no-reply@example.com')
->addTo('recipient@example.com')
->setSubject('Your Order Confirmation from [Store Name]')
->getTransport();
$transport->sendMessage();
$this->inlineTranslation->resume();
}
}
五、总结与展望
在 Magento 2 中创建电子邮件模板是一项非常有用的功能,可以帮助商家更好地与客户进行沟通,提供个性化的服务。通过本文的介绍,相信读者已经掌握了在 Magento 2 中创建电子邮件模板的方法。在实际应用中,可以根据具体的业务需求,进一步扩展和优化电子邮件模板,提高客户体验和品牌形象。
发表回复