Este problema debe estar relacionado con el nuevo sistema Magento Email Queue, que deja registros huérfanos en la tabla de destinatarios. Si este es tu problema, te envío una solución.
El nuevo sistema Magento Email Queue gestiona estas dos tablas: core_email_queue y core_email_queue_recipients . El primero maneja los mensajes de correo electrónico y el segundo, los destinatarios de estos mensajes.
La tabla core_email_queue se limpia a medida que se envían correos electrónicos en Magento Email Queue. Esta limpieza se realiza mediante un trabajo de pestaña cron llamado core_email_queue_clean_up , que se define dentro del archivo de configuración app / code / core / Mage / Core / etc / config.xm l. El código que realiza la limpieza se define en las removeSentMessages funcionan en el Mage_Core_Model_Resource_Email_Queue clase:
/**
* 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;
}
El código anterior se ejecuta una vez al día por la tarea cron.
Pero sucede que la tabla core_email_queue_recipients (la que contiene destinatarios de correo electrónico, y que está vinculada a la tabla core_email_queue por el campo message_id ), no se limpia junto con la tabla core_email_queue (la que contiene mensajes de correo electrónico), dejando registros huérfanos dentro esa tabla de destinatarios cuando se limpia la tabla de mensajes.
El problema descrito aquí surge cuando la tabla core_email_queue (Mensajes) se restablece y el campo message_id de incremento automático en esta tabla se reinicia a 1.
Debido a que la tabla core_email_queue_recipients (Destinatarios) no se ha limpiado en consecuencia, cuando se agregan nuevos correos electrónicos a la Cola de correo electrónico de Magento, se crean nuevos registros en la tabla core_email_queue (con message_id comenzando de nuevo desde 1), y al mismo tiempo se crean nuevos registros en la tabla core_email_queue_recipients con estos mismos identificadores (comenzando de nuevo desde 1).
El problema es que estos identificadores ya pueden existir en la tabla de destinatarios como registros huérfanos (debido a mensajes de correo electrónico anteriores). Estos nuevos ID de mensajes se repiten dentro de la tabla core_email_queue_recipients . Al final, los mensajes de correo electrónico diferentes están vinculados a sus Destinatarios correspondientes por el message_id , pero también se vinculan erróneamente a los destinatarios anteriores a los que se les asignó el mismo message_id de correos electrónicos anteriores.
Por lo tanto, cuando se busca a los destinatarios para enviar un mensaje dado, además del destinatario apropiado, pueden surgir otros destinatarios incorrectos.
Afortunadamente, la solución para este problema es fácil de realizar.
Todo lo que se necesita es limpiar todos los identificadores de mensajes repetidos en la tabla core_email_queue_recipients y asegurarse de que cuando se elimina un mensaje en la tabla core_email_queue , al mismo tiempo, sus destinatarios correspondientes se eliminen en la tabla core_email_queue_recipients .
La mejor manera de lograr esto es crear una clave foránea que vincule estos registros y los elimine en cascada (pero debe realizar alguna limpieza antes de poder hacerlo).
Este es el procedimiento para solucionar el problema:
1) Ejecute las siguientes dos consultas SQL para limpiar la tabla core_email_queue_recipients de los registros huérfanos y los identificadores de mensajes repetidos:
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);
La primera consulta elimina los registros huérfanos y la segunda elimina los registros antiguos que ya no son válidos.
2) Cree una clave foránea en la tabla core_email_queue_recipients para eliminar los registros de Destinatarios en cascada. La consulta SQL para crear esta clave foránea es:
ALTER TABLE core_email_queue_recipients ADD FOREIGN KEY(message_id) REFERENCES core_email_queue(message_id) ON DELETE CASCADE;
Al usar esta nueva clave externa, no se dejarán registros huérfanos en la tabla core_email_queue_recipients al limpiar la tabla core_email_queue , y no se enviarán mensajes duplicados a destinatarios incorrectos en el futuro.