N'hésitez pas à me le signaler si nécessaire via le formulaire de contact.
J’ai rencontré récemment un problème avec l’envoi des emails de confirmation de commande sur magento version 1.9.0.1.
Contrairement à de plus anciennes versions de magento (et c’est mieux ainsi 🙂 ), les emails ne sont plus envoyés directement après le passage d’une commande.
Ils sont stockés dans la table core_email_queue .
Puis il sont envoyés 100 par 100 via la tâche cron core_email_queue_send_all toutes les minutes.
Sur le serveur hébergeant le site Magento ( dans un environnement chrooté) , cette tâche cron ne fonctionnait pas et le fichier exception.log était remplis de messages de ce type :
exception 'Zend_Mail_Transport_Exception' with message 'Unable to send mail. ' in /www/lib/Zend/Mail/Transport/Sendmail.php:137 Stack trace: #0 /www/lib/Zend/Mail/Transport/Abstract.php(348): Zend_Mail_Transport_Sendmail->_sendMail() #1 /www/lib/Zend/Mail.php(1194): Zend_Mail_Transport_Abstract->send(Object(Zend_Mail)) #2 /www/app/code/core/Mage/Core/Model/Email/Queue.php(241): Zend_Mail->send() #3 [internal function]: Mage_Core_Model_Email_Queue->send(Object(Mage_Cron_Model_Schedule)) #4 /www/app/code/core/Mage/Cron/Model/Observer.php(325): call_user_func_array(Array, Array) #5 /www/app/code/core/Mage/Cron/Model/Observer.php(72): Mage_Cron_Model_Observer->_processJob(Object(Mage_Cron_Model_Schedule), Object(Mage_Core_Model_Config_Element)) #6 /www/app/code/core/Mage/Core/Model/App.php(1338): Mage_Cron_Model_Observer->dispatch(Object(Varien_Event_Observer)) #7 /www/app/code/core/Mage/Core/Model/App.php(1317): Mage_Core_Model_App->_callObserverMethod(Object(Mage_Cron_Model_Observer), 'dispatch', Object(Varien_Event_Observer)) #8 /www/app/Mage.php(448): Mage_Core_Model_App->dispatchEvent('default', Array) #9 /www/cron.php(77): Mage::dispatchEvent('default') #10 {main} |
En exécutant la fonction Mage_Core_Model_Email_Queue->send() depuis un controller front-office tout fonctionne.
Mais via la ligne de commande ( PHP CLI) j’obtiens l’erreur suivante :
/usr/sbin/mini_sendmail: unexpected response 501 to RCPT TO command
Pour corriger cette erreur, j’ai créé une copie locale du fichier app/code/core/Mage/Email/Queue.php et modifié les lignes suivantes
( à partir de la ligne 210 dans le fichier )
$mailer = new Zend_Mail('utf-8'); foreach ($message->getRecipients() as $recipient) { list($email, $name, $type) = $recipient; switch ($type) { case self::EMAIL_TYPE_BCC: $mailer->addBcc($email, '=?utf-8?B?' . base64_encode($name) . '?='); break; case self::EMAIL_TYPE_TO: case self::EMAIL_TYPE_CC: default: // Le nom du destinataire mail pose problème lors de l'envoi sur le nouveau serveur // /usr/sbin/mini_sendmail: unexpected response 501 to RCPT TO command //$mailer->addTo($email, '=?utf-8?B?' . base64_encode($name) . '?='); $mailer->addTo($email); break; } } |
Une fois la modification ci-dessus effectuée, l’envoi des emails via la tâche cron a fonctionné à nouveau.
De mon côté l’erreur était donc lié à un problème d’encodage dans le nom du destinataire, cette fonctionnalité n’étant pas bloquante elle a donc été ignorée.