Ich sehe ein seltsames Verhalten in einem unserer Shops: Wenn eine Bestellung aufgegeben wird, wird die Bestätigungs-E-Mail in CC an alle registrierten Kunden gesendet, die eine Bestellung im Status "Bearbeitung" haben. Dies geschieht unabhängig von der Zahlungsmethode (Banküberweisung und Kreditkarte sind verfügbar) und der Versandmethode (nur Magento Flat Standard verfügbar).
Das Shop-Setup ist ziemlich einfach mit einer Website / Store / Store-Ansicht. Installierte Erweiterungen enthalten nichts Bestell- oder Checkout-bezogenes außer der Erweiterung des Zahlungsanbieters der Kreditkarte.
orders
transactional-mail
order-email
simonthesorcerer
quelle
quelle
Antworten:
Beachtung!
Dieser Code bewirkt Folgendes: Jedes Mal, wenn der Magento-Cronjob alle gesendeten Nachrichten aus der Datenbanktabelle core_email_queue entfernt, werden auch alle Empfänger dieser Nachrichten entfernt. Im Grunde funktioniert es also nicht für Sie, bis diese Cronjob-Aufgabe mindestens einmal ausgeführt wurde.
Lösung
Ich fand die Antwort dank einer anderen Frage hier: Die Tabelle core_email_queue_recipients wurde vom Cronjob nicht geleert. Die Methode
Mage_Core_Model_Email_Queue::cleanQueue()
ruft aufMage_Core_Model_Resource_Email_Queue::removeSentMessages()
, was ziemlich einfach ist:Auf jeden Fall werden bei dieser Methode die alten Empfänger nicht entfernt. Sobald eine neue Nachricht mit message_id n in die Warteschlange gestellt wird, erhalten alle alten Empfänger mit message_id n auch die neue E-Mail. Was ich nicht verstehe ist: Warum hat das Kernteam das nicht gesehen und warum führt dies nicht zu weiteren Problemen?
Ich habe ein kleines Modul geschrieben, um dies zu beheben. Es wird eine Klassenüberschreibung verwendet.
Mage_Core_Model_Resource_Email_Queue
Wenn also jemand eine bessere (ereignisbasierte?) Lösung vorschlagen kann, würde ich mich freuen.app / code / local / Namespace / EmailQueueFix / etc / config.xml
app / code / local / Namespace / EmailQueueFix / Model / Resource / Email / Queue.php
app / etc / modules / Namespace_EmailQueueFix.xml
quelle
Ich habe ein anderes Update veröffentlicht, für das kein neues Modul installiert werden muss und das wahrscheinlich etwas sauberer ist.
Es wird lediglich eine Fremdschlüsseleinschränkung für die Tabelle core_email_queue_recipients verwendet , um Empfängerdatensätze in der Kaskade zu löschen.
Bei Verwendung dieses neuen Fremdschlüssels verbleiben beim Bereinigen der Tabelle core_email_queue_recipients keine verwaisten Datensätze in der Tabelle core_email_queue_recipients , sodass keine doppelten Nachrichten an falsche Empfänger gesendet werden.
Die detaillierte Lösung finden Sie in diesem Beitrag: https://magento.stackexchange.com/a/87299/23057
quelle
Dies ist ein Problem der Indizes in der Datenbank. Sie können es mit dem Magento-Datenbankreparatur-Tool reparieren .
http://merch.docs.magento.com/ce/user_guide/magento/database-repair-tool.html
Das Problem macht mich sehr frustriert. In meinem Fall stammt es aus dem Versions-Upgrade. Es wird empfohlen, jedes Mal, wenn Sie ein Versions-Upgrade durchführen, eine Neuinstallation in einem anderen Verzeichnis und in einer neuen leeren Referenzdatenbank durchzuführen und dann mit dem Tool zu vergleichen, dass die Struktur und die Indizes in Ihrer Datenbank als in der neuen leeren deklariert sind Referenzdatenbank. Diese Struktur braucht die neue Version! Beachten Sie, dass das Problem nicht aus schlechten Indizes besteht und nicht durch eine erneute Indizierung gelöst werden kann. Mehr ist ein Problem der fehlenden Indizes, wie ich es sehe. Bewahren Sie immer Sicherungskopien der Datenbank auf, bevor Sie das Tool ausführen!Es ist schade, dass selbst wenn Sie Magento neu installieren, die Index- und Strukturüberprüfung der Datenbank nicht als Option angeboten wird und Sie das oben beschriebene Verfahren befolgen müssen. (In meinem Fall wurde ein Upgrade von Version 1.8 auf 1.9 durchgeführt).
quelle