Новий електронний лист із замовленням надсилається двічі


25

Я використовую Magento 1.9.1 і коли створюю нове замовлення, будь то з фронтену чи адміністратора, система надсилає 2 електронні листи - обидва однакові!

Я подивився в мережі і виявив помилку, яка була давньою, і я не зміг знайти згаданий код, щоб прокоментувати, це також виглядало так, як це стосується замовлень Paypal, і це не так.

Я вимкнув ВСІ розширення і спробував і все-таки мав таку ж проблему, тому я впевнений, що це не проблема розширення.


1
Ви вирішили цю проблему? Час від часу я отримував таке ж дивне підтвердження подвійного замовлення і також використовую Bcc для листів підтвердження. Не знаю, чи отримає клієнт також дві пошти, але я не сподіваюся.
Фокс

До кого адресовано електронний лист? Ви перевіряєте один із своїх електронних листів адміністратора?
SR_Magento

Я отримую ту саму проблему (користувач отримує два електронні листи після розміщення нового замовлення). Я не впевнений у відповіді нижче, і мої обидві таблиці "core_email_queue" та "core_email_queue_recipients" порожні, тому я думаю, що це не повинно бути моєю справою. Будь ласка, допоможіть мені з цього приводу.
Абі Шарма

Абі Шарма, у мене те саме питання, я все одно отримую копії електронних листів ... Ви вирішили цю проблему? будь ласка, повідомте мене
Lior Loria

Відповіді:


48

Ця проблема повинна бути пов’язана з новою системою черги електронної пошти Magento, яка залишає сиротні записи в таблиці одержувачів. Якщо це ваша проблема, я надсилаю вам виправлення.

Нова система черги електронної пошти Magento управляє цими двома таблицями: core_email_queue та core_email_queue_recipients . Перша обробляє повідомлення електронної пошти, а пізніша - отримувачі цих повідомлень.

Таблиця core_email_queue видаляється , коли електронні листи в черзі електронної пошти Magento надсилаються. Це очищення виконується за допомогою вкладки cron, що називається core_email_queue_clean_up , яка визначена у файлі конфігурації програми / коду / ядра / Mage / Core / тощо / config.xm . Код , який виконує очистку , певні на removeSentMessages функціонувати в 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;
}

Вищевказаний код виконується один раз на день завданням cron.

Але трапляється так, що core_email_queue_recipients стіл (той , який тримає електронну пошту одержувач, і що пов'язано з core_email_queue столу в message_id поля) не прибирається разом з core_email_queue столу (той , який містить повідомлення електронної пошти), залишаючи сироту запис всередині що таблиця отримувачів, коли тоді таблиця повідомлень очищається.

Проблема, описана тут, виникає, коли скидається таблиця core_email_queue (Повідомлення) і поле автоінкрементування message_id у цій таблиці повторюється до 1.

Оскільки core_email_queue_recipients таблиця (Одержувачі) ні очищений відповідним чином , коли нові повідомлення електронної пошти будуть додані в Magento електронної пошти черзі, нові записи створюються на core_email_queue столі (з message_id знову , починаючи з 1), і в той же час створюються нові записи в таблиці core_email_queue_recipients з цими тими ж ідентифікаторами (починаючи знову з 1).

Проблема полягає в тому, що ці ідентифікатори вже можуть існувати в таблиці одержувачів як записи-сироти (через попередні повідомлення електронної пошти). Ці нові ідентифікатори ідентифікаторів повторюються в таблиці core_email_queue_recipients . Зрештою, різні повідомлення електронної пошти пов'язані з відповідними отримувачами message_id , але вони також неправильно пов'язані з попередніми одержувачами, яким було призначено те саме message_id з попередніх електронних листів.

Таким чином, під час пошуку одержувачів для надсилання певного повідомлення, окрім відповідного одержувача, можуть виникати й інші неправильні одержувачі.

На щастя, виправлення цього питання легко виконати.

Все, що потрібно, - це очищення всіх ідентифікаторів повторних повідомлень у таблиці core_email_queue_recipients та переконання, що коли повідомлення видаляється з таблиці core_email_queue , одночасно його відповідні Одержувачі видаляються з таблиці core_email_queue_recipients .

Найкращий спосіб досягти цього - створити зовнішній ключ, який пов'язує ці записи та видаляє їх на каскаді (але перед цим вам потрібно зробити чистку).

Це процедура вирішення проблеми:

1) Виконайте такі два запити SQL, щоб очистити таблицю core_email_queue_recipients від записів сиріт та ідентифікаторів повторних повідомлень:

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

Перший запит видаляє осиротілі записи, а другий видаляє старі записи, які вже не є дійсними.

2) Створіть зовнішній ключ у таблиці core_email_queue_recipients, щоб видалити записи одержувачів на каскаді. SQL-запит для створення цього зовнішнього ключа:

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

За допомогою цього нового зовнішнього ключа, що не безгоспних записі не будуть залишені на core_email_queue_recipients столі при чищенні core_email_queue столу, і не дубльовані повідомлень в неправильні одержувач будуть відправлені в майбутньому.


2
Прекрасні дослідження та забезпечені робочим виправленням César. Це великий нагляд з боку команди Magento, враховуючи, що це потенційно може надіслати ім’я та адресу замовника іншим клієнтам. Хтось знає, чи це взагалі було вирішено в (який) патч / реліз з моменту виявлення цієї проблеми?
zigojacko

Ви все ще стикаєтеся з тим, що той самий електронний лист із замовленням надсилається кілька разів на одну і ту ж електронну адресу після впровадження вищевказаного рішення. Чи можете ви допомогти ??
aton1004

Я перевіряю, що обидві таблиці вже порожні, тому чи потрібно запускати ці два кроки (запити) ???
Абі Шарма

Як я виконував ці запити, але ніякої допомоги. І все-таки отримую електронну пошту замовлення двічі
Абі Шарма

5

У мене була така ж проблема. Для кожного замовлення я отримував би клієнтів електронну пошту та окрему електронну пошту на свою адресу магазину - і в поштову скриньку мого облікового запису електронної пошти магазину.

У Magento Admin: Система> Конфігурація> Електронна пошта з продажу> Замовлення

Я встановив електронну пошту "Надіслати метод копіювання електронної пошти замовлення" з "Окремої електронної пошти" на "Копія", і вона працює зараз. Зараз я отримую лише один електронний лист за замовлення.


3
Я вже використовую метод Bcc, так що для мене, на жаль, це не проблема :(
Крістофер Thrower

Я вже використовую цей параметр, але користувач отримує 2 електронні листи після розміщення нового замовлення.
Абі Шарма

1

У мене була така ж проблема. У моєму випадку проблема була викликана вихідним кодом сценарію cron.sh.

Мій провайдер хостингу використовував власні версії сценаріїв cron.sh та cron.php для роботи Cron Magento.

Коли я змінив сценарій cron.sh на скрипт cron.php для запуску Magento-Cron-Job, електронну пошту нового замовлення було надіслано лише один раз, моя проблема була вирішена.

Можливо, ваше питання пов'язане з кодом сценарію cron.sh або cron.php .


Привіт, ми вже використовуємо cron.php скрипт для роботи з Magento cron, але я отримую електронні листи двічі.
Абі Шарма
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.