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é
/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
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 :)
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.
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
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.
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
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.