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.