Reading list Switch to dark mode

    Magento 2- Send mail using your smtp server

    Updated 21 February 2024

    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

    Searching for an experienced
    Magento Company ?
    Find out More
    <?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' => '[email protected]',//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 🙂

    . . .

    Leave a Comment

    Your email address will not be published. Required fields are marked*


    37 comments

  • BJ
    • Subhangi (Moderator)
  • Muhammad Usman
  • DB
    • Webkul Support
  • Jilco
    • Webkul Support
      • Jilco
        • Webkul Support
          • Jilco
          • Webkul Support
          • Jilco
          • Webkul Support
          • Jilco
          • Jilco
          • Jilco
          • Webkul Support
          • Jilco
          • Webkul Support
          • Jilco
          • Jilco
          • Webkul Support
          • Jilco
          • Jilco
          • Jilco
          • Webkul Support
  • Vipin Surendran
  • Nazar Korchevskiy
  • Wouter Samaey
  • Wouter Samaey
  • Sajeed Shaikh
  • Andrea
  • sanchi
  • Mihai
    • Wouter Samaey
  • Juan Pedro Barba Soler
    • webkul
  • Back to Top

    Message Sent!

    If you have more details or questions, you can reply to the received confirmation email.

    Back to Home