diff --git a/app/code/Magento/Customer/Observer/UpgradeQuoteCustomerEmailObserver.php b/app/code/Magento/Customer/Observer/UpgradeQuoteCustomerEmailObserver.php
new file mode 100644
index 0000000000000..e0c9552b9f508
--- /dev/null
+++ b/app/code/Magento/Customer/Observer/UpgradeQuoteCustomerEmailObserver.php
@@ -0,0 +1,66 @@
+quoteRepository = $quoteRepository;
+ }
+
+ /**
+ * Upgrade quote customer email when customer has changed email
+ *
+ * @param Observer $observer
+ * @return void
+ */
+ public function execute(Observer $observer): void
+ {
+ /** @var \Magento\Customer\Model\Data\Customer $customerOrig */
+ $customerOrig = $observer->getEvent()->getOrigCustomerDataObject();
+ if (!$customerOrig) {
+ return;
+ }
+
+ $emailOrig = $customerOrig->getEmail();
+
+ /** @var \Magento\Customer\Model\Data\Customer $customer */
+ $customer = $observer->getEvent()->getCustomerDataObject();
+ $email = $customer->getEmail();
+
+ if ($email == $emailOrig) {
+ return;
+ }
+
+ try {
+ $quote = $this->quoteRepository->getForCustomer($customer->getId());
+ $quote->setCustomerEmail($email);
+ $this->quoteRepository->save($quote);
+ } catch (NoSuchEntityException $e) {
+ return;
+ }
+ }
+}
diff --git a/app/code/Magento/Customer/Test/Unit/Observer/UpgradeQuoteCustomerEmailObserverTest.php b/app/code/Magento/Customer/Test/Unit/Observer/UpgradeQuoteCustomerEmailObserverTest.php
new file mode 100644
index 0000000000000..f41c0ed9f0fb4
--- /dev/null
+++ b/app/code/Magento/Customer/Test/Unit/Observer/UpgradeQuoteCustomerEmailObserverTest.php
@@ -0,0 +1,107 @@
+observerMock = $this->getMockBuilder(\Magento\Framework\Event\Observer::class)
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $this->eventMock = $this->getMockBuilder(\Magento\Framework\Event::class)
+ ->disableOriginalConstructor()
+ ->setMethods(['getCustomerDataObject', 'getOrigCustomerDataObject'])
+ ->getMock();
+
+ $this->observerMock->expects($this->any())->method('getEvent')->will($this->returnValue($this->eventMock));
+
+ $this->quoteRepositoryMock = $this
+ ->getMockBuilder(\Magento\Quote\Api\CartRepositoryInterface::class)
+ ->getMockForAbstractClass();
+ $this->model = new UpgradeQuoteCustomerEmailObserver($this->quoteRepositoryMock);
+ }
+
+ /**
+ * Unit test for verifying quote customers email upgrade observer
+ */
+ public function testUpgradeQuoteCustomerEmail()
+ {
+ $email = "test@test.com";
+ $origEmail = "origtest@test.com";
+
+ $customer = $this->getMockBuilder(\Magento\Customer\Api\Data\CustomerInterface::class)
+ ->disableOriginalConstructor()
+ ->getMock();
+ $customerOrig = $this->getMockBuilder(\Magento\Customer\Api\Data\CustomerInterface::class)
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $quoteMock = $this->getMockBuilder(\Magento\Quote\Model\Quote::class)
+ ->setMethods(['setCustomerEmail'])
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $this->eventMock->expects($this->any())
+ ->method('getCustomerDataObject')
+ ->will($this->returnValue($customer));
+ $this->eventMock->expects($this->any())
+ ->method('getOrigCustomerDataObject')
+ ->will($this->returnValue($customerOrig));
+
+ $customerOrig->expects($this->any())
+ ->method('getEmail')
+ ->willReturn($this->returnValue($origEmail));
+
+ $customer->expects($this->any())
+ ->method('getEmail')
+ ->willReturn($this->returnValue($email));
+
+ $this->quoteRepositoryMock->expects($this->once())
+ ->method('getForCustomer')
+ ->willReturn($quoteMock);
+
+ $quoteMock->expects($this->once())
+ ->method('setCustomerEmail');
+
+ $this->quoteRepositoryMock->expects($this->once())
+ ->method('save')
+ ->with($quoteMock);
+
+ $this->model->execute($this->observerMock);
+ }
+}
diff --git a/app/code/Magento/Customer/etc/events.xml b/app/code/Magento/Customer/etc/events.xml
index d841d8faa9c38..2a724498a0359 100644
--- a/app/code/Magento/Customer/etc/events.xml
+++ b/app/code/Magento/Customer/etc/events.xml
@@ -15,4 +15,7 @@
+
+
+