web-dev-qa-db-fra.com

magento n'envoie pas de mails, comment déboguer?

Magento n'envoie pas de courrier électronique, transnational, le formulaire de contact donne une erreur 

 cannot send your mail at this moment

J'ai vérifié

  • Configuration du courrier dans magento, tous les comptes de messagerie sont définis dans les paramètres
  • php mail fonctionne bien un test.php avec php mail envoie un message
  • vérifié mes journaux de serveur de messagerie, mais rien n'y voir aucune erreur
  • /var/log/system.log et exception.log affichent uniquement une erreur et non la cause de l'erreur 

    exception 'Zend_Mail_Transport_Exception' with message 'Unable to send mail. ' in /var/webshop/httpdocs/lib/Zend/Mail/Transport/Sendmail.php:137

12
Ilse

J'ai rencontré ce problème alors que Magento n'envoyait pas d'e-mails avec mot de passe oublié (le signalant toutefois à l'utilisateur), puis après avoir regardé dans /var/log/exception.log, l'erreur qu'elle générait était la suivante:

2012-05-30T04:27:54+00:00 ERR (3): 
exception 'Exception' with message 'This letter cannot be sent.' in /home/magento/www/app/code/core/Mage/Core/Model/Email/Template.php:354
Stack trace:
#0 /home/magento/www/app/code/core/Mage/Core/Model/Email/Template.php(463): Mage_Core_Model_Email_Template->send(Array, Array, Array)
#1 /home/magento/www/app/code/core/Mage/Core/Model/Email/Template/Mailer.php(79): Mage_Core_Model_Email_Template->sendTransactional('customer_passwo...', 'support', Array, Array, Array, '1')
#2 /home/magento/www/app/code/core/Mage/Customer/Model/Customer.php(646): Mage_Core_Model_Email_Template_Mailer->send()
#3 /home/magento/www/app/code/core/Mage/Customer/Model/Customer.php(663): Mage_Customer_Model_Customer->_sendEmailTemplate('customer/passwo...', 'customer/passwo...', Array, '1')
#4 /home/magento/www/app/code/core/Mage/Customer/controllers/AccountController.php(554): Mage_Customer_Model_Customer->sendPasswordResetConfirmationEmail()
#5 /home/magento/www/app/code/core/Mage/Core/Controller/Varien/Action.php(420): Mage_Customer_AccountController->forgotPasswordPostAction()
#6 /home/magento/www/app/code/core/Mage/Core/Controller/Varien/Router/Standard.php(250): Mage_Core_Controller_Varien_Action->dispatch('forgotpasswordp...')
#7 /home/magento/www/app/code/core/Mage/Core/Controller/Varien/Front.php(176): Mage_Core_Controller_Varien_Router_Standard->match(Object(Mage_Core_Controller_Request_Http))
#8 /home/magento/www/app/code/core/Mage/Core/Model/App.php(349): Mage_Core_Controller_Varien_Front->dispatch()
#9 /home/magento/www/app/Mage.php(640): Mage_Core_Model_App->run(Array)
#10 /home/magento/www/index.php(84): Mage::run('default', 'store')
#11 {main}

Donc ouvert /app/code/core/Mage/Core/Model/Email/Template.php et trouvé le code qui lançait cette erreur (à la ligne 354) était:

if (!$this->isValidForSend()) {
    Mage::logException(new Exception('This letter cannot be sent.')); // translation is intentionally omitted
    return false;
}

Alors jetez un coup d'œil à isValidForSend():

public function isValidForSend()
{
    return !Mage::getStoreConfigFlag('system/smtp/disable')
        && $this->getSenderName()
        && $this->getSenderEmail()
        && $this->getTemplateSubject();
}

Ajout de la journalisation des variables au début de la fonction car l’un d’eux doit être retourné false:

Mage::Log(var_export(!Mage::getStoreConfigFlag('system/smtp/disable'),true).';'.var_export($this->getSenderName(),true).';'.var_export($this->getSenderEmail(),true).';'.var_export($this->getTemplateSubject(),true),null,'email.log');

Ce qui crée le fichier journal /var/log/email.log qui avait:

2012-05-30T04:44:37+00:00 DEBUG (7): false;'CustomerSupport';'[email protected]';'Password Reset Confirmation for {{var customer.name}}'

Donc le problème était: !Mage::getStoreConfigFlag('system/smtp/disable') que vous pouvez corriger dans Admin > System > Configuration > Advanced > System > Mail Sending Settings et changer Disable Email Communications en No pour que les emails soient ET NON désactivés.

Maintenant ça marche :)

26
Kus

Tout programme php peut faire un travail à moitié décent d’envoyer des emails avec phpmail.

Compte tenu du message d'erreur, ce que votre build Magento tente de faire est différent - utilisez Sendmail via la bibliothèque Zend.

Vous devrez construire et tester votre installation de sendmail. Ou utilisez un autre service de messagerie tel que gmail et demandez à Magento de l'utiliser.

Pour vérifier si c'est vous, votre ordinateur ou Magento, installez un autre programme tel que Roundcube Mail. Si Roundcube Mail peut envoyer un courrier, vous saurez que Sendmail fonctionne, sinon, vous saurez que le problème est dans Sendmail.

La réparation de votre Sendmail est spécifique à la distribution.

2
ʍǝɥʇɐɯ

J'ai également eu du mal à résoudre le problème des courriers électroniques de commande non envoyés dans CE 1.9.1, mais j'ai trouvé le problème après un certain temps:

À partir de Magento CE 1.9.1, Magento n'envoie pas directement les e-mails de commande pendant le processus de commande . Les courriers électroniques sont mis en file d'attente et sont envoyés par le cron . Assurez-vous donc de configurer correctement le cronjob de Magento.

Voir aussi:

http://www.magentocommerce.com/knowledge-base/entry/ee1141-ce191-responsive-email#cronhttp://www.magentocommerce.com/knowledge-base/entry/ ce18-and-ee113-installer # install-cron

2
Gerard de Visser
public function isValidForSend()
{
    return !Mage::getStoreConfigFlag('system/smtp/disable')
        && $this->getSenderName()
        && $this->getSenderEmail()
        && $this->getTemplateSubject();
}

également, dans mon cas, le journal des erreurs m’a amené à cette fonction. La configuration en admin était bien. Mais $ this-> getTemplateSubject () envoyait une valeur false car le modèle manquait sous/app/locale/folder. Alors ajouté modèle qui manquait. Après cela a fonctionné pour moi.

1
Harry Thakkar

Cela peut être un problème sendmail, si Magento envoie des courriels avec le transport php par défaut.

J'ai l'habitude des situations où sendmail refuse les courriels pour le domaine local, au lieu de les relayer vers des serveurs MX

http://www.masterdef.net/blog/magento-unable-to-send-mail-sendmail-configuration/#more-1

Je recommande de vérifier mail.log sur le serveur et de le trouver s'il y a des erreurs comme un user unknown.__ qui signifie une mauvaise configuration sendmail

1
XPS

S'il y a un problème avec le modèle de courrier électronique .Vous obtenez cette erreur.Par conséquent, avant de vérifier les journaux de messagerie, vérifiez votre modèle de messagerie.

0
Saleh Galiwala