I'm trying to send an email from the custom module, for that I have created a controller file, XML file and html file, below is my code
app/code/Magelearn/Customform/Controller/Index/ Save.php
<?php
namespace Magelearn\Customform\Controller\Index;
use Magento\Framework\App\Action\Context;
use Magelearn\Customform\Model\CustomformFactory;
use Magento\Framework\App\Filesystem\DirectoryList;
use Magento\MediaStorage\Model\File\UploaderFactory;
use Magento\Framework\Image\AdapterFactory;
use Magento\Framework\Filesystem;
use Magento\Framework\Exception\LocalizedException;
use Magento\Framework\Mail\Template\TransportBuilder;
use Magento\Framework\Translate\Inline\StateInterface;
use Psr\Log\LoggerInterface;
use Magento\Store\Model\StoreManagerInterface;
use Magento\Framework\App\Config\ScopeConfigInterface;
class Save 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';
/**
* @var Customform
*/
protected $_customform;
protected $uploaderFactory;
protected $adapterFactory;
protected $filesystem;
protected $_transportBuilder;
protected $_inlineTranslation;
protected $_logLoggerInterface;
protected $_scopeConfig;
protected $storeManager;
public function __construct(
Context $context,
CustomformFactory $customform,
UploaderFactory $uploaderFactory,
AdapterFactory $adapterFactory,
Filesystem $filesystem,
TransportBuilder $transportBuilder,
StateInterface $inlineTranslation,
LoggerInterface $logLoggerInterface,
StoreManagerInterface $storeManager,
ScopeConfigInterface $scopeConfig
) {
$this->_customform = $customform;
$this->uploaderFactory = $uploaderFactory;
$this->adapterFactory = $adapterFactory;
$this->filesystem = $filesystem;
$this->_transportBuilder = $transportBuilder;
$this->_inlineTranslation = $inlineTranslation;
$this->_logLoggerInterface = $logLoggerInterface;
$this->storeManager = $storeManager;
$this->_scopeConfig = $scopeConfig;
parent::__construct($context);
}
public function execute()
{
if (!$this->getRequest()->isPost()) {
return $this->resultRedirectFactory->create()->setPath('*/*/');
}
try {
//$data = $this->getRequest()->getParams();
$data = $this->validatedParams();
if(isset($_FILES['image']['name']) && $_FILES['image']['name'] != '') {
try{
$uploaderFactory = $this->uploaderFactory->create(['fileId' => 'image']);
$uploaderFactory->setAllowedExtensions(['jpg', 'jpeg', 'gif', 'png']);
$imageAdapter = $this->adapterFactory->create();
$uploaderFactory->addValidateCallback('custom_image_upload',$imageAdapter,'validateUploadFile');
$uploaderFactory->setAllowRenameFiles(true);
$uploaderFactory->setFilesDispersion(true);
$mediaDirectory = $this->filesystem->getDirectoryRead(DirectoryList::MEDIA);
$destinationPath = $mediaDirectory->getAbsolutePath('magelearn/customform');
$result = $uploaderFactory->save($destinationPath);
if (!$result) {
throw new LocalizedException(
__('File cannot be saved to path: $1', $destinationPath)
);
}
$imagePath = 'magelearn/customform'.$result['file'];
$data['image'] = $imagePath;
} catch (\Exception $e) {
}
}
$customform = $this->_customform->create();
$customform->setData($data);
if($customform->save()){
// Send email
$this->sendEmail($data);
$this->messageManager->addSuccessMessage(__('Your inquiry has been submitted successfully.'));
}else{
$this->messageManager->addErrorMessage(__('An error occurred while processing your request. Please try again later.'));
}
}catch (\Exception $e) {
$this->messageManager->addErrorMessage(__('An error occurred while processing your request. Please try again later.'));
$this->_logLoggerInterface->error($e->getMessage());
}
$resultRedirect = $this->resultRedirectFactory->create();
$resultRedirect->setPath('customform');
return $resultRedirect;
}
/**
* @return array
* @throws \Exception
*/
private function validatedParams()
{
$request = $this->getRequest();
if (trim($request->getParam('first_name')) === '') {
throw new LocalizedException(__('Enter the First Name and try again.'));
}
if (trim($request->getParam('last_name')) === '') {
throw new LocalizedException(__('Enter the Last Name and try again.'));
}
if (false === \strpos($request->getParam('email'), '@')) {
throw new LocalizedException(__('The email address is invalid. Verify the email address and try again.'));
}
if (trim($request->getParam('phone')) === '') {
throw new LocalizedException(__('Enter the Phone Number and try again.'));
}
if (trim($request->getParam('message')) === '') {
throw new LocalizedException(__('Enter your message and try again.'));
}
return $request->getParams();
}
/**
* Send email
*
* @param array $data
* @return void
*/
private function sendEmail($data)
{
$storeId = $this->storeManager->getStore()->getId();
$request = $this->getRequest();
$storeScope = \Magento\Store\Model\ScopeInterface::SCOPE_STORE;
$emailTemplate = 'customform_email_template';
// Retrieve store Name
$storeName = $this->_scopeConfig->getValue(
'trans_email/ident_general/email',
$storeScope
);
// Retrieve store email ID
$storeEmail = $this->_scopeConfig->getValue(
'trans_email/ident_general/name',
$storeScope
);
$emailSender = [
'name' => $storeName,
'email' => $storeEmail,
];
$emailRecipient = [
'name' => $data['first_name'],
'email' => $data['email'],
];
$emailVars = [
'first_name' => $data['first_name'],
'last_name' => $data['last_name'],
'email' => $data['email'],
'phone' => $data['phone'],
'message' => $data['message'],
];
$this->_inlineTranslation->suspend();
$transport = $this->_transportBuilder
->setTemplateIdentifier($emailTemplate,$storeScope)
->setTemplateOptions([
'area' => \Magento\Framework\App\Area::AREA_FRONTEND,
'store' => $storeId,
])
->setTemplateVars($emailVars)
->setFrom($emailSender)
->addTo($emailRecipient['email'], $emailRecipient['name'])
->getTransport();
$transport->sendMessage();
$this->_logLoggerInterface->debug('Email sent successfully.');
$this->_inlineTranslation->resume();
}
}
app/code/Magelearn/Customform/etc/ customform_email_template.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="customform_email_template" label="Custom Module Email Template" file="customform_email_template.html" type="html" module="Magelearn_Customform" area="frontend"/>
</config>
app/code/Magelearn/Customform/view/frontend/email customform_email_template.html
{{template config_path="design/email/header_template"}}
<h1>New Form Submission</h1>
<p>First Name: {{var first_name}}</p>
<p>Last Name: {{var last_name}}</p>
<p>Name: {{var name}}</p>
<p>Email: {{var email}}</p>
<p>Phone: {{var phone}}</p>
<p>Message: {{var message}}</p>
{{template config_path="design/email/footer_template"}}
error is :
[2023-06-21T11:28:14.220698+00:00] main.ERROR: Email template 'customform_email_template' is not defined. [] []