Saya melihat perilaku aneh di salah satu toko kami: ketika pesanan dilakukan, email konfirmasi dikirim dalam CC ke semua pelanggan terdaftar yang memiliki pesanan dalam "pemrosesan" negara. Itu terjadi terlepas dari metode pembayaran (transfer bank dan kartu kredit tersedia) dan metode pengiriman (hanya standar datar magento yang tersedia).
Pengaturan toko cukup mendasar dengan satu tampilan situs web / toko / toko. Ekstensi yang dipasang tidak menyertakan apa pun yang terkait pesanan atau checkout kecuali ekstensi penyedia pembayaran kartu kredit.
orders
transactional-mail
order-email
simonthesorcerer
sumber
sumber
Jawaban:
Perhatian!
Apa yang dilakukan kode ini adalah: setiap kali magento-cronjob menghapus semua pesan yang dikirim dari tabel database core_email_queue, kode ini juga menghapus semua penerima pesan-pesan ini. Jadi, pada dasarnya, itu tidak bekerja untuk Anda sampai tugas cronjob ini berjalan setidaknya sekali.
Larutan
Saya menemukan jawabannya berkat pertanyaan lain di sini: tabel core_email_queue_recipients tidak dikosongkan oleh cronjob. Metode
Mage_Core_Model_Email_Queue::cleanQueue()
panggilanMage_Core_Model_Resource_Email_Queue::removeSentMessages()
, yang cukup sederhana:Bagaimanapun, metode ini tidak menghapus penerima lama. Dengan demikian, segera setelah pesan baru dengan message_id n di-antri, semua penerima lama dengan message_id n juga akan mendapatkan email baru. Hal yang saya tidak mengerti adalah: mengapa tim inti tidak melihat ini, dan mengapa ini tidak menyebabkan lebih banyak masalah?
Saya menulis modul kecil untuk memperbaikinya. Ini menggunakan class override untuk
Mage_Core_Model_Resource_Email_Queue
, jadi jika ada yang bisa menyarankan solusi yang lebih baik (berbasis acara?), Saya akan senang.app / code / local / Namespace / EmailQueueFix / etc / config.xml
app / code / local / Namespace / EmailQueueFix / Model / Sumber Daya / Email / Queue.php
app / etc / modules / Namespace_EmailQueueFix.xml
sumber
Saya telah memposting perbaikan berbeda yang tidak perlu menginstal modul baru, dan mungkin sedikit lebih bersih.
Itu hanya menggunakan batasan kunci asing pada tabel core_email_queue_recipients untuk menghapus catatan Penerima pada kaskade.
Dengan menggunakan kunci asing baru ini, tidak ada catatan anak yatim yang akan ditinggalkan di tabel core_email_queue_recipients saat membersihkan tabel core_email_queue , sehingga tidak ada pesan duplikat yang akan dikirim lebih lanjut ke penerima yang salah.
Anda dapat menemukan solusi terperinci pada posting ini: https://magento.stackexchange.com/a/87299/23057
sumber
Ini adalah masalah indeks dalam basis data. Anda dapat memperbaikinya dengan alat perbaikan basis data Magento .
http://merch.docs.magento.com/ce/user_guide/magento/database-repair-tool.html
Masalahnya menyebabkan saya sangat frustrasi. Dalam kasus saya itu berasal dari peningkatan versi. Ini adalah praktik yang baik setiap kali Anda melakukan peningkatan versi untuk melakukan instalasi bersih di direktori lain dan dalam database referensi kosong baru dan kemudian menggunakan alat untuk membandingkan bahwa struktur dan indeks dalam database Anda dinyatakan sebagai dalam kosong baru database referensi. Struktur ini adalah apa yang dibutuhkan versi baru! Sadarilah bahwa masalahnya bukan indeks yang buruk dan tidak dapat diselesaikan dengan pengindeksan ulang. Lebih banyak adalah masalah indeks yang hilang seperti yang saya lihat. Selalu simpan salinan cadangan dari basis data sebelum menjalankan alat!Sangat disayangkan bahwa bahkan jika Anda menginstal ulang Magento, indeks dan verifikasi struktur database tidak diberikan sebagai opsi dan Anda harus mengikuti prosedur di atas. (dalam kasus saya ditingkatkan dari versi 1.8 ke 1.9).
sumber