--- a/vendor/magento/module-customer/Controller/Account/EditPost.php 2025-05-15 08:57:35.655655595 +0000 +++ b/vendor/magento/module-customer/Controller/Account/EditPost.php 2025-05-15 08:57:02.927273968 +0000 @@ -39,6 +39,8 @@ use Magento\Framework\Phrase; use Magento\Framework\Filesystem; use Magento\Framework\App\Filesystem\DirectoryList; +use Magento\Newsletter\Model\SubscriptionManagerInterface; +use Magento\Newsletter\Model\SubscriberFactory; /** * Customer edit account information controller @@ -124,6 +126,16 @@ private Url $customerUrl; /** + * @var SubscriptionManagerInterface + */ + private SubscriptionManagerInterface $subscriptionManager; + + /** + * @var SubscriberFactory + */ + protected $subscriberFactory; + + /** * @param Context $context * @param Session $customerSession * @param AccountManagementInterface $accountManagement @@ -144,6 +156,8 @@ CustomerRepositoryInterface $customerRepository, Validator $formKeyValidator, CustomerExtractor $customerExtractor, + SubscriptionManagerInterface $subscriptionManager, + SubscriberFactory $subscriberFactory, ?Escaper $escaper = null, ?AddressRegistry $addressRegistry = null, ?Filesystem $filesystem = null, @@ -157,6 +171,8 @@ $this->customerRepository = $customerRepository; $this->formKeyValidator = $formKeyValidator; $this->customerExtractor = $customerExtractor; + $this->subscriptionManager = $subscriptionManager; + $this->subscriberFactory = $subscriberFactory; $this->escaper = $escaper ?: ObjectManager::getInstance()->get(Escaper::class); $this->addressRegistry = $addressRegistry ?: ObjectManager::getInstance()->get(AddressRegistry::class); $this->filesystem = $filesystem ?: ObjectManager::getInstance()->get(Filesystem::class); @@ -369,8 +385,17 @@ if (!$customerDto->getAddresses()) { $customerDto->setAddresses($currentCustomerData->getAddresses()); } - if (!$inputData->getParam('change_email')) { - $customerDto->setEmail($currentCustomerData->getEmail()); + + $newsletterSubscription = $inputData->getParam('newsletter_subscription'); + if (isset($newsletterSubscription)) { + $subscriber = $this->subscriberFactory->create()->loadByCustomer((int)$customerDto->getId(), (int)$customerDto->getWebsiteId()); + $subscribeStatus = filter_var($inputData->getParam('newsletter_subscription'), FILTER_VALIDATE_BOOLEAN); + + if ($subscribeStatus && !$subscriber->isSubscribed()) { + $this->subscriptionManager->subscribeCustomer((int)$customerDto->getId(), (int)$customerDto->getStoreId()); + } else if (!$subscribeStatus && $subscriber->isSubscribed()) { + $this->subscriptionManager->unsubscribeCustomer((int)$customerDto->getId(), (int)$customerDto->getStoreId()); + } } return $customerDto;