Email pesanan baru dikirim dua kali

25

Saya menggunakan Magento 1.9.1 dan ketika membuat pesanan baru, apakah itu dari frontend atau Admin, sistem mengirimkan 2 email - keduanya sama!

Saya telah mencari di internet dan menemukan bug yang sudah lama dan saya tidak dapat menemukan kode yang disebutkan untuk berkomentar, itu juga sepertinya berkaitan dengan pesanan Paypal dan ini bukan masalahnya.

Saya telah menonaktifkan SEMUA ekstensi dan mencoba dan masih memiliki masalah yang sama, jadi saya yakin itu bukan masalah Ekstensi.

Christopher Thrower
sumber
1
Sudahkah Anda memecahkan masalah ini? Saya mendapat konfirmasi pesanan ganda aneh yang sama dari waktu ke waktu dan menggunakan bcc untuk surat konfirmasi juga. Tidak tahu apakah pelanggan mendapat dua surat juga, tapi saya tidak berharap begitu.
Fox
Kepada siapa email itu ditujukan? Apakah Anda memeriksa dengan salah satu email admin Anda?
SR_Magento
Saya mendapatkan masalah yang sama (pengguna menerima dua email setelah melakukan pemesanan baru). Saya tidak yakin untuk jawaban di bawah ini dan kedua tabel saya "core_email_queue" dan "core_email_queue_recipients" kosong, jadi saya pikir ini seharusnya bukan kasus saya. Tolong bantu saya dalam hal ini.
Abi Sharma
Abi Sharma, saya memiliki masalah yang sama, masih, saya mendapatkan email rangkap ... apakah Anda menyelesaikan masalah ini? tolong beri tahu saya
Lior Loria

Jawaban:

48

Masalah ini harus terkait dengan sistem Antrian Email Magento baru, yang meninggalkan catatan anak yatim di tabel Penerima. Jika ini adalah masalah Anda, saya mengirimi Anda perbaikan.

Sistem Antrian Email Magento baru mengelola dua tabel ini: core_email_queue dan core_email_queue_recipients . Yang pertama menangani Pesan email, dan yang berikutnya, Penerima pesan-pesan ini.

The core_email_queue meja dibersihkan sebagai email di Magento Email Queue dikirim. Pembersihan ini dilakukan oleh pekerjaan tab cron yang disebut core_email_queue_clean_up , yang didefinisikan di dalam aplikasi / kode / core / Mage / Core / etc / config.xm l file config. Kode yang melakukan pembersihan didefinisikan pada fungsi removeSentMessages di kelas Mage_Core_Model_Resource_Email_Queue :

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

Kode di atas dijalankan sekali sehari oleh tugas cron.

Tapi kebetulan bahwa tabel core_email_queue_recipients (yang memegang Penerima email, dan yang ditautkan ke tabel core_email_queue oleh bidang message_id ), tidak dibersihkan bersama-sama dengan tabel core_email_queue (yang memegang pesan email), meninggalkan catatan yatim piatu di dalam, bahwa tabel Penerima ketika kemudian tabel Pesan dibersihkan.

Masalah yang dijelaskan di sini muncul ketika tabel core_email_queue (Pesan) di-reset dan bidang message_id autoincrement pada tabel ini diinisiasi ulang ke 1.

Karena tabel core_email_queue_recipients (Penerima) belum dibersihkan, ketika email baru ditambahkan ke Antrian Email Magento, catatan baru dibuat pada tabel core_email_queue (dengan message_id mulai lagi dari 1), dan pada saat yang sama catatan baru dibuat pada tabel core_email_queue_recipients dengan id yang sama (mulai dari 1).

Masalahnya adalah id ini mungkin sudah ada di tabel Penerima sebagai catatan anak yatim (karena pesan email sebelumnya). Id mesages baru ini kemudian diulang di dalam tabel core_email_queue_recipients . Pada akhirnya, berbagai pesan email ditautkan ke Penerima mereka yang sesuai oleh message_id , tetapi mereka juga secara keliru tertaut ke penerima sebelumnya yang diberi message_id yang sama dari email sebelumnya.

Dengan demikian, ketika penerima dicari untuk mengirim pesan yang diberikan, selain penerima yang sesuai, penerima yang salah lainnya dapat muncul.

Untungnya perbaikan untuk masalah ini mudah dilakukan.

Yang diperlukan hanyalah membersihkan semua id pesan yang diulang pada tabel core_email_queue_recipients , dan memastikan bahwa ketika sebuah Pesan dihapus pada tabel core_email_queue , pada saat yang sama Penerima terkaitnya akan dihapus pada tabel core_email_queue_recipients .

Cara terbaik untuk mencapai ini adalah dengan membuat kunci asing yang menautkan catatan ini dan menghapusnya pada kaskade (tetapi Anda perlu melakukan pembersihan sebelum Anda bisa melakukannya).

Ini adalah prosedur untuk memperbaiki masalah:

1) Jalankan dua query SQL berikut untuk membersihkan tabel core_email_queue_recipients dari catatan yatim dan id pesan berulang:

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

Kueri pertama menghapus catatan yatim, dan yang kedua menghapus catatan lama yang tidak lagi valid.

2) Buat kunci asing pada tabel core_email_queue_recipients untuk menghapus catatan Penerima pada kaskade. Permintaan SQL untuk membuat kunci asing ini adalah:

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

Dengan menggunakan kunci asing baru ini, tidak ada catatan yatim piatu yang akan ditinggalkan di tabel core_email_queue_recipients saat membersihkan tabel core_email_queue , dan tidak ada pesan yang digandakan ke penerima yang salah yang akan dikirim di masa mendatang.

César Revert-Gomar
sumber
2
Penelitian luar biasa dan memberikan perbaikan pekerjaan Cesar. Ini adalah pengawasan besar oleh tim Magento mengingat ini berpotensi akan mengirim nama dan alamat pelanggan ke pelanggan lain. Adakah yang tahu jika ini telah dialamatkan pada (yang) tambalan sama sekali sejak masalah ini ditemukan?
zigojacko
Masih menghadapi masalah email Order yang sama yang dikirim beberapa kali ke alamat email yang sama setelah menerapkan solusi di atas. Bisakah Anda membantu ??
aton1004
Saya memeriksa kedua tabel saya sudah kosong, jadi Apakah saya harus menjalankan dua langkah ini (pertanyaan) ???
Abi Sharma
Bagaimanapun saya telah melakukan pertanyaan ini tetapi tidak membantu .. Masih mendapatkan email pesanan dua kali
Abi Sharma
5

Saya memiliki masalah yang sama. Untuk setiap pesanan, saya akan menerima email pelanggan dan email terpisah ke alamat toko saya - keduanya ke kotak surat akun email toko saya.

Di Magento Admin: Sistem> Konfigurasi> Email Penjualan> Pesanan

Saya telah mengatur email "Kirim Pesanan Metode Salin Email" dari "Email Terpisah" ke "Bcc", dan sekarang berfungsi. Saya hanya menerima satu email per pesanan sekarang.

rampok
sumber
3
Saya sudah menggunakan metode Bcc sehingga itu bukan masalah bagi saya sayangnya :(
Christopher Thrower
Saya juga sudah menggunakan pengaturan ini, tetapi pengguna mendapatkan 2 email setelah melakukan pemesanan baru.
Abi Sharma
1

Saya memiliki masalah yang sama. Dalam kasus saya masalahnya disebabkan oleh kode sumber skrip cron.sh.

Penyedia hosting saya menggunakan versinya sendiri dari skrip cron.sh dan cron.php untuk cron-job Magento.

Ketika saya mengubah dari skrip cron.sh ke skrip cron.php untuk memulai Magento-Cron-Job, pesanan baru eMail hanya dikirim sekali, masalah saya terpecahkan.

Mungkin masalah Anda ada hubungannya dengan kode skrip cron.sh atau cron.php .

Periksa ulang
sumber
Hai, Kami sudah menggunakan skrip cron.php untuk pekerjaan cron Magento tapi saya mendapat email dua kali.
Abi Sharma