Email di nuovo ordine inviata due volte


25

Sto usando Magento 1.9.1 e quando creo un nuovo ordine, che sia dal frontend o dall'amministratore, il sistema invia 2 e-mail - entrambe uguali!

Ho guardato in rete e ho trovato un bug che era vecchio e non riuscivo a trovare il codice menzionato per commentare, sembrava anche che avesse a che fare con gli ordini Paypal e questo non è il caso.

Ho disabilitato TUTTE le estensioni e provato e ho ancora avuto lo stesso problema, quindi sono sicuro che non sia un problema di estensione.


1
Hai risolto questo problema? Ho avuto la stessa strana conferma del doppio ordine di volta in volta e usando anche ccn per le mail di conferma. Non so se un cliente riceve anche due mail, ma non lo spero.
— Fox,

A chi è indirizzata l'e-mail? Stai effettuando il checkout con una delle tue email di amministratore?
— SR_Magento,

Ricevo lo stesso problema (l'utente riceve due e-mail dopo aver effettuato un nuovo ordine). Non sono sicuro per la seguente risposta e le mie due tabelle "core_email_queue" e "core_email_queue_recipients" sono vuote, quindi penso che questo non dovrebbe essere il mio caso. Per favore, aiutatemi su questo.
— Abi Sharma,

Abi Sharma, ho lo stesso problema, ho ancora e-mail duplicate ... hai risolto il problema? per favore fatemi sapere
— Lior Loria il

Risposte:


48

Questo problema deve essere correlato al nuovo sistema di coda e-mail Magento, che lascia i record orfani nella tabella Destinatari. Se questo è il tuo problema, ti invio una correzione.

Il nuovo sistema Magento Email Queue gestisce queste due tabelle: core_email_queue e core_email_queue_recipients . Il primo gestisce i messaggi e-mail e, successivamente, i destinatari di questi messaggi.

La tabella core_email_queue viene ripulita quando vengono inviate e-mail nella coda e-mail Magento. Questa pulizia viene eseguita da un processo di cron tab chiamato core_email_queue_clean_up , definito all'interno del file di configurazione app / code / core / Mage / Core / etc / config.xm l. Il codice che esegue la pulizia è definito nella funzione removeSentMessages nella classe 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;
}

Il codice sopra è eseguito una volta al giorno dall'attività cron.

Ma succede che la tabella core_email_queue_recipients (quella che contiene i destinatari e-mail e che è collegata alla tabella core_email_queue dal campo message_id ), non viene ripulita insieme alla tabella core_email_queue (quella che contiene i messaggi e-mail), lasciando all'interno dei record orfani tabella dei destinatari quando viene eliminata la tabella dei messaggi.

Il problema qui descritto sorge quando la tabella core_email_queue (Messaggi) viene ripristinata e il campo message_id autoincrement su questa tabella viene reinizializzato su 1.

Poiché la tabella core_email_queue_recipients (Destinatari) non è stata pulita di conseguenza, quando vengono aggiunte nuove e-mail alla coda e-mail di Magento, i nuovi record vengono creati nella tabella core_email_queue (con message_id a partire da 1) e allo stesso tempo vengono creati nuovi record nella tabella core_email_queue_recipients con gli stessi ID (a partire da 1).

Il problema è che questi ID potrebbero già esistere nella tabella Destinatari come record orfani (a causa di precedenti messaggi di posta elettronica). Questi nuovi ID messaggi vengono quindi ripetuti nella tabella core_email_queue_recipients . Alla fine, diversi messaggi e-mail sono collegati ai rispettivi destinatari dal message_id , ma vengono anche erroneamente collegati ai destinatari precedenti a cui era stato assegnato lo stesso message_id dalle precedenti e-mail.

Pertanto, quando i destinatari vengono cercati per inviare un determinato messaggio, oltre al destinatario appropriato, possono sorgere altri destinatari errati.

Fortunatamente la correzione di questo problema è facile da eseguire.

Tutto ciò che serve è ripulire tutti gli ID dei messaggi ripetuti nella tabella core_email_queue_recipients e assicurarsi che quando un messaggio viene eliminato nella tabella core_email_queue , allo stesso tempo i destinatari corrispondenti vengano eliminati nella tabella core_email_queue_recipients .

Il modo migliore per raggiungere questo obiettivo è quello di creare una chiave esterna che colleghi questi record e li elimini in cascata (ma è necessario effettuare un po 'di pulizia prima di poterlo fare).

Questa è la procedura per risolvere il problema:

1) Eseguire le seguenti due query SQL per pulire la tabella core_email_queue_recipients da record orfani e ID messaggi ripetuti:

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 prima query elimina i record orfani e la seconda elimina i vecchi record che non sono più validi.

2) Creare una chiave esterna nella tabella core_email_queue_recipients per eliminare i record dei destinatari in cascata. La query SQL per creare questa chiave esterna è:

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

Utilizzando questa nuova chiave esterna, nessun record orfano verrà lasciato sulla tabella core_email_queue_recipients durante la pulizia della tabella core_email_queue e in futuro non verranno inviati messaggi duplicati a destinatari errati.


2
Grande ricerca e correzione di lavoro fornita César. Questa è una grande supervisione da parte del team di Magento dato che potenzialmente invierà il nome e l'indirizzo del cliente ad altri clienti. Qualcuno sa se questo è stato risolto in una (quale) patch / release da quando è stato scoperto questo problema?
— Zigojacko

Ancora affrontando il problema della stessa e-mail dell'ordine inviata più volte allo stesso indirizzo e-mail dopo aver implementato la soluzione di cui sopra.
— aton1004,

Sto verificando che entrambe le mie tabelle siano già vuote, quindi devo eseguire questi due passaggi (query) ???
— Abi Sharma,

Qualunque sia il modo in cui ho eseguito queste query, ma nessun aiuto. Ancora ricevendo l'email di ordine due volte
— Abi Sharma,

5

Ho avuto lo stesso problema. Per ogni ordine riceverei l'e-mail dei clienti e un'e-mail separata all'indirizzo del mio negozio - entrambi nella casella di posta dell'account e-mail del mio negozio.

In Magento Admin: Sistema> Configurazione> E-mail di vendita> Ordine

Ho impostato l'e-mail "Invia metodo di copia e-mail ordine" da "E-mail separata" a "Ccn" e funziona ora. Ricevo solo una e-mail per ordine ora.


3
Sto già usando il metodo Ccn, quindi purtroppo non è questo il problema :(
— Christopher Thrower,

Sto già utilizzando questa impostazione, ma l'utente riceve 2 e-mail dopo aver effettuato un nuovo ordine.
— Abi Sharma,

1

Ho avuto lo stesso problema. Nel mio caso il problema è stato causato dal codice sorgente dello script cron.sh.

Il mio provider di hosting ha usato le sue versioni degli script cron.sh e cron.php per il cron-job di Magento.

Quando sono passato dallo script cron.sh allo script cron.php per l'avvio di Magento-Cron-Job, il nuovo ordine e-mail è stato inviato solo una volta, il mio problema è stato risolto.

Forse il tuo problema ha qualcosa a che fare con il codice dello script cron.sh o cron.php .


Ciao, stiamo già usando lo script cron.php per il processo cron di Magento ma ricevo due volte e-mail.
— Abi Sharma,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.