Magento 2- Send mail using your smtp server
Live Demo
Here we learn how to send mail using our smtp detail in magento2
For this we need to override mageto \Magento\Framework\Mail\Transport class by your custom model class
We have a complete module for smtp setup. You can check here SMTP Configurator for Magento2 here.
We can do it in two step
1# For override we need to write code in module di.xml file at location app/code/NameSpace/ModuleName/etc
<?xml version="1.0"?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd"> <!-- for override magento default Transport class with our custom module model--> <preference for="\Magento\Framework\Mail\Transport" type="NameSpace\ModuleName\Model\Transport"/> </config>
2# Now we’ll define our Transport model in our custom module
<?php /** * Mail Transport */ namespace NameSpace\ModuleName\Model; class Transport extends \Laminas\Mail\Transport\Sendmail implements \Magento\Framework\Mail\TransportInterface { /** * @var \Magento\Framework\Mail\MessageInterface */ protected $_message; /** * @param MessageInterface $message * @param null $parameters * @throws \InvalidArgumentException */ public function __construct(\Magento\Framework\Mail\MessageInterface $message) { if (!$message instanceof \Laminas\Mail) { throw new \InvalidArgumentException('The message should be an instance of \Laminas\Mail'); } $smtpHost= 'xxx.xxxx.xxx';//your smtp host '; $smtpConf = [ 'auth' => 'login',//auth type 'ssl' => 'tsl', 'port' => '587', 'username' => 'xxxx@xxxxx.xxx',//smtm user name 'password' => 'xxxxxxxxxxxxxx'//smtppassword ]; parent::__construct($smtpHost, $smtpConf); $this->_message = $message; } /** * Send a mail using this transport * @return void * @throws \Magento\Framework\Exception\MailException */ public function sendMessage() { try { parent::send($this->_message); } catch (\Exception $e) { throw new \Magento\Framework\Exception\MailException(new \Magento\Framework\Phrase($e->getMessage()), $e); } } }
Now all mail goes from your Magento 2 instance using your SMTP server 🙂
View Comments (37)
Comment or Ask a Question
Quick Links