How to Send Magento 2 Order Confirmation Email After Payment Success

by mageefy on Jan 3, 2023 Celebrities 382 Views

Default Magento automatically sends an order confirmation email once the order is placed. But what if someone wants to send an email after a successful payment completion from the third-party payment gateways in Magento 2 or what if the card is declined and payment fails? Unfortunately, Default Magento does not provide the functionality of sending email after getting successful payment from third-party gateways so we have come up with a custom code to send Email manually using event observer.

If you want to send the email only after the successful payment then you must write code in observer for checkout_onepage_controller_success_action event.

 

Create a simple method isEnable() using OrderIdentity.php to ensure that the order confirmation email is not sent twice.

Register the event under events.xml using the below code

[Package_Name]\[Module_Name]\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="checkout_onepage_controller_success_action">

        <observer name="checkout_onepage_controller_success_action_sendmail" instance="[Package_Name]\[Module_Name]\Observer\SendMailOnOrderSuccess" />

    </event>

</config>

Once the event is registered, create Observer class in the following file:

[Package_Name]\[Module_Name]\Observer\SendMailOnOrderSuccess.php

 

 

 

<?php

 

namespace [Package_Name]\[Module_Name]\Observer;

 

use Magento\Framework\Event\ObserverInterface;

 

class SendMailOnOrderSuccess implements ObserverInterface

{

    /**

     * @var \Magento\Sales\Model\OrderFactory

     */

    protected $orderModel;

 

    /**

     * @var \Magento\Sales\Model\Order\Email\Sender\OrderSender

     */

    protected $orderSender;

 

    /**

     * @var \Magento\Checkout\Model\Session $checkoutSession

     */

    protected $checkoutSession;

 

    /**

     * @param \Magento\Sales\Model\OrderFactory $orderModel

     * @param \Magento\Sales\Model\Order\Email\Sender\OrderSender $orderSender

     * @param \Magento\Checkout\Model\Session $checkoutSession

     *

     * @codeCoverageIgnore

     */

    public function __construct(

        \Magento\Sales\Model\OrderFactory $orderModel,

        \Magento\Sales\Model\Order\Email\Sender\OrderSender $orderSender,

        \Magento\Checkout\Model\Session $checkoutSession

    )

    {

        $this->orderModel = $orderModel;

        $this->orderSender = $orderSender;

        $this->checkoutSession = $checkoutSession;

    }

 

    /**

     * @param \Magento\Framework\Event\Observer $observer

     * @return void

     */

    public function execute(\Magento\Framework\Event\Observer $observer)

    {

        $orderIds = $observer->getEvent()->getOrderIds();

        if(count($orderIds))

        {

            $this->checkoutSession->setForceOrderMailSentOnSuccess(true);

            $order = $this->orderModel->create()->load($orderIds[0]);

            $this->orderSender->send($order, true);

        }

    }

}

 

 

After adding observer code, an email will be sent to customers on successful order payment. To avoid order duplication Email, we need to create a plugin using the di.xml file.

[Package_Name]\[Module_Name]\etc\di.xml

 

<?xml version="1.0"?>

 

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">

    <type name="Magento\Sales\Model\Order\Email\Container\OrderIdentity">

        <plugin name="change_is_enable_method" type="\[Package_Name]\[Module_Name]\Plugin\Sales\Order\Email\Container\OrderIdentityPlugin"/>

    </type>

</config>

 

 

And Lastly, you need to create another file along with ‘di.xml’ that is OrderIdentityPlugin.php to remove duplication of email.

[Package_Name]\[Module_Name]\Plugin\Sales\Order\Email\Container\ OrderIdentityPlugin.php

 

 

 

<?php

 

namespace [Package_Name]\[Module_Name]\Plugin\Sales\Order\Email\Container;

 

class OrderIdentityPlugin

{

    /**

     * @var \Magento\Checkout\Model\Session $checkoutSession

     */

    protected $checkoutSession;

 

    /**

     * @param \Magento\Checkout\Model\Session $checkoutSession

     *

     * @codeCoverageIgnore

     */

    public function __construct(

        \Magento\Checkout\Model\Session $checkoutSession

    )

    {

        $this->checkoutSession = $checkoutSession;

    }

 

    /**

     * @param \Magento\Sales\Model\Order\Email\Container\OrderIdentity $subject

     * @param callable $proceed

     * @return bool

     */

    public function aroundIsEnabled(\Magento\Sales\Model\Order\Email\Container\OrderIdentity $subject, callable $proceed)

    {

        $returnValue = $proceed();

 

        $forceOrderMailSentOnSuccess = $this->checkoutSession->getForceOrderMailSentOnSuccess();

        if(isset($forceOrderMailSentOnSuccess) && $forceOrderMailSentOnSuccess)

        {

            if($returnValue)

                $returnValue = false;

            else

                $returnValue = true;

 

            $this->checkoutSession->unsForceOrderMailSentOnSuccess();

        }

 

        return $returnValue;

    }

}

That’s it! Now start sending the order confirmation Emails to your customers only after the payment is successful! Hope this code will help you to send Order Confirmation Email to your Customers after Successful Payment Transaction. You can even use & customize this code according to your need.

 

Related Best Magento Extension for your eCommerce Business- 

 

Bundle Product Option Image Extension For Magento 2

 

Reindex from Backend for Magento 2 Extension

 

Contact Us Inquiry Manager for Magento 2

 

Contact- 

 

Email  -  support@mageefy.com

              mageefy@gmail.com

 

Visit -  https://www.mageefy.com/

 

Address -  72, Second Floor, Ganesh Vihar Extension, Sirsi Road, Jaipur - 302034, India.

(+91) 0141- 6693741

 

 

 

 

Article source: https://article-realm.com/article/Arts-Entertainment/Celebrities/34450-How-to-Send-Magento-2-Order-Confirmation-Email-After-Payment-Success.html

Comments

No comments have been left here yet. Be the first who will do it.
Safety

captchaPlease input letters you see on the image.
Click on image to redraw.

Reviews

Guest

Overall Rating:

Most Viewed Articles

Statistics

Members
Members: 16948
Publishing
Articles: 79,144
Categories: 202
Online
Active Users: 355
Members: 1
Guests: 354
Bots: 4262
Visits last 24h (live): 4622
Visits last 24h (bots): 54326

Latest Comments

I also liked the point about low-traffic websites. AI may identify behavioral patterns faster, but when the sample size is too small, the test results can still be unreliable. A tool can speed up...
The article also made me think about something that's easy to overlook: backlinks should ultimately provide value to real users. If a link has no real context and exists only to increase the...
FNAF Game is one of those games that can make even a quiet room feel terrifying. I really enjoy how the game builds tension slowly instead of relying only on sudden scares. Watching the cameras,...
Deadshot IO is a really enjoyable FPS experience for players who like fast combat and competitive gameplay.
It is the easiest and fastest way to monetize a website. All you need to do is sign up and install the plugin, after which you can decide how many ads to display and how much revenue to generate....
It is the easiest and fastest way to monetize a website. All you need to do is sign up and install the plugin, after which you can decide how many ads to display and how much revenue to generate....
It is the easiest and fastest way to monetize a website. All you need to do is sign up and install the plugin, after which you can decide how many ads to display and how much revenue to generate....
I’ve been checking out 9anime for watching anime online, and I really like how easy it is to browse through the large selection of anime series and movies. Finding a specific show is pretty...
The jumpscare hits and I scream, I cannot help it anymore. My body reacts before my brain even processes what is happening to me. FNAF Freddy Game has broken through every defense I thought I had.
Fast, fun, hilarious, and totally addictive! Slope Run   Once you start playing, it's hard to stop. ragdoll playground   Join us today for endless fun action. Are you ready to be the ultimate...
on Aug 28, 2026 about + Can you play Uno Online?

Translate To: