Trying to follow thuis tutorial: https://magecomp.com/blog/send-email-to-admin-after-customer-registration-magento-2/
What i have done:
- \app\code\Namespace\Modulename\etc\module.xml
<?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="Namespace_Modulename" setup_version="0.0.1">
</module> </config>
- \app\code\Namespace\Modulename\registration.php
<?php \Magento\Framework\Component\ComponentRegistrar::register(
\Magento\Framework\Component\ComponentRegistrar::MODULE, 'Namespace_Modulename',
__DIR__
);
- \app\code\Namespace\Modulename\etc\frontend\events.xml
<?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="customer_register_success">
<observer name="sendmail_toadmin" instance="Namespace\Modulename\Observer\SendMailToAdmin"/>
</event>
</config>
- \app\code\Namespace\Modulename\Observer\SendMailToAdmin.php
<?php
namespace Namespace_Modulename\Observer;
use Magento\Framework\Event\ObserverInterface;
class SendMailToAdmin implements ObserverInterface
{
const XML_PATH_EMAIL_RECIPIENT = 'trans_email/ident_general/email';
protected $_transportBuilder;
protected $inlineTranslation;
protected $scopeConfig;
protected $storeManager;
protected $_escaper;
public function __construct(
\Magento\Framework\Mail\Template\TransportBuilder $transportBuilder,
\Magento\Framework\Translate\Inline\StateInterface $inlineTranslation,
\Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
\Magento\Store\Model\StoreManagerInterface $storeManager,
\Magento\Framework\Escaper $escaper
) {
$this->_transportBuilder = $transportBuilder;
$this->inlineTranslation = $inlineTranslation;
$this->scopeConfig = $scopeConfig;
$this->storeManager = $storeManager;
$this->_escaper = $escaper;
}
public function execute(\Magento\Framework\Event\Observer $observer)
{
$customer = $observer->getData('customer');
$this->inlineTranslation->suspend();
try
{
$error = false;
$sender = [
'name' => $this->_escaper->escapeHtml($customer->getFirstName()),
'email' => $this->_escaper->escapeHtml($customer->getEmail()),
];
$postObject = new \Magento\Framework\DataObject();
$postObject->setData($sender);
$storeScope = \Magento\Store\Model\ScopeInterface::SCOPE_STORE;
$transport =
$this->_transportBuilder
->setTemplateIdentifier('13') // Send the ID of Email template which is created in Admin panel
->setTemplateOptions(
['area' => \Magento\Framework\App\Area::AREA_FRONTEND, // using frontend area to get the template file
'store' => \Magento\Store\Model\Store::DEFAULT_STORE_ID,]
)
->setTemplateVars(['data' => $postObject])
->setFrom($sender)
->addTo($this->scopeConfig->getValue(self::XML_PATH_EMAIL_RECIPIENT, $storeScope))
->getTransport();
$transport->sendMessage(); ;
$this->inlineTranslation->resume();
}
catch (\Exception $e)
{
\Magento\Framework\App\ObjectManager::getInstance()->get('Psr\Log\LoggerInterface')->debug($e->getMessage());
}
}
}
Error in browser:
Fatal error: Cannot declare class Namespace_Modulename\Observer\SendMailToAdmin, because the name is already in use in /home/qg2ylpmw/public_html/app/code/Namespace/Modulename/Observer/SendMailToAdmin.php on line 7
What's wrong?? What i need to do to get to work?
Magento ver. 2.2.11