Yeni sipariş e-postası iki kez gönderiliyor


25

Magento 1.9.1 kullanıyorum ve yeni bir sipariş oluştururken, ister ön uçtan, ister Yönetici'den, sistem 2 e-posta gönderiyor - ikisi de aynı!

İnternete baktım ve eski olan bir hata buldum ve yorumlamak için belirtilen kodu bulamadım, bu da Paypal siparişleriyle ilgiliydi ve durum böyle değildi.

TÜM uzantıları devre dışı bıraktım ve yine de aynı sorunu yaşadım, bu yüzden bunun bir Uzantı sorunu olmadığından eminim.


1
Bu sorunu çözdün mü? Zaman zaman aynı garip çift sipariş onayını aldım ve onay postaları için de bcc kullandım. Bir müşterinin de iki posta alıp almadığını bilmiyorum, ama umuyorum.
Fox

E-posta adresime kim? Yönetici e-postalarınızdan birine göz atıyor musunuz?
SR_Magento

Aynı sorunu alıyorum (kullanıcı yeni sipariş verdikten sonra iki e-posta alıyor). Aşağıda cevap için emin değilim ve her iki tablo da "core_email_queue" ve "core_email_queue_recipients" boş, bu yüzden benim durumum olmamalı. Lütfen bu konuda bana yardım et.
Abi Sharma,

Abi Sharma, bende aynı sorunu var, yine de, yinelenen e-postalar alıyorum ... sorunu çözdünüz mü? lütfen bana bildirin
Lior Loria

Yanıtlar:


48

Bu sorun, Alıcılar masasında artık kayıt bırakan yeni Magento E-posta Kuyruğu sistemi ile ilgili olmalıdır. Bu senin sorununsa, sana bir düzeltme gönderirim.

Yeni Magento Email Queue sistemi bu iki tabloyu yönetmektedir: core_email_queue ve core_email_queue_recipients . İlki e-posta Mesajlarını ve daha sonra da bu mesajların Alıcılarını işler.

Core_email_queue Magento Email Kuyruk üzerinde e-postalar gönderilir olarak tablo dışarı temizlenir. Bu temizlik, app / code / core / Mage / Core / etc / config.xm l config dosyasında tanımlanmış olan core_email_queue_clean_up adlı bir cron sekmesi işi tarafından gerçekleştirilir . Temizlemeyi yapan kod , Mage_Core_Model_Resource_Email_Queue sınıfındaki removeSentMessages işlevinde tanımlanmıştır :

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

Yukarıdaki kod cron görevi tarafından günde bir kez çalıştırılır.

Ama bu gerçekleşirse core_email_queue_recipients tablo (bağlı olduğu e-posta Alıcıları tutan biri ve core_email_queue tarafından masaya message_id alanda), ile birlikte temizlenmezse core_email_queue içeride yetim kayıtlarını bırakarak masanın (e-posta iletileri tutan bir) Alıcı tablosu ne zaman sonra Mesaj tablosu temizlenir.

Burada açıklanan sorun core_email_queue tablosu (Mesajlar) sıfırlandığında ve bu tablodaki autoincrement message_id alanı 1 olarak ayarlandığında ortaya çıkar .

Çünkü core_email_queue_recipients tablo (Alıcılar) buna göre temizlenmelidir henüz yeni e-postaları Magento E-posta Kuyruğa eklendiğinde, yeni kayıtlar oluşturulur core_email_queue (masanın message_id 1'den tekrar başlayarak) ve aynı zamanda yeni kayıtlar oluşturulur ilgili core_email_queue_recipients bu aynı kimlikleri masanın (1 ile yeniden).

Sorun, bu kimliklerin Alıcı tablosunda yetimlerin kayıtları olarak (önceki e-posta iletilerinden dolayı) bulunabilmesidir. Bu yeni mesajlaşma kimlikleri daha sonra core_email_queue_recipients tablosunun içinde tekrarlanır . Sonunda, farklı e-posta Mesajları, kendi alıcılarına message_id ile bağlanır , ancak aynı zamanda önceki e-postalardan aynı mesaj_id atanan önceki alıcılara da yanlış bağlanırlar .

Bu nedenle, alıcılar verilen bir mesajı göndermek için arandığında, uygun alıcının yanı sıra, başka yanlış alıcılar da ortaya çıkabilir.

Neyse ki bu sorunun düzeltilmesi oldukça kolay.

İhtiyaç duyulan tek şey tüm tekrarlanan mesajlar kimlikleri temizlik olduğunu core_email_queue_recipients masa ve emin Mesaj üzerine silindiğinde o core_email_queue karşılık gelen Alıcıları üzerine silinir aynı zamanda, masanın core_email_queue_recipients masaya.

Bunu başarmanın en iyi yolu, bu kayıtları birbirine bağlayan ve bunları kaskadda silen yabancı bir anahtar oluşturmaktır (ancak bunu yapmadan önce biraz temizlik yapmanız gerekir).

Sorunu çözmek için prosedür budur:

1) core_email_queue_recipients tablosunu artık kayıtlardan ve tekrarlanan mesaj numaralarından temizlemek için aşağıdaki iki SQL sorgusunu yürütün :

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

İlk sorgu yetim kayıtları siler, ikincisi ise artık geçerli olmayan eski kayıtları siler.

2) Basamaktaki Alıcı kayıtları silmek için core_email_queue_recipients tablosunda bir yabancı anahtar oluşturun . Bu yabancı anahtarı oluşturmak için SQL sorgusu:

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

Bu yeni dış anahtarı kullanarak, hiçbir yetim kayıtları bırakılacaktır core_email_queue_recipients temizlerken masanın core_email_queue masa ve yanlış alıcılara hiçbir çoğaltılamaz mesajlar gelecekte gönderilecek.


2
Büyük araştırma ve çalışma düzeltme César sağladı. Bu, Magento ekibi tarafından müşterinin adını ve adresini potansiyel olarak diğer müşterilere göndereceği için verilen büyük bir gözetimdir. Bu sorunun keşfedilmesinden bu yana (hangi) bir yamada / sürümde ele alındığını bilen var mı?
zigojacko

Yukarıdaki çözümü uyguladıktan sonra, aynı Sipariş e-postası sorununu aynı e-posta adresine birden çok kez gönderilmeye devam ediyor. Lütfen yardımcı olabilir misiniz?
aton1004

Her iki tablomun zaten boş olduğunu kontrol ediyorum, bu yüzden bu iki adımı çalıştırmak zorunda mıyım (sorgular) ???
Abi Sharma

Bu soruları nasıl yaptığım ancak yardım almadığım halde .. Yine de iki kez sipariş e-postası alma
Abi Sharma 9

5

Ben de aynı problemi yaşadım. Her sipariş için müşterilerime hem e-posta adresimi hem de e-posta hesabımın posta kutusuna mağaza adresime ayrı bir e-posta göndereceğim.

Magento Yöneticisinde: Sistem> Yapılandırma> Satış E-Postaları> Sipariş

"E-Posta Kopyalama Yöntemi Gönder" e-posta adresini "Ayrı E-Posta" dan "Bcc" ye ayarlıyorum ve şimdi çalışıyor. Şimdi sipariş başına sadece bir e-posta alıyorum.


3
Zaten Bcc yöntemini kullanıyorum, bu yüzden bu benim için sorun değil :(
Christopher Thrower

Bu ayarı zaten kullanıyorum, ancak kullanıcı yeni sipariş verdikten sonra 2 e-posta alıyor.
Abi Sharma,

1

Ben de aynı problemi yaşadım. Benim durumumda bu sorun cron.sh betiğinin kaynak kodundan kaynaklanıyordu .

Hosting sağlayıcım , Magento cron işi için cron.sh ve cron.php scriptlerinin kendi versiyonlarını kullandı .

İ değiştirdiğinde cron.sh komut dosyası cron.php sadece bir kez gönderildiği Magento-Cron-İşe yeni sipariş eMail başlayan senaryo, benim probelm çözüldü.

Belki de sorununun cron.sh veya cron.php betiğinin kodu ile ilgisi vardır .


Merhaba, Zaten Magento cron işi için cron.php script kullanıyoruz, ancak iki kez e-posta alıyorum.
Abi Sharma
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.