No se ha enviado la confirmación del nuevo pedido por correo electrónico

Respuestas:

96
  1. A partir de Magento 1.9.1, los correos electrónicos no se envían directamente durante el pago, sino que se ponen en cola.
  2. La cola se está procesando a través de su cronjob de Magento; asegúrese de que se haya configurado y se esté ejecutando correctamente.
  3. La extensión AOE_Scheduler puede ayudarlo a confirmar que su cronjob de Magento se ha configurado correctamente y se está ejecutando.
Kristof en Fooman
fuente
66
¡Asegúrate de que cron.shesté funcionando! Acabamos de pasar un día completo depurando esto solo para descubrir que cron estaba mal configurado.
forsvunnet
2
¿Cómo saber si cron.php está funcionando o no?
Teja Bhagavan Kollepara
2
Puede rastrear los registros dentro de / var / log / cron
Beto Castillo
Tengo un problema con el correo electrónico de pedido en Magento 2. Cron también se está ejecutando pero el correo no se envía. La mayoría de las tareas cron se pierden en la tabla de la base de datos. ¿Cómo puedo resolverlo?
Magecode
@Magecode Sugeriría buscar primero las preguntas específicas de Magento 2. Si no hay ninguno, no dude en agregar su propia pregunta con detalles sobre lo que ha encontrado / descartado hasta ahora.
Kristof en Fooman
29

Existen 2 métodos para enviar correos desde nuestra tienda Magento 1.

  1. Mediante el uso de cron
  2. Al evitar cron

Si quieres evitar cron:

Abra su archivo order.php en

app / code / core / Mage / Sales / Model / Order.php

Línea # 1356,1450,

cambio

//$mailer->setQueue($emailQueue)->send(); 

a:

$mailer-> send();

En app/design/frontend/base/default/template/checkout/success.phtml: agregue la siguiente línea Página de éxito superior para enviar correo directo

$order = Mage::getModel('sales/order');
$incrementId = Mage::getSingleton('checkout/session')->getLastRealOrderId(); 
$order->loadByIncrementId($incrementId);
try{ 
    $order->sendNewOrderEmail();
} catch (Exception $ex) { 
    echo "Email Not Sent..."; 
}
$customer = Mage::getSingleton('customer/session')->getCustomer();
$email = $customer->getEmail();
//End Email Sending
Teja Bhagavan Kollepara
fuente
funciona perfectamente, es necesario agregar código en success.phtml becoz sin que parezca que funciona bien
Suneth Kalhara
3
Hola feliz de escuchar esto No es necesario agregar ningún código porque el correo transaccional llegará al correo electrónico de inmediato.
Teja Bhagavan Kollepara
1
Nunca cambie (ni sobrescriba, de hecho) el código del proveedor: ¿qué sucede cuando actualiza?
Bachi
20

eliminé el siguiente código de cola de correo de Template.php, luego comencé a recibir correos electrónicos cuando el cliente realiza el pedido o cuando hago clic en enviar correo electrónico desde la pestaña "Ventas / Pedidos" del panel de administración.

Magento había configurado el correo electrónico del pedido para que se enviara por trabajo programado en lugar de correo electrónico instantáneo ... probablemente por razones de rendimiento (no sé por qué, soy muy nuevo en magento) ... sin embargo, voy a volver a poner este código Template.php y encuentre una manera de configurar y ejecutar el trabajo de programación para que se ejecute cada 5 minutos ...

Template.php se encuentra en => /app/code/core/Mage/Core/Model/Email/Template.php

   if ($this->hasQueue() && $this->getQueue() instanceof Mage_Core_Model_Email_Queue) { 

    /** @var $emailQueue Mage_Core_Model_Email_Queue */
        $emailQueue = $this->getQueue();
        $emailQueue->setMessageBody($text);
        $emailQueue->setMessageParameters(array(
                'subject'           => $subject,
                'return_path_email' => $returnPathEmail,
                'is_plain'          => $this->isPlain(),
                'from_email'        => $this->getSenderEmail(),
                'from_name'         => $this->getSenderName(),
                'reply_to'          => $this->getMail()->getReplyTo(),
                'return_to'         => $this->getMail()->getReturnPath(),
            ))
            ->addRecipients($emails, $names, Mage_Core_Model_Email_Queue::EMAIL_TYPE_TO)
            ->addRecipients($this->_bccEmails, array(), Mage_Core_Model_Email_Queue::EMAIL_TYPE_BCC);
        $emailQueue->addMessageToQueue();

        return true;
    }
Helmey Hussain
fuente
Este método resolvió el problema, pero la suscripción al boletín no funciona. Volviendo a la plantilla anterior.php resolvió el problema de suscripción a la carta de noticias.
balajisoundar
14

Hay dos soluciones de la siguiente manera:

Solución-01: Usando cron

Sistema> Configuración> Avanzado> Sistema> Cron

La configuración predeterminada es:

En primer lugar, Magento 1.9+ se basa completamente en trabajos cron para enviar correos electrónicos transaccionales. Si no tenía los trabajos cron configurados correctamente antes, tendrá que hacerlo ahora.

En primer lugar, asegúrese de haber configurado tareas cron en el administrador de Magento en

Sistema> Configuración> Avanzado> Sistema> Cron

La configuración predeterminada es:

Genere cronogramas cada 15 cronogramas anticipados por 20 perdidos si no se ejecuta dentro de 15 Limpieza del historial cada 10 Historial de éxito Lifetime 60 Historial de fallas Lifetime 600

Hay personas que sugieren que se debe cambiar esta configuración, pero como parece que no pueden ponerse de acuerdo sobre la mejor combinación, prefiero dejarla como está.

Luego debe ir a su panel de control de alojamiento y configurar trabajos cron. En cPanel está en Avanzado> Trabajos Cron. Configúrelos para que se ejecuten cada cinco minutos y use este comando:

php -f /home/username/public_html/cron.php

Verifique que la ruta anterior sea correcta y que el archivo cron.php esté realmente en la raíz de su instalación de Magento (si acaba de actualizar, debería estarlo). Cambiar nombre de usuario a la cuenta correcta.

Ahora, inicialmente cometí el error de seguir los consejos de los desarrolladores de xtento.com que dicen usar una cadena de comando wget: wget -O / dev / null -q http://www.YOURDOMAIN.com/PATH_TO_MAGENTO/cron. php

Solución-02: evitar cron

Los correos electrónicos transaccionales se enviarán al instante.

//app/code/core/Mage/Sales/Model/Order.php Line#1356,1450 
  //$mailer->setQueue($emailQueue)->send(); Change To 

          $mailer->send();

app/design/frontend/base/default/template/checkout/success.phtml
    //add following line Top success page for sending mail direct
    // Start Send Emai Here......
    $order = Mage::getModel('sales/order');
    $incrementId = Mage::getSingleton('checkout/session')->getLastRealOrderId(); 
    $order->loadByIncrementId($incrementId);

    try{ $order->sendNewOrderEmail();} 
    catch (Exception $ex) { echo "Email Not Sent..."; }
    $customer = Mage::getSingleton('customer/session')->getCustomer();
    $email = $customer->getEmail();//End Email Sending
matinict
fuente
10

Con Magento 1.9, todos los correos electrónicos se pondrán en cola y luego se enviarán a través de Cron.

Nota de lanzamiento de Magento 1.9

Si desea que sus correos electrónicos de transacción se envíen a través de Cron, puede configurar el cron desde Sistema > Configuración > Sistema en la pestaña Cron O crear cron en Cpanel y dirigirlo a su cron.sh o cron.php ubicado en su directorio raíz de Magento.

Ajay Bisht
fuente
10

Simplemente instale la extensión "SMTP Pro Email": http://www.magentocommerce.com/magento-connect/smtp-pro-email-free-custom-smtp-email.html

Rellene con sus detalles SMTP personalizados y listo.


Esto me llevó dos días completos para darme cuenta. No se necesitan trabajos Cron, aunque si desea que funcionen los trabajos cron y no desea hacer lo anterior, puede hacer lo siguiente:

Edite cron.php en el directorio raíz de Magento

Después:

$isShellDisabled = (stripos(PHP_OS, win’) === false) ? $isShellDisabled : true;

agregue esta línea de código:

$isShellDisabled = true;

Configurar Cron Job

En el Panel C, abra la sección Trabajos Cron
Cree un trabajo cron que ejecute el siguiente comando cada 15 minutos:

php -f /home/USERNAME/public_html/domain.com/magento_folder/cron.php
Jagoman
fuente
Es importante tener en cuenta que con SMTP Pro esta configuración debe hacerse para Magento 1.9.1 y superior: Sistema -> Configuración -> SMTP Pro -> Configuración de cola -> El uso de la cola cambia de Predeterminado a Nunca.
Shrenik
8

En Magento 1.9.1.0, Magento ha agregado una nueva característica: almacenan el correo electrónico del pedido en la core_email_queuetabla para enviar el correo electrónico de los pedidos. Tenemos que configurar el cron.phpservidor

El cron.phparchivo establece la core_email_queue_send_alltabla de programación en cron. Cuando crone ejecuta el método "send" llamado desde Mage_Core_Model_Email_Queue. Envían el correo al cliente.

Entonces, la solución anterior funciona sin ningún cambio en el archivo central.

Ankita Pancholi
fuente
6

Simplemente haga la configuración de cron en su servidor como se indica a continuación y luego comenzará a recibir correos de ventas.

php -q /home/YOUR_USER_NAME/public_html/Path_to_cron.php

Utilice configuraciones comunes como "*****"

Necesita reemplazar YOUR_USER_NAME y Path_to_cron.php con el suyo.

Akhil Gupta
fuente
6

Usando n98-magerun solo ejecuto lo siguiente:

n98-magerun sys:cron:run core_email_queue_send_all

O cronometrarlo si no quieres ejecutarlo todo el tiempo:

watch -n 10 n98-magerun sys:cron:run core_email_queue_send_all

Esto envía todos los correos electrónicos en cola cada 10 segundos.

Timon de Groot
fuente
6

para el servidor godaddy, use el siguiente código mientras configura el cronjob:

*   *   *   *   *   /usr/local/bin/php -q /home/steelwa/public_html/project_name/cron.php

Esto se ejecutará cada minuto.ingrese la descripción de la imagen aquí

alok
fuente
5

si SOLO es el correo electrónico del pedido que no se envía, es porque Magento pone en cola solo los correos electrónicos del pedido y los guarda para enviarlos en lotes. Si no tienes la configuración de Heartbeat Cron ... entonces nunca saldrán de la cola de Magento.

Estás viendo que se envían otros correos electrónicos de Magento porque se entregan directamente desde Magento a tu demonio de correo. Las colas de Magento (como el correo electrónico del pedido) ni siquiera se entregan al demonio de correo hasta que se ejecuta Hearbeat Cron.

Para obligarlos a salir ... navegue a http://yourmagentodomain.com/cron.php y siga actualizando esa página cada cinco minutos y verá que los correos electrónicos de pedidos en cola comienzan a salir. Se supone que Heartbeat Cron debe hacer esto por usted. Ah, y cuando navegas a ese archivo cron.php, se supone que la página está en blanco, así que no te alarmes ... funcionará.

Aidan
fuente
5

Tuve el mismo problema y descubrí que estaba relacionado con una extensión. Los archivos adjuntos de correo electrónico de Fooman ahora se han actualizado a v0.10.4. Las versiones debajo de v0.10.3 no funcionarán con Magento 1.9.

loeffel
fuente
5

Seguí la base de conocimientos para que funcionara: http://www.magentocommerce.com/knowledge-base/entry/ee1141-ce191-responsive-email#contact-info

En la parte "Localización de correos electrónicos transaccionales", después de seguir las instrucciones anteriores, la copia en / en_UK finalmente puso en marcha los correos electrónicos (incluidos los que no se enviaron previamente), También tuvimos un problema con la página de confirmación del pedido que no se mostraba a los clientes en terminación. Esto fue arreglado también.

Por ejemplo, para la configuración regional en_GB, deberá copiar los archivos que se encuentran en:

app / locale / es_ES / template / email

a la ubicación:

app / locale / es_GB / template / email

Tío_pablo
fuente
2
¡Bienvenido a Magento SE! ¿Puedes dar más detalles sobre tu respuesta (ofreciendo ejemplos de código, etc.)?
Benmarks
3

Si su sistema de correo (smtp, zend_mail) funciona bien; deshabilitar mailQueue puede resolver su problema.

/app/code/core/Mage/Core/Model/Email/Template.php

Cambiar línea 407

if ($this->hasQueue() && $this->getQueue() instanceof Mage_Core_Model_Email_Queue) {

a

if (false /\*$this->hasQueue() && $this->getQueue() instanceof Mage_Core_Model_Email_Queue\*/) {
usuario20329
fuente
55
Esto rompe la funcionalidad del formulario de contacto.
Zoya
99
No edite el núcleo
Kevin Schroeder
1
No proporcione soluciones que requieran cambios en CORE. Las clases principales nunca deben cambiarse.
Ahsan Horani
2

Si tiene la extensión SMTPpro, intente deshabilitarla. Y verifica de nuevo. Todos los correos electrónicos funcionan bien y solo necesita configurarlos correctamente.

Desarrollador Webile
fuente
0

La mejor manera es hacer una copia de su aplicación / código / core / Mage / Core / Model / Email / Template / Mailer.php

A su carpeta local app / code / local / Mage / Core / Model / Email / Template / Mailer.php

Luego comente esta línea en la línea 76

->setQueue($this->getQueue())

Entonces ya terminaste. No es necesario modificar la plantilla success.phtml. :RE

jehzlau
fuente