Sites et applications
Configurer Magento 1.9 et versions antérieures pour envoyer les e-mails par SMTP
Magento 1.x (y compris la 1.9) envoie les e-mails avec la fonction mail() de PHP. Ces e-mails partent sans authentification, et des fournisseurs comme Gmail, Hotmail ou Orange les envoient dans les spams ou les rejettent. La solution est de les envoyer par SMTP authentifié avec un compte e-mail de votre domaine.
Contrairement à Magento 2, Magento 1 ne propose pas d'option SMTP dans l'administration. Vous avez deux façons de le faire : avec une extension (recommandée) ou en modifiant le code.
Magento 1 ne reçoit plus de mises à jour de sécurité depuis juin 2020. Si votre boutique l'utilise encore, envisagez de passer à OpenMage, sa continuation maintenue (ce guide vaut aussi pour OpenMage), ou à Magento 2.
Avant de commencer, créez dans cPanel le compte e-mail depuis lequel partiront les e-mails, par exemple tienda@tudominio.com.
Option 1 : extension SMTP Pro (recommandée)
SMTP Pro Email d'ASchroder est une extension gratuite et open source, compatible avec Magento 1.x jusqu'à la 1.9.4.x et avec OpenMage, qui la recommande dans sa documentation. La dernière version publiée est la 2.0.7.
L'installer
Connectez-vous en SSH dans le dossier de Magento (normalement public_html), téléchargez la version 2.0.7 et copiez son dossier app sur celui de la boutique :
cd ~/public_html wget https://github.com/aschroder/Magento-SMTP-Pro-Email-Extension/archive/refs/tags/2.0.7.zip -O smtp-pro.zip unzip smtp-pro.zip cp -r Magento-SMTP-Pro-Email-Extension-2.0.7/app/* ./app/ rm -rf Magento-SMTP-Pro-Email-Extension-2.0.7 smtp-pro.zip
Si votre boutique est un OpenMage installé avec Composer, vous pouvez l'installer avec composer require aschroder/smtp_pro.
Videz le cache dans System > Cache Management : sélectionnez tous les types et cliquez sur Refresh. Vous pouvez aussi le faire en SSH :
rm -rf var/cache/*
Ensuite, déconnectez-vous de l'administration et reconnectez-vous ; sinon, la section de configuration de l'extension renvoie une erreur 404.
La configurer
Dans l'administration, allez dans System > Configuration puis, dans le menu de gauche, dans ASCHRODER EXTENSIONS > SMTP Pro. Remplissez :
| Champ | Valeur |
|---|---|
| Email Connection | Custom SMTP |
| Authentication | Login |
| Username | le compte e-mail complet, par exemple tienda@tudominio.com |
| Password | le mot de passe de ce compte |
| Host | localhost |
| Port | 25 |
| SSL Security | None |
Nous utilisons localhost, le port 25 et aucun chiffrement parce que la connexion se fait à l'intérieur du même serveur et ne sort pas sur Internet. Si vous envoyez avec un compte externe (Gmail, Microsoft 365…), utilisez le serveur, le port et le chiffrement indiqués par ce fournisseur, par exemple le port 587 avec TLS.
Cliquez sur Save Config en haut à droite.
La tester
Sur le même écran de SMTP Pro, cliquez sur le bouton Test : l'extension envoie un e-mail de test et vous indique si la connexion a fonctionné. Faites ensuite un test réel, comme une commande de test ou un message depuis le formulaire de contact, et vérifiez qu'il arrive.
Option 2 : modifier le code (sans extension)
Si vous ne pouvez pas installer d'extensions, vous pouvez obliger Magento à utiliser le SMTP en modifiant les deux fichiers qui envoient les e-mails : Template.php (envois directs) et Queue.php (envois en file d'attente, depuis Magento 1.9.1).
Ne modifiez pas les originaux de app/code/core/, car une mise à jour les écraserait. Copiez les fichiers dans app/code/local/, qui a la priorité sur core et n'est pas touché lors des mises à jour.
1. Copiez les fichiers dans app/code/local
En SSH, depuis le dossier de Magento :
mkdir -p app/code/local/Mage/Core/Model/Email/ cp app/code/core/Mage/Core/Model/Email/Template.php app/code/local/Mage/Core/Model/Email/Template.php cp app/code/core/Mage/Core/Model/Email/Queue.php app/code/local/Mage/Core/Model/Email/Queue.php chmod 600 app/code/local/Mage/Core/Model/Email/*.php
Le chmod 600 fait que seul votre utilisateur peut lire les fichiers, qui vont contenir le mot de passe de l'e-mail. Le dossier app est déjà protégé par le .htaccess de Magento : ils ne peuvent donc pas être téléchargés depuis le navigateur.
2. Modifiez Template.php
Ouvrez app/code/local/Mage/Core/Model/Email/Template.php et cherchez la méthode getMail() :
public function getMail() { if (is_null($this->_mail)) { $this->_mail = new Zend_Mail('utf-8'); } return $this->_mail; }
Remplacez-la par :
public function getMail() { if (is_null($this->_mail)) { $smtp_host = Mage::getStoreConfig('system/smtp/host'); $smtp_port = Mage::getStoreConfig('system/smtp/port'); $config = array( 'port' => $smtp_port, 'auth' => 'login', 'username' => 'tienda@tudominio.com', 'password' => 'tu_contraseña' ); $transport = new Zend_Mail_Transport_Smtp($smtp_host, $config); Zend_Mail::setDefaultTransport($transport); $this->_mail = new Zend_Mail('utf-8'); } return $this->_mail; }
3. Modifiez Queue.php
Ouvrez app/code/local/Mage/Core/Model/Email/Queue.php et, dans la méthode send(), cherchez ces lignes :
ini_set('SMTP', Mage::getStoreConfig('system/smtp/host')); ini_set('smtp_port', Mage::getStoreConfig('system/smtp/port'));
Remplacez-les par :
$smtp_host = Mage::getStoreConfig('system/smtp/host'); $smtp_port = Mage::getStoreConfig('system/smtp/port'); $config = array( 'port' => $smtp_port, 'auth' => 'login', 'username' => 'tienda@tudominio.com', 'password' => 'tu_contraseña' ); $transport = new Zend_Mail_Transport_Smtp($smtp_host, $config); Zend_Mail::setDefaultTransport($transport);
Dans la même méthode, cherchez ce bloc et supprimez-le ou commentez-le, car si un Return-Path est configuré, il remet l'envoi par Sendmail et annule le SMTP :
if ($parameters->getReturnPathEmail() !== null) { $mailTransport = new Zend_Mail_Transport_Sendmail("-f" . $parameters->getReturnPathEmail()); Zend_Mail::setDefaultTransport($mailTransport); }
Dans les deux fichiers, remplacez tienda@tudominio.com et tu_contraseña par les informations de votre compte e-mail.
4. Vérifiez les réglages d'envoi
Dans l'administration, allez dans System > Configuration > Advanced > System > Mail Sending Settings et vérifiez :
- Disable Email Communications : No.
- Host :
localhost. - Port (25) :
25. - Set Return-Path : No.
Template.phpcontient aussi un bloc qui passe à Sendmail quand cette option est active.
Le code lit l'hôte et le port ici, avec Mage::getStoreConfig('system/smtp/host') et Mage::getStoreConfig('system/smtp/port').
5. Videz le cache et recompilez
Si le compilateur est activé (vous le voyez dans System > Tools > Compilation), recompilez pour que Magento utilise les nouveaux fichiers :
php shell/compiler.php clear php shell/compiler.php compile
Et videz le cache :
rm -rf var/cache/*
Modifiez toujours les deux fichiers : si vous n'en changez qu'un, les e-mails qui passent par l'autre chemin continueront d'utiliser mail(). Si vous mettez à jour Magento ou OpenMage, comparez vos copies de app/code/local avec les nouveaux fichiers de core et réappliquez les modifications s'ils ont changé.
En cas de problème
- Les e-mails de commande ne partent pas mais celui de test oui : depuis Magento 1.9.1, les e-mails de commande vont dans une file d'attente traitée par le cron. Vérifiez que vous avez une tâche cron qui exécute
cron.shoucron.phptoutes les quelques minutes. - Écran de maintenance après l'installation de l'extension : supprimez le fichier
maintenance.flagdu dossier de Magento. - Erreur de connexion avec un serveur externe : pour utiliser TLS ou SSL, l'extension PHP OpenSSL doit être active dans le sélecteur PHP de cPanel.
Cela peut aussi vous aider
- Installer et mettre à jour Magento 2.4 sans Elasticsearch ni OpenSearch Magento 2.4 exige Elasticsearch ou OpenSearch, qui ne fonctionnent pas sur un hébergement mutualisé....
- Afficher l'image et le prix dans la recherche instantanée de PrestaShop 1.6, 1.7, 8 et 9 Code pour que la recherche instantanée (AJAX) de PrestaShop affiche l'image et le prix de chaque pro...
- Mail Alerts : recevoir des avis de commandes, de stock et de retours dans PrestaShop Installez et configurez le module Mail Alerts de PrestaShop pour recevoir un e-mail à chaque nouvell...
- Passer en espagnol la langue de la boutique et de l'administration de PrestaShop Mettez PrestaShop en espagnol : importez le pack de localisation de l'Espagne, choisissez l'espagnol...
Quelque chose cloche ou a changé ? Racontez-nous et nous le vérifions.