How to Set Dynamic Email Subject in Magento 2
Steps to Set Dynamic Email Subject in Magento 2:
Step 1: Create an email template configuration file at the below path
app\code\Vendor\Extension\etc\email_templates.xml
Then add the below code
<?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="your_email_template_id" label="Label of your template file" file="email_file.html" type="html" module="Vendor_Extension" area="frontend"/>
</config>
Step 2: Now create an email template file at the following path
app\code\Vendor\Extension\view\frontend\email\email_file.html
Now add the below code snippet
<!--@subject {{var subject|raw }}@-->
<!--@vars
{"var customerName":"Customer Name",
"var customerEmail":"Customer Email",
"var customerComment":"Comment"}
@-->
<body style="background:#F6F6F6; font-family:Verdana, Arial, Helvetica, sans-serif; font-size:12px; margin:0; padding:0;">
<div style="background:#F6F6F6; font-family:Verdana, Arial, Helvetica, sans-serif; font-size:12px; margin:0; padding:0;">
<table cellspacing="0" cellpadding="0" border="0" height="100%" width="100%">
<tr>
<td align="center" valign="top" style="padding:20px 0 20px 0">
<table bgcolor="FFFFFF" cellspacing="0" cellpadding="10" border="0" width="650" style="border:1px solid #E0E0E0;">
<tr>
<td valign="top" colspan="5">
<h1 style="font-size:22px; font-weight:normal; line-height:22px; margin:0 0 11px 0;">Hello Admin,</h1>
</td>
</tr>
<tr>
<td valign="top" colspan="5">
<p style="border:1px solid #E0E0E0; font-size:12px; line-height:16px; margin:0; padding:13px 18px; background:#F9F9F9;">You Have Received New Query As Bellow.<p>
</td>
</tr>
<tr>
<td valign="top" colspan="5">
<p style="border:1px solid #E0E0E0; font-size:12px; line-height:16px; margin:0; padding:13px 18px; background:#F9F9F9;">Customer Name : <strong>{{var customerName}}</strong></td>
</tr>
<tr>
<td valign="top" colspan="5">
<p style="border:1px solid #E0E0E0; font-size:12px; line-height:16px; margin:0; padding:13px 18px; background:#F9F9F9;">Customer Email : <strong>{{var customerEmail}}</strong></td>
</tr>
<tr>
<td valign="top" colspan="5">
<p style="border:1px solid #E0E0E0; font-size:12px; line-height:16px; margin:0; padding:13px 18px; background:#F9F9F9;">Customer Comment : <strong>{{var customerComment}}</strong></td>
</tr>
<tr>
<td valign="top" colspan="5">
<p style="border:1px solid #E0E0E0; font-size:12px; line-height:16px; margin:0; padding:13px 18px; background:#F9F9F9; text-align:center;"><strong>Thank you.</strong></td>
</tr>
</table>
</td>
</tr>
</table>
</div>
</body>
Step 3: Now the template is ready and we will do the code for sending mail.
Go to your controller file
app\code\Vendor\Extension\Controller\Index\Index.php
Add the below-mentioned code
<?php
namespace Vendor\Extension\Controller\Index;
use Magento\Framework\App\Action\Context;
use Magento\Store\Model\StoreManagerInterface;
use Magento\Framework\Mail\Template\TransportBuilder;
use Magento\Framework\Translate\Inline\StateInterface;
class Index extends \Magento\Framework\App\Action\Action
{
protected $transportBuilder;
protected $storeManager;
protected $inlineTranslation;
protected $state;
public function __construct(
Context $context,
StoreManagerInterface $storeManager,
TransportBuilder $transportBuilder,
StateInterface $state)
{
$this->transportBuilder = $transportBuilder;
$this->storeManager = $storeManager;
$this->inlineTranslation = $state;
parent::__construct($context);
}
public function execute()
{
$templateId = 'your_email_template_id'; // template id
$fromEmail = 'admin@gmail.com'; // sender Email id
$toEmail = 'test.magecomp@gmail.com'; // receiver email id
$subject = 'your_dynamic_subject'; // Dynamic subject
try
{
// template variables pass here
$templateVars = [
'subject' => $subject,
'customerName' => 'Test',
'customerEmail' => 'Magecomp',
'customerComment' => 'Test Comment'
];
$storeId = $this->storeManager->getStore()->getId();
$this->inlineTranslation->suspend();
$storeScope = \Magento\Store\Model\ScopeInterface::SCOPE_STORE;
$templateOptions = [
'area' => \Magento\Framework\App\Area::AREA_FRONTEND,
'store' => $storeId
];
$transport = $this->transportBuilder->setTemplateIdentifier($templateId, $storeScope)
->setTemplateOptions($templateOptions)
->setTemplateVars($templateVars)
->setFrom($fromEmail)
->addTo($toEmail)
->getTransport();
$transport->sendMessage();
$this->inlineTranslation->resume();
$this->messageManager->addSuccessMessage(__('Your Email Sent successfully'));
$this->_redirect('*/*/');
}
catch (\Exception $e)
{
$this->inlineTranslation->resume();
$this->messageManager->addErrorMessage(__('We can\'t process your request' . $e->getMessage()));
$this->_redirect('*/*/');
}
}
}
Comments
Post a Comment