Neue Bestell-E-Mail wird zweimal gesendet


25

Ich verwende Magento 1.9.1 und beim Erstellen einer neuen Bestellung, egal ob vom Frontend oder vom Administrator, sendet das System 2 E-Mails - beide gleich!

Ich habe im Internet nach einem alten Fehler gesucht und konnte den zum Auskommentieren erwähnten Code nicht finden. Es sah auch so aus, als hätte das mit Paypal-Bestellungen zu tun, und das ist nicht der Fall.

Ich habe ALLE Erweiterungen deaktiviert und habe versucht, dasselbe Problem zu beheben, daher bin ich sicher, dass es sich nicht um ein Erweiterungsproblem handelt.


1
Haben Sie dieses Problem gelöst? Ich habe von Zeit zu Zeit die seltsame doppelte Auftragsbestätigung erhalten und benutze bcc auch für Bestätigungs-Mails. Ich weiß nicht, ob ein Kunde auch zwei Mails bekommt, aber das hoffe ich nicht.
Fox

An wen ist die E-Mail adressiert? Checken Sie mit einer Ihrer Administrator-E-Mails aus?
SR_Magento

Ich erhalte das gleiche Problem (Benutzer erhält zwei E-Mails, nachdem er eine neue Bestellung aufgegeben hat). Ich bin mir für die Antwort unten nicht sicher und meine beiden Tabellen "core_email_queue" und "core_email_queue_recipients" sind leer, daher denke ich, dass dies nicht mein Fall sein sollte. Bitte helfen Sie mir dabei.
Abi Sharma

Abi Sharma, ich habe das gleiche Problem, trotzdem erhalte ich doppelte E-Mails ... hast du das Problem gelöst? Bitte lassen Sie es mich wissen
Lior Loria

Antworten:


48

Dieses Problem muss mit dem neuen Magento Email Queue-System zusammenhängen, das verwaiste Datensätze in der Empfänger-Tabelle hinterlässt. Wenn dies Ihr Problem ist, sende ich Ihnen eine Lösung.

Das neue Magento Email Queue-System verwaltet diese beiden Tabellen: core_email_queue und core_email_queue_recipients . Die erste verarbeitet die E-Mail-Nachrichten und die zweite die Empfänger dieser Nachrichten.

Die Tabelle core_email_queue wird gelöscht , wenn E-Mails in der Magento-E-Mail-Warteschlange gesendet werden. Diese Bereinigung wird von einem Cron-Tab-Job namens core_email_queue_clean_up ausgeführt , der in der Konfigurationsdatei app / code / core / Mage / Core / etc / config.xml definiert ist . Der Code, der die Bereinigung ausführt, wird in der Funktion removeSentMessages in der Klasse Mage_Core_Model_Resource_Email_Queue definiert :

/**
 * Remove already sent messages
 *
 * @return Mage_Core_Model_Resource_Email_Queue
 */
public function removeSentMessages()
{
    $this->_getWriteAdapter()->delete($this->getMainTable(), 'processed_at IS NOT NULL');
    return $this;
}

Der obige Code wird einmal täglich von der Cron-Task ausgeführt.

Aber es kommt vor, dass die core_email_queue_recipients Tabelle (die, die E - Mail - Empfänger hält, und die mit der verbunden ist core_email_queue durch die Tabelle message_id Feld), nicht zusammen mit der gereinigt core_email_queue Tabelle (die, die E - Mail - Nachrichten hält), so dass verwaiste Aufzeichnungen innen diese Empfängertabelle, wenn dann Nachrichtentabelle bereinigt wird.

Das hier beschriebene Problem tritt auf, wenn die Tabelle core_email_queue (Messages) zurückgesetzt und das Feld message_id für die automatische Inkrementierung in dieser Tabelle auf 1 zurückgesetzt wird.

Da die Tabelle core_email_queue_recipients (Recipients) nicht entsprechend bereinigt wurde, werden beim Hinzufügen neuer E-Mails zur Magento-E-Mail-Warteschlange neue Datensätze in der Tabelle core_email_queue erstellt (wobei message_id wieder bei 1 beginnt) und gleichzeitig neue Datensätze erstellt in der Tabelle core_email_queue_recipients mit denselben IDs (erneut beginnend mit 1).

Das Problem ist, dass diese IDs möglicherweise bereits in der Empfängertabelle als verwaiste Datensätze vorhanden sind (aufgrund früherer E-Mail-Nachrichten). Diese neuen Nachrichten-IDs werden dann in der Tabelle core_email_queue_recipients wiederholt . Am Ende werden verschiedene E-Mail-Nachrichten durch die message_id mit den entsprechenden Empfängern verknüpft , sie werden jedoch auch fälschlicherweise mit früheren Empfängern verknüpft, denen dieselbe message_id aus früheren E-Mails zugewiesen wurde .

Wenn also nach Empfängern gesucht wird, um eine bestimmte Nachricht zu senden, können neben dem geeigneten Empfänger auch andere falsche Empfänger auftreten.

Glücklicherweise ist die Behebung dieses Problems einfach durchzuführen.

Sie müssen lediglich alle wiederholten Nachrichten-IDs in der Tabelle core_email_queue_recipients bereinigen und sicherstellen, dass beim Löschen einer Nachricht in der Tabelle core_email_queue gleichzeitig die entsprechenden Empfänger in der Tabelle core_email_queue_recipients gelöscht werden.

Der beste Weg, dies zu erreichen, besteht darin, einen Fremdschlüssel zu erstellen, der diese Datensätze verknüpft und sie in einer Kaskade löscht (Sie müssen jedoch eine Bereinigung vornehmen, bevor Sie dies tun können).

So beheben Sie das Problem:

1) Führen Sie die folgenden zwei SQL-Abfragen aus, um die Tabelle core_email_queue_recipients von verwaisten Datensätzen und IDs wiederholter Nachrichten zu bereinigen :

DELETE FROM core_email_queue_recipients WHERE message_id NOT IN (SELECT message_id FROM core_email_queue);
DELETE FROM core_email_queue_recipients WHERE recipient_id < (SELECT recipient_id FROM (SELECT recipient_id FROM core_email_queue_recipients ORDER BY message_id ASC, recipient_id DESC LIMIT 1) AS r);

Die erste Abfrage löscht verwaiste Datensätze, und die zweite Abfrage löscht alte Datensätze, die nicht mehr gültig sind.

2) Erstellen Sie einen Fremdschlüssel in der Tabelle core_email_queue_recipients , um Empfängerdatensätze in der Kaskade zu löschen. Die SQL-Abfrage zum Erstellen dieses Fremdschlüssels lautet:

ALTER TABLE core_email_queue_recipients ADD FOREIGN KEY(message_id) REFERENCES core_email_queue(message_id) ON DELETE CASCADE;

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 , und es werden in Zukunft keine doppelten Nachrichten an falsche Empfänger gesendet.


2
Tolle Recherche und funktionierender Fix César. Dies ist eine wichtige Aufgabe des Magento-Teams, da hierdurch möglicherweise der Name und die Adresse des Kunden an andere Kunden gesendet werden. Weiß jemand, ob dies in einem (welchen) Patch / Release behoben wurde, seit dieses Problem entdeckt wurde?
Zigojacko

Das Problem, dass dieselbe Bestell-E-Mail nach der Implementierung der obigen Lösung mehrmals an dieselbe E-Mail-Adresse gesendet wird, besteht weiterhin. Können Sie uns bitte helfen?
Aton1004

Ich überprüfe, dass meine beiden Tabellen bereits leer sind. Muss ich diese beiden Schritte (Abfragen) ausführen?
Abi Sharma

Wie auch immer ich diese Abfragen durchgeführt habe, aber keine Hilfe. Immer noch zweimal
Bestell-

5

Ich hatte das gleiche problem Für jede Bestellung erhalte ich die Kunden-E-Mail und eine separate E-Mail an meine Geschäftsadresse - beide in der Mailbox meines Geschäfts-E-Mail-Kontos.

In Magento Admin: System> Konfiguration> Verkaufs-E-Mails> Bestellen

Ich habe die E-Mail-Adresse "Send Order E-Mail Copy Method" von "Seperate E-Mail" auf "Bcc" gesetzt und sie funktioniert jetzt. Ich erhalte jetzt nur eine E-Mail pro Bestellung.


3
Ich verwende bereits die Bcc-Methode, daher ist dies für mich leider kein Problem :(
Christopher Thrower

Ich verwende diese Einstellung auch bereits, aber der Benutzer erhält 2 E-Mails, nachdem er eine neue Bestellung aufgegeben hat.
Abi Sharma

1

Ich hatte das gleiche problem In meinem Fall wurde das Problem durch den Quellcode des Skripts cron.sh verursacht .

Mein Hosting-Provider hat seine eigenen Versionen der Skripte cron.sh und cron.php für den Magento-Cron-Job verwendet.

Als ich zum Starten des Magento-Cron-Jobs vom cron.sh- Skript zum cron.php- Skript wechselte, wurde die neue Bestell -eMail nur einmal verschickt, mein Problem war gelöst.

Möglicherweise hat Ihr Problem etwas mit dem Code des Skripts cron.sh oder cron.php zu tun .


Hallo, wir verwenden bereits das cron.php-Skript für Magento-Cron-Jobs, aber ich erhalte zweimal E-Mails.
Abi Sharma
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.