I have create a custom module which send mail. The mail functionality works perfectly but success message not show up.
mail code is :
<?php
namespace Codextblog\Customemail\Controller\Index;
use Zend\Log\Filter\Timestamp;
use Magento\Framework\App\Config\ScopeConfigInterface;
use Magento\Store\Model\ScopeInterface;
class Post extends \Magento\Framework\App\Action\Action
{
const XML_PATH_EMAIL_RECIPIENT_NAME = 'trans_email/ident_support/name';
const XML_PATH_EMAIL_RECIPIENT_EMAIL = 'trans_email/ident_support/email';
protected $_inlineTranslation;
protected $_transportBuilder;
protected $_scopeConfig;
protected $_logLoggerInterface;
protected $request;
protected $scopeConfig;
protected $messageManager;
protected $_customerSession;
private $logger;
public function __construct(
\Magento\Framework\App\Action\Context $context,
\Magento\Framework\App\Request\Http $request,
\Magento\Framework\Translate\Inline\StateInterface $inlineTranslation,
\Magento\Framework\Mail\Template\TransportBuilder $transportBuilder,
\Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
\Magento\Customer\Model\SessionFactory $customerSession,
\Psr\Log\LoggerInterface $loggerInterface,
\Psr\Log\LoggerInterface $logger,
\Magento\Framework\Message\ManagerInterface $messageManager,
array $data = []
)
{
$this->_inlineTranslation = $inlineTranslation;
$this->logger = $logger;
$this->_transportBuilder = $transportBuilder;
$this->_customerSession = $customerSession->create();
$this->scopeConfig = $scopeConfig;
$this->_logLoggerInterface = $loggerInterface;
$this->messageManager = $messageManager;
parent::__construct($context);
}
public function getCustomerData() {
if ($this->_customerSession->isLoggedIn()) {
return $this->_customerSession->getCustomerData()->getEmail();
}
return false;
}
public function execute()
{
$useremail = $this->getCustomerData();
$toemail = $this->scopeConfig->getValue('trans_email/ident_support/email',ScopeInterface::SCOPE_STORE);
$toname = $this->scopeConfig->getValue('trans_email/ident_support/name',ScopeInterface::SCOPE_STORE);
$post = $this->getRequest()->getPost();
$template = 'customemail_email_template';
$recipient_address = $toemail;
$recipient_name = $toname;
$from_address = [
'name' => $useremail,
'email' => $useremail
];
//an array with variables, format is key = variable name, value = variable value
$vars = [
'name' => $post['name'],
'email' => $post['email'],
'ownnumber' => $post['ownnumber'],
'heldcertificate' => $post['heldcertificate'],
'subjectedtovat' => $post['subjectedtovat']
];
//several variables in email template, i.e. storeName are generated based on store Id
$storeId = \Magento\Store\Model\Store::DEFAULT_STORE_ID;
$this->_inlineTranslation->suspend();
$this->_transportBuilder->setTemplateIdentifier(
$template
)->setTemplateOptions(
[
'area' => \Magento\Framework\App\Area::AREA_FRONTEND,
'store' => $storeId,
]
)->setTemplateVars(
$vars
)->setFrom(
$from_address
)->addTo(
$recipient_address,
$recipient_name
);
//create the transport
if (!isset($transport)) {
$transport = $this->_transportBuilder->getTransport();
}
//send the email
try {
$transport->sendMessage();
$this->_inlineTranslation->resume();
$this->messageManager->addSuccess('Email sent successfully');
$this->_redirect('platevaluations/index/index');
} catch (\Exception $exception) {
//log failed email send operation
$this->logger->critical($exception->getMessage());
}
}
}