Nouvel email de confirmation de commande non envoyé

100

J'ai mis à jour mon site Web à la version 1.9.1 et maintenant, mes clients ne reçoivent pas de courrier électronique de confirmation de commande.

J'ai essayé d'envoyer via le panneau d'administration, mais rien ne se passe, aucun courrier électronique de mise à jour n'est en cours de réception.

utilisateur16826
la source

Réponses:

96
  1. À partir de Magento 1.9.1, les e-mails ne sont pas envoyés directement lors de la commande, mais sont mis en file d'attente.
  2. La file d’attente est en cours de traitement via votre travail cron Magento - veuillez vous assurer que cela a été configuré et qu’il fonctionne correctement.
  3. L'extension AOE_Scheduler peut vous aider à confirmer que votre travail cron Magento a été configuré correctement et qu'il est en cours d'exécution.
Kristof chez Fooman
la source
6
Assurez-vous que ça cron.shfonctionne! Nous venons de passer une journée entière à déboguer ceci juste pour découvrir que cron était mal configuré.
forsvunnet
2
Comment savoir si cron.php fonctionne ou pas?
Teja Bhagavan Kollepara
2
Vous pouvez suivre les journaux dans / var / log / cron
Beto Castillo
J'ai un problème avec le courrier électronique de commande dans Magento 2. Cron est également en cours d'exécution, mais le courrier n'envoie pas. La plupart des tâches cron sont manquantes dans la table de base de données. Comment puis-je le résoudre?
Magecode
@Magecode Je suggérerais de commencer par rechercher des questions spécifiques à Magento 2. S'il n'y en a pas, n'hésitez pas à ajouter votre propre question avec des détails sur ce que vous avez trouvé / exclu jusqu'à présent.
Kristof à Fooman
29

Il existe 2 méthodes pour envoyer des mails depuis notre magasin Magento 1.

  1. En utilisant cron
  2. En évitant cron

Si vous voulez éviter le cron:

Ouvrez votre fichier order.php à

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

Ligne n ° 1356,1450,

changement

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

à:

$mailer-> send();

Dans app/design/frontend/base/default/template/checkout/success.phtml: ajouter la ligne suivante Top page de réussite pour l'envoi direct de courrier

$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
la source
fonctionne parfaitement, est-il nécessaire d'ajouter du code sur success.phtml becoz sans que cela semble fonctionner
correctement
3
Bonjour Heureux d'écouter ça. Pas besoin d'ajouter de code car le courrier transactionnel atteindra immédiatement le courrier électronique.
Teja Bhagavan Kollepara
1
Ne changez jamais (ni n'écrasez d'ailleurs) le code du fournisseur - que se passe-t-il lorsque vous effectuez une mise à niveau?
Bachi
20

J'ai supprimé le code de file d'attente de courrier électronique suivant de Template.php, puis j'ai commencé à recevoir un courrier électronique lorsque la commande est passée par le client ou lorsque je clique sur l'envoi d'un courrier électronique à partir de l'onglet "Ventes / Commandes" du panneau d'administration.

Magento avait paramétré le courriel de commande pour qu'il soit envoyé par un emploi du temps au lieu d'un courriel instantané ... probablement pour des raisons de performance (je ne sais pas pourquoi, je suis très nouveau dans Magento) ... mais je vais remettre ce code dans le fichier Template.php et trouvez un moyen de définir et d'exécuter le travail de planification à exécuter toutes les 5 minutes ...

Template.php se trouve dans => /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
la source
Cette méthode a résolu le problème, mais l'inscription à la newsletter ne fonctionnait pas. Revenir à l'ancien template.php a résolu le problème de l'abonnement à la lettre d'information.
balajisoundar
14

Il deux solutions comme suit:

Solution-01: Utilisation de cron

Système> Configuration> Avancé> Système> Cron

Les paramètres par défaut sont:

Tout d'abord, Magento 1.9+ s'appuie entièrement sur les tâches cron pour envoyer des emails transactionnels. Si vous n'avez pas configuré correctement les tâches cron auparavant, vous devez le faire maintenant.

Tout d’abord, assurez-vous d’avoir configuré les tâches cron dans l’administrateur Magento sous

Système> Configuration> Avancé> Système> Cron

Les paramètres par défaut sont:

Générer des calendriers tous les 15 calendriers à l'avance pour 20 manquants s'ils ne sont pas exécutés dans un délai de 15 historiques Nettoyage tous les 10 historiques de réussite Histoire à vie 60 Histoire à échec Durée de vie 600

Certaines personnes suggèrent de modifier ces paramètres, mais comme elles n'arrivent pas à s'entendre sur la meilleure combinaison, je préfère la laisser telle quelle.

Vous devez ensuite accéder à votre panneau de configuration d'hébergement et configurer des tâches cron. Dans cPanel, c'est sous Advanced> Cron Jobs. Configurez-les pour qu'ils s'exécutent toutes les cinq minutes et utilisez cette commande:

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

Vérifiez que le chemin ci-dessus est correct et que le fichier cron.php se trouve bien à la racine de votre installation de Magento (si vous venez de mettre à niveau, cela devrait être le cas). Changez le nom d'utilisateur pour le bon compte.

Maintenant, j’ai au départ commis l’erreur de suivre les conseils des développeurs de xtento.com qui recommandaient d’utiliser une chaîne de commande wget: wget -O / dev / null -q http://www.YOURDOMAIN.com/PATH_TO_MAGENTO/cron. php

Solution-02: éviter le cron

Les emails transactionnels seront envoyés instantanément.

//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
la source
10

Avec Magento 1.9, tous les e-mails seront mis en file d'attente puis envoyés par Cron.

Note de publication de Magento 1.9

Si vous souhaitez que vos courriels de transaction soient envoyés via Cron, vous pouvez définir le cron à partir de Système > Configuration > Système sous l'onglet Cron OU créer un cron dans Cpanel et le diriger directement vers votre fichier cron.sh ou cron.php situé dans votre répertoire racine Magento.

Ajay Bisht
la source
10

Il suffit d'installer l'extension "SMTP Pro Email": http://www.magentocommerce.com/magento-connect/smtp-pro-email-free-custom-smtp-email.html

Remplissez avec vos détails personnalisés SMTP et c'est fait.


Cela m'a pris deux jours complets à comprendre. Vous ne devez pas utiliser de tâches Cron. Toutefois, si vous souhaitez que les tâches Cron fonctionnent et si vous ne souhaitez pas effectuer les tâches ci-dessus, vous pouvez effectuer les opérations suivantes:

Éditez le fichier cron.php dans le répertoire racine de Magento

Après:

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

ajoutez cette ligne de code:

$isShellDisabled = true;

Configurer le travail cron

Sur le panneau C, ouvrez la section Tâches Cron.
Créez une tâche Cron qui exécute la commande suivante toutes les 15 minutes:

php -f /home/USERNAME/public_html/domain.com/magento_folder/cron.php
Jagoman
la source
Il est important de noter qu'avec SMTP Pro, cette configuration doit être effectuée pour Magento 1.9.1 et les versions ultérieures: Système -> Configuration -> SMTP Pro -> Configuration de la file d'attente -> L'utilisation de la file d'attente passe de Par défaut à Jamais.
Shrenik
8

Dans Magento 1.9.1.0, Magento a ajouté une nouvelle fonctionnalité: Ils stockent l'e-mail de commande dans le core_email_queuetableau pour envoyer l'e-mail des commandes. Nous devons définir le cron.phpserveur in

Le cron.phpfichier définit la core_email_queue_send_alltable de planification in cron. Quand crone exécute la méthode "send" appelée depuis Mage_Core_Model_Email_Queue. Ils envoient le courrier au client.

Donc, le correctif ci-dessus fonctionne sans modification du fichier principal.

Ankita Pancholi
la source
6

Il suffit de faire la configuration cron sur votre serveur comme indiqué ci-dessous et vous commencerez alors à recevoir des mails.

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

Utilisez les paramètres communs comme "*****"

Besoin de remplacer YOUR_USER_NAME & Path_to_cron.php par le vôtre.

Akhil Gupta
la source
6

En utilisant n98-magerun, je lance juste ce qui suit:

n98-magerun sys:cron:run core_email_queue_send_all

Ou de le chronométrer si vous ne voulez pas le lancer tout le temps:

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

Cela envoie tous les emails en file d'attente toutes les 10 secondes.

Timon de Groot
la source
6

Pour le serveur GoDaddy, utilisez le code suivant lors de la création de la tâche cron:

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

Cela fonctionnera chaque minute.entrez la description de l'image ici

Alok
la source
5

s'il s'agit UNIQUEMENT du courrier électronique de commande non envoyé, c'est parce que Magento ne met en file d'attente que les courriers électroniques de commande et les enregistre pour les envoyer par lots. Si vous n'avez pas configuré votre Heartbeat Cron, ils ne quitteront jamais la file d'attente de Magento.

Vous voyez d'autres courriels Magento sortir parce que ceux-ci sont directement transmis de Magento à votre démon de messagerie. Les files d'attente de Magento (comme le courrier électronique de commande) ne sont même pas transmises au démon de messagerie jusqu'à ce que Hearbeat Cron soit exécuté.

Pour les forcer à sortir ... accédez à http://votreserveuragent.com/cron.php et continuez d'actualiser cette page toutes les cinq minutes et vous verrez les e-mails de commandes en file d'attente commencer à sortir. Le Heartbeat Cron est censé le faire pour vous. Oh, et lorsque vous accédez à ce fichier cron.php, la page est supposée être vierge, alors ne vous inquiétez pas, cela fonctionnera.

Aidan
la source
5

J'ai eu le même problème et j'ai découvert qu'il était lié à une extension. Fooman Email Attachments a été mis à jour à la version v0.10.4. Les versions inférieures à v0.10.3 ne fonctionneront pas avec Magento 1.9.

loeffel
la source
5

J'ai suivi la base de connaissances pour le faire fonctionner: http://www.magentocommerce.com/knowledge-base/entry/ee1141-ce191-responsive-email#contact-info

Dans la partie "Localisation des e-mails transactionnels", après avoir suivi les instructions précédentes, la copie vers / en_UK a finalement reçu les e-mails sur leur chemin (y compris ceux qui n’avaient pas été envoyés auparavant). achèvement. Cela a été corrigé aussi.

Par exemple, pour les paramètres régionaux en_GB, vous devez copier les fichiers situés dans:

app / locale / en_US / template / email

à l'emplacement:

app / locale / en_GB / template / email

Uncle_Paul
la source
2
Bienvenue sur Magento SE! Pouvez-vous préciser votre réponse (exemple de code, etc.)?
benmarks
3

Si votre système de messagerie (smtp, zend_mail) fonctionne correctement; La désactivation de mailQueue peut résoudre votre problème.

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

Changer la ligne 407

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

à

if (false /\*$this->hasQueue() && $this->getQueue() instanceof Mage_Core_Model_Email_Queue\*/) {
utilisateur20329
la source
5
cela rompt la fonctionnalité du formulaire de contact.
Zoya
9
N'éditez pas le coeur
Kevin Schroeder
1
Veuillez ne pas fournir de solutions nécessitant des modifications de CORE. Les classes de base ne doivent jamais être changées.
Ahsan Horani
2

Si vous avez l'extension SMTPpro, essayez de le désactiver. Et vérifiez à nouveau. Tous les courriels fonctionnent bien et il vous suffit de configurer correctement.

Développeur Webile
la source
0

Le meilleur moyen est de faire une copie de votre application / code / core / Mage / Core / Modèle / Email / Template / Mailer.php

Vers votre dossier local app / code / local / Mage / Core / Model / Email / Template / Mailer.php

Puis commentez cette ligne dans la ligne 76

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

Alors vous avez fini. Pas besoin de modifier le modèle success.phtml. :RÉ

Jehzlau
la source