Я вижу странное поведение в одном из наших магазинов: при размещении заказа электронное письмо с подтверждением отправляется в ЦК всем зарегистрированным клиентам, у которых заказ находится в состоянии «обработка». Это происходит независимо от способа оплаты (возможен банковский перевод и кредитная карта) и способа доставки (доступен только стандарт magento flat).
Настройка магазина довольно проста: один веб-сайт / магазин / магазин. Установленные расширения не включают ничего, связанного с заказом или оформлением заказа, кроме расширения поставщика платежных средств кредитной карты.
orders
transactional-mail
order-email
simonthesorcerer
источник
источник
Ответы:
Внимание!
Этот код выполняет следующее: каждый раз, когда magento-cronjob удаляет все отправленные сообщения из таблицы базы данных core_email_queue, он также удаляет всех получателей этих сообщений. Так что, в принципе, он не работает для вас, пока эта задача cronjob не будет запущена хотя бы один раз.
Решение
Я нашел ответ благодаря еще одному вопросу: таблица core_email_queue_recipients не была очищена cronjob. Метод
Mage_Core_Model_Email_Queue::cleanQueue()
вызовыMage_Core_Model_Resource_Email_Queue::removeSentMessages()
, которые довольно просты:В любом случае, этот метод не удаляет старых получателей. Таким образом, как только новое сообщение с message_id n ставится в очередь, все старые получатели с message_id n также получат новое письмо. Вещь, которую я не понимаю: почему основная команда не видела этого и почему это не приводит к большему количеству проблем?
Я написал небольшой модуль, чтобы исправить это. Он использует переопределение класса для
Mage_Core_Model_Resource_Email_Queue
, так что если кто-нибудь может предложить лучшее (на основе событий?) Решение, я был бы рад.Приложение / код / местные / пространство имен / EmailQueueFix / и т.д. / config.xml
Приложение / код / местные / пространство имен / EmailQueueFix / Модель / Resource / Email / Queue.php
приложение / и т.д. / модули / Namespace_EmailQueueFix.xml
источник
Я опубликовал другое исправление, которое не требует установки нового модуля и, возможно, немного чище.
Он просто использует ограничение внешнего ключа для таблицы core_email_queue_recipients для удаления записей получателей в каскаде.
При использовании этого нового внешнего ключа никакие потерянные записи не останутся в таблице core_email_queue_recipients при очистке таблицы core_email_queue , поэтому дублированные сообщения не будут далее отправляться неправильным получателям.
Подробное решение вы можете найти в этом посте: https://magento.stackexchange.com/a/87299/23057.
источник
Это проблема индексов в базе данных. Вы можете восстановить его с помощью инструмента для восстановления базы данных Magento .
http://merch.docs.magento.com/ce/user_guide/magento/database-repair-tool.html
Проблема вызывает у меня много разочарований. В моем случае это произошло из-за обновления версии. Рекомендуется каждый раз, когда вы производите обновление версии, чтобы выполнить чистую установку в другом каталоге и в новой пустой справочной базе данных, затем используйте инструмент, чтобы сравнить, что структура и индексы в вашей базе данных объявлены как в новой пустой справочная база данных. Эта структура - то, что нужно новой версии! Помните, что проблема не в плохих индексах и не может быть решена с помощью повторной индексации. Больше это проблема отсутствия индексов, как я вижу. Всегда сохраняйте резервные копии базы данных перед запуском инструмента!Жаль, что даже если вы переустановите Magento, проверка индекса и структуры базы данных не будет предоставлена в качестве опции, и вы должны будете выполнить описанную выше процедуру. (в моем случае было обновление с версии 1.8 до 1.9).
источник