Wiadomość e-mail z nowym zamówieniem jest wysyłana dwukrotnie


25

Korzystam z Magento 1.9.1 i podczas tworzenia nowego zamówienia, czy to z interfejsu użytkownika, czy z administratora, system wysyła 2 e-maile - oba te same!

Zajrzałem do sieci i znalazłem błąd, który był stary i nie mogłem znaleźć wspomnianego kodu do skomentowania, wyglądało to tak, jakby miało to związek z zamówieniami Paypal i tak nie jest.

Wyłączyłem WSZYSTKIE rozszerzenia i próbowałem i nadal mam ten sam problem, więc jestem pewien, że to nie problem z rozszerzeniem.


1
Czy rozwiązałeś ten problem? Od czasu do czasu dostaję to samo dziwne podwójne potwierdzenie zamówienia i używam również bcc do maili potwierdzających. Nie wiem, czy klient dostanie również dwie wiadomości, ale nie mam takiej nadziei.
Fox

Do kogo jest adres e-mail? Czy korzystasz z jednego z e-maili administratora?
SR_Magento

Otrzymuję ten sam problem (użytkownik otrzymuje dwa e-maile po złożeniu nowego zamówienia). Nie jestem pewien, czy poniżej Odpowiedź i moje obie tabele „core_email_queue” i „core_email_queue_recipients” są puste, więc myślę, że to nie powinien być mój przypadek. Proszę, pomóż mi z tym.
Abi Sharma

Abi Sharma, mam ten sam problem, wciąż otrzymuję zduplikowane e-maile ... rozwiązałeś problem? daj mi znać
Lior Loria,

Odpowiedzi:


48

Ten problem musi być związany z nowym systemem kolejki e-mail Magento, który pozostawia osierocone rekordy w tabeli adresatów. Jeśli to jest twój problem, przesyłam Ci poprawkę.

Nowy system kolejki e-mail Magento zarządza tymi dwiema tabelami: core_email_queue i core_email_queue_recipients . Pierwszy obsługuje wiadomości e-mail, a drugi adresaci tych wiadomości.

Core_email_queue tabeli oczyszczony jak e-maile na Magento Email kolejki są wysyłane. To czyszczenie jest wykonywane przez zadanie karty cron o nazwie core_email_queue_clean_up , które jest zdefiniowane w pliku konfiguracyjnym app / code / core / Mage / Core / etc / config.xm l. Kod, który wykonuje czyszczenie jest określona na removeSentMessages funkcjonowania w Mage_Core_Model_Resource_Email_Queue klasy:

/**
 * 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;
}

Powyższy kod jest wykonywany raz dziennie przez zadanie cron.

Ale zdarza się, że tabela core_email_queue_recipients (ta, która przechowuje adresatów e-mail, i która jest połączona z tabelą core_email_queue przez pole message_id ), nie jest czyszczona razem z tabelą core_email_queue (ta, która przechowuje wiadomości e-mail), pozostawiając w sobie sieroce rekordy do tej tabeli odbiorców, kiedy tablica wiadomości zostanie wyczyszczona.

Opisany tutaj problem powstaje, gdy tabela core_email_queue (Wiadomości) zostanie zresetowana, a pole auto - przyrostu message_id w tej tabeli zostanie ponownie uruchomione na 1.

Ponieważ tabela core_email_queue_recipients (Odbiorcy) nie została odpowiednio wyczyszczona, po dodaniu nowych wiadomości e-mail do kolejki e-mail Magento, nowe rekordy są tworzone w tabeli core_email_queue (z identyfikatorem wiadomości zaczynającym się od 1), a jednocześnie tworzone są nowe rekordy w tabeli core_email_queue_recipients z tymi samymi identyfikatorami (zaczynając od 1).

Problem polega na tym, że te identyfikatory mogą już istnieć w tabeli Odbiorcy jako rekordy osierocone (z powodu poprzednich wiadomości e-mail). Te nowe identyfikatory wiadomości są następnie powtarzane w tabeli core_email_queue_recipients . W końcu różne wiadomości e-mail są połączone z odpowiadającymi im adresatami przez id_wiadomości , ale są również błędnie powiązane z poprzednimi odbiorcami, którym przypisano ten sam id_danych z poprzednich wiadomości e-mail.

Tak więc, gdy odbiorcy są przeszukiwani, aby wysłać daną wiadomość, oprócz odpowiedniego odbiorcy, mogą pojawić się inni niewłaściwi odbiorcy.

Na szczęście naprawa tego problemu jest łatwa do wykonania.

Wystarczy wyczyścić wszystkie powtarzające się identyfikatory wiadomości w tabeli core_email_queue_recipients i upewnić się, że po usunięciu wiadomości w tabeli core_email_queue , jednocześnie odpowiadający jej odbiorcy zostaną usunięci w tabeli core_email_queue_recipients .

Najlepszym sposobem na osiągnięcie tego jest utworzenie klucza obcego, który łączy te rekordy i usuwa je kaskadowo (ale musisz to zrobić, zanim to zrobisz).

Oto procedura rozwiązania problemu:

1) Wykonaj następujące dwa zapytania SQL, aby wyczyścić tabelę core_email_queue_recipients z rekordów osieroconych i identyfikatorów powtórzonych wiadomości:

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);

Pierwsze zapytanie usuwa osierocone rekordy, a drugie usuwa stare rekordy, które nie są już ważne.

2) Utwórz klucz obcy w tabeli core_email_queue_recipients, aby usunąć rekordy odbiorców w kaskadzie. Zapytanie SQL służące do utworzenia tego klucza obcego to:

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

Dzięki zastosowaniu tego nowego klucza obcego nie zostaną pozostawione żadne osierocone rekordy w tabeli core_email_queue_recipients podczas czyszczenia tabeli core_email_queue_reue , aw przyszłości nie będą wysyłane zduplikowane wiadomości do niewłaściwych odbiorców.


2
Świetne badania i zapewniły poprawkę César. Jest to poważny nadzór ze strony zespołu Magento, ponieważ potencjalnie prześle on nazwę i adres klienta innym klientom. Czy ktoś wie, czy problem został rozwiązany w (której) łatce / wydaniu, odkąd ten problem został wykryty?
zigojacko

Nadal masz problem z wysyłaniem wiadomości e-mail z zamówieniem wiele razy na ten sam adres e-mail po wdrożeniu powyższego rozwiązania. Czy możesz pomóc?
aton1004

Sprawdzam, czy obie tabele są już puste, więc czy muszę uruchomić te dwa kroki (zapytania)?
Abi Sharma

Jakkolwiek wykonałem te zapytania, ale bez pomocy .. Nadal otrzymuję e-mail z zamówieniem dwa razy
Abi Sharma

5

Miałem ten sam problem. Do każdego zamówienia dostawałem e-mail klienta i osobny e-mail na adres mojego sklepu - oba do skrzynki pocztowej mojego konta e-mail.

W Magento Admin: System> Konfiguracja> Sprzedaż e-maili> Zamówienie

Ustawiłem e-mail „Send Order E-Mail Copy Method” z „Seperate E-Mail” na „Bcc” i to działa teraz. Teraz otrzymuję tylko jeden e-mail na zamówienie.


3
Już używam metody Bcc, więc nie jest to dla mnie problem niestety :(
Christopher Thrower

Korzystam już z tego ustawienia, ale użytkownik otrzymuje 2 e-maile po złożeniu nowego zamówienia.
Abi Sharma

1

Miałem ten sam problem. W moim przypadku problem został spowodowany przez kod źródłowy skryptu cron.sh.

Mój dostawca hostingu użył własnych wersji skryptów cron.sh i cron.php dla zadania cron Magento.

Kiedy zmieniłem skrypt cron.sh na skrypt cron.php w celu uruchomienia Magento-Cron-Job, nowa wiadomość e-mail z zamówieniem została wysłana tylko raz, mój problem został rozwiązany.

Być może twój problem ma coś wspólnego z kodem skryptu cron.sh lub cron.php .


Cześć, Już używamy skryptu cron.php do zadania cron Magento, ale otrzymuję e-maile dwa razy.
Abi Sharma
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.