Sites et applications

Configurer Magento 1.9 et versions antérieures pour envoyer les e-mails par SMTP

Vérifié le 9 min de lecture SMTP Magento

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.php contient 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.sh ou cron.php toutes les quelques minutes.
  • Écran de maintenance après l'installation de l'extension : supprimez le fichier maintenance.flag du 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

Quelque chose cloche ou a changé ? Racontez-nous et nous le vérifions.