Ich benutze Magento 1.9.1.0.
Im Backend habe ich vier verschiedene Empfänger eingerichtet, die jedes Mal, wenn ein Kunde eine Bestellung aufgibt, eine E-Mail mit Verkaufskopien erhalten. Das Problem ist, dass jeder Empfänger, den ich in das Backend eingefügt habe, mehrmals dieselbe Kopien-E-Mail erhält.
Hat jemand dieses Problem schon einmal erlebt?
magento-1.9
sales
order-email
gianis6
quelle
quelle
$mailer = new Zend_Mail('utf-8'); $mailer->send();
) oder verwenden Sie SMTP oder ein Modul eines Drittanbieters?Antworten:
TL; DR: Verwenden Sie die Option "Bcc" anstelle der Option "Separate E-Mail", um E-Mails zu bestellen, da letztere in Magento 1.9.1 ernsthaft beschädigt sind. Ihre Kopien-E-Mail-Adressen werden dem Kunden angezeigt.
Es ist etwas grundlegend gebrochen, wie Magento damit umgeht. Wenn Sie mehrere (durch Kommas getrennte) E-Mail-Adressen haben, die unter "E-Mail-Kopie der Bestellung senden an" angegeben sind und "E-Mail-Kopiermethode für Bestellung senden" auf "Separate E-Mail" eingestellt ist, erstellt Magento mehrere separate Nachrichten in der
core_email_queue
Tabelle - eine für den Kunden und eine für den Kunden für jeden Kopierempfänger.(Beispiel: Kopieren auf [email protected], [email protected])
Das ist in Ordnung - es wurden separate Nachrichten für jeden Empfänger erstellt.
Die tatsächlichen Empfänger werden jedoch in einer anderen Tabelle gespeichert
core_email_queue_recipients
. Hier liegt das Problem. Anstatt jeder Nachricht einen Empfänger zuzuweisen, geschieht Folgendes:Es weist der ersten Nachricht 1 Empfänger zu, der zweiten 2, der dritten 3 Empfänger. Je mehr Empfänger Sie dem Feld Kopieren hinzugefügt haben, desto mehr E-Mails erhält die letzte E-Mail in dieser Liste.
Was hätte hinzugefügt werden sollen,
core_email_queue_recipients
ist Folgendes:Schlimmer ist, dass die E-Mails nicht mehr "getrennt" sind, da die an den Kunden gesendete E-Mail im Feld "An" eine Liste aller anderen E-Mail-Adressen enthält (die separat und ohne Kenntnis des Kunden hätten gesendet werden müssen) ) - damit dem Kunden Ihre gesamte Kopierliste zur Verfügung stellen.
Um dieses Problem Fixierung erfordert zwingende und im wesentlichen die gebrochene Kopie Logik in Umschreiben
Mage/Sales/Model/Order::queueNewOrderEmail()
sowieMage/Core/Model/Email/Queue
, was zu tun ist nicht trivial.Eine kurzfristige Lösung besteht einfach darin, die Kopiermethode von "Separate E-Mail" in "Bcc" zu ändern. Diese Option funktioniert wie erwartet und generiert nur eine E-Mail.
quelle
Magento vergleicht Warteschlangeneinträge aus der Datenbank und löscht Empfänger nur, wenn Ergebnisse gefunden wurden.
In meinem Fall war message_body_hash anders, da Magento eine globale Variable ($ taxIter) in tax / order / tax.phtml verwendet , die bei jedem Aufruf dieser Vorlage erhöht wird.
Versuchen Sie einfach, diese Zeile zu Ihrer local.xml hinzuzufügen
Kopieren Sie die Vorlage "tax / order / tax.phtml" nach "tax / order / tax-email.phtml" und ändern Sie:
zu:
Versuchen Sie andernfalls, den Prozess zu verstehen, den ich zu erklären versucht habe, und finden Sie hoffentlich den Unterschied.
Magento stellt zwei Nachrichten in "core_email_queue" in die Warteschlange, wenn Ihre Konfiguration für "Send Order Email Copy Method" auf "Separate Email" eingestellt ist. Die erste Mail ist für bestimmte Empfänger im Backend. Die zweite Mail erhält Ihren Kunden.
Die Nachrichten werden in Mage_Core_Model_Email_Template # send () gespeichert .
Diese Methode wird zweimal ausgelöst und fährt mit demselben Warteschlangenmodell (Mage_Core_Model_Email_Queue $ emailQueue) fort, einschließlich der Variablen ($ _recipients) des ersten Laufs.
In dieser Zeile wird die E-Mail-Adresse des Kunden zum vorhandenen Array _recipients hinzugefügt.
Magento versucht, das Warteschlangenmodell in der Datenbank zu speichern und prüft, ob E-Mail bereits zur Warteschlange für angeforderte Empfänger hinzugefügt wurde.
Mage_Core_Model_Resource_Email_Queue # wasEmailQueued
Wenn ein Warteschlangeneintrag in core_email_queue mit denselben Daten (entity_id, entity_type, event_type und message_body_hash) gefunden wird, wird eine Methode zum Löschen von Empfängern aufgerufen. Ich brauchte einige Zeit, um es herauszufinden.
quelle
Für alle, die immer noch unter diesem Problem leiden, habe ich die gleichen Probleme damit gehabt, die @solarissmoke aufgedeckt hat.
Ich habe ein sehr einfaches benutzerdefiniertes Modul geschrieben, um dieses Problem zu beheben. Es funktioniert wie erwartet, auch mit der Kopiermethode "Separate E-Mail". Sie können es hier überprüfen und klonen: https://github.com/UQPPA/FixSeparateCopyMethod
Das Problem besteht darin, dass Mage_Core_Model_Email_Queue mehrmals gespeichert wird (wenn Empfängerdaten gespeichert werden, @see \ Mage_Core_Model_Email_Queue :: _ afterSave-Methode), ohne die Empfänger durch verschiedene Speicherungen zu löschen. Wenn also ein neuer Empfänger hinzugefügt wird, werden nicht nur aktuelle Empfänger gespeichert, sondern auch auch alte.
quelle
Dieses Problem kann mit dem neuen Magento Email Queue-System zusammenhängen, das verwaiste Datensätze in der Empfängertabelle hinterlässt.
Wenn dies Ihr Problem ist, habe ich einen Fix (durch Hinzufügen eines Fremdschlüssels) für diesen Beitrag gesendet: https://magento.stackexchange.com/a/87299/23057
quelle
In unserem Fall erstellen wir Ordnung aus cron. Dies bedeutet, dass wir bereits Anführungszeichen mit API erstellt haben und cron ausgeführt haben, um diese Anführungszeichen in Reihenfolge umzuwandeln. 4/10 E-Mails sind jedoch doppelt vorhanden. Was kann der Grund sein? Ich habe die gesamte Konfiguration überprüft. Wir verwenden auch den ao_scheduler und senden eine E-Mail. Cron wird jede Minute ausgeführt. Ist dies der Schuldige? Ich meine, kann es möglich sein, dass mehrere Prozesse gleichzeitig ausgeführt werden?
quelle