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.