Websites und Anwendungen

Magento 1.9 und älter für den E-Mail-Versand über SMTP einrichten

Geprüft am 9 Min. Lesezeit SMTP Magento

Magento 1.x (einschließlich 1.9) versendet E-Mails mit der PHP-Funktion mail(). Diese E-Mails gehen ohne Authentifizierung hinaus, und Anbieter wie Gmail, Hotmail oder Orange verschieben sie in den Spam oder lehnen sie ab. Die Lösung ist, sie über authentifiziertes SMTP mit einem E-Mail-Konto Ihrer Domain zu senden.

Anders als Magento 2 hat Magento 1 keine SMTP-Option im Administrationsbereich. Es gibt zwei Wege: mit einer Erweiterung (empfohlen) oder durch Bearbeiten des Codes.

Magento 1 erhält seit Juni 2020 keine Sicherheitsupdates mehr. Wenn Ihr Shop noch darauf läuft, erwägen Sie den Wechsel zu OpenMage, seiner gepflegten Fortsetzung (diese Anleitung gilt auch für OpenMage), oder zu Magento 2.

Legen Sie vorher in cPanel das E-Mail-Konto an, von dem aus die E-Mails versendet werden, zum Beispiel tienda@tudominio.com.

Option 1: Erweiterung SMTP Pro (empfohlen)

SMTP Pro Email von ASchroder ist eine kostenlose Open-Source-Erweiterung, kompatibel mit Magento 1.x bis 1.9.4.x und mit OpenMage, das sie in seiner Dokumentation empfiehlt. Die zuletzt veröffentlichte Version ist 2.0.7.

Installieren

Melden Sie sich per SSH an, wechseln Sie in den Magento-Ordner (normalerweise public_html), laden Sie die Version 2.0.7 herunter und kopieren Sie ihren Ordner app über den des Shops:

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

Wenn Ihr Shop ein mit Composer installiertes OpenMage ist, können Sie die Erweiterung mit composer require aschroder/smtp_pro installieren.

Leeren Sie den Cache unter System > Cache Management: Wählen Sie alle Typen aus und klicken Sie auf Refresh. Das geht auch per SSH:

rm -rf var/cache/*

Melden Sie sich danach im Administrationsbereich ab und wieder an; sonst liefert der Konfigurationsbereich der Erweiterung einen 404-Fehler.

Konfigurieren

Gehen Sie im Administrationsbereich zu System > Configuration und im linken Menü zu ASCHRODER EXTENSIONS > SMTP Pro. Füllen Sie aus:

Feld Wert
Email Connection Custom SMTP
Authentication Login
Username das vollständige E-Mail-Konto, zum Beispiel tienda@tudominio.com
Password das Passwort dieses Kontos
Host localhost
Port 25
SSL Security None

Wir verwenden localhost, Port 25 und keine Verschlüsselung, weil die Verbindung innerhalb desselben Servers stattfindet und nicht ins Internet geht. Wenn Sie mit einem externen Konto senden (Gmail, Microsoft 365 …), verwenden Sie Server, Port und Verschlüsselung, die Ihnen dieser Anbieter nennt, zum Beispiel Port 587 mit TLS.

Klicken Sie oben rechts auf Save Config.

Testen

Klicken Sie im selben SMTP-Pro-Bildschirm auf die Schaltfläche Test: Die Erweiterung sendet eine Test-E-Mail und zeigt Ihnen, ob die Verbindung funktioniert hat. Machen Sie danach einen echten Test, etwa eine Testbestellung oder eine Nachricht über das Kontaktformular, und prüfen Sie, dass sie ankommt.

Option 2: den Code bearbeiten (ohne Erweiterung)

Wenn Sie keine Erweiterungen installieren können, können Sie Magento zur Verwendung von SMTP zwingen, indem Sie die beiden Dateien ändern, die E-Mails versenden: Template.php (direkter Versand) und Queue.php (Versand über die Warteschlange, seit Magento 1.9.1).

Bearbeiten Sie nicht die Originale in app/code/core/, denn ein Update würde sie überschreiben. Kopieren Sie die Dateien nach app/code/local/, das Vorrang vor core hat und bei Updates nicht angetastet wird.

1. Die Dateien nach app/code/local kopieren

Per SSH, im Magento-Ordner:

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

Mit chmod 600 kann nur Ihr Benutzer die Dateien lesen, die das E-Mail-Passwort enthalten werden. Der Ordner app ist bereits durch die .htaccess von Magento geschützt, sodass sie sich nicht über den Browser herunterladen lassen.

2. Template.php bearbeiten

Öffnen Sie app/code/local/Mage/Core/Model/Email/Template.php und suchen Sie die Methode getMail():

public function getMail()
{
    if (is_null($this->_mail)) {
        $this->_mail = new Zend_Mail('utf-8');
    }
    return $this->_mail;
}

Ersetzen Sie sie durch:

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. Queue.php bearbeiten

Öffnen Sie app/code/local/Mage/Core/Model/Email/Queue.php und suchen Sie in der Methode send() diese Zeilen:

ini_set('SMTP', Mage::getStoreConfig('system/smtp/host'));
ini_set('smtp_port', Mage::getStoreConfig('system/smtp/port'));

Ersetzen Sie sie durch:

$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);

Suchen Sie in derselben Methode diesen Block und löschen oder kommentieren Sie ihn aus, denn wenn ein Return-Path eingestellt ist, schaltet er den Versand wieder auf Sendmail um und hebt SMTP auf:

if ($parameters->getReturnPathEmail() !== null) {
    $mailTransport = new Zend_Mail_Transport_Sendmail("-f" . $parameters->getReturnPathEmail());
    Zend_Mail::setDefaultTransport($mailTransport);
}

Ersetzen Sie in beiden Dateien tienda@tudominio.com und tu_contraseña durch die Daten Ihres E-Mail-Kontos.

4. Die Versandeinstellungen prüfen

Gehen Sie im Administrationsbereich zu System > Configuration > Advanced > System > Mail Sending Settings und prüfen Sie:

  • Disable Email Communications: No.
  • Host: localhost.
  • Port (25): 25.
  • Set Return-Path: No. Template.php enthält ebenfalls einen Block, der auf Sendmail umschaltet, wenn diese Option aktiv ist.

Der Code liest Host und Port von hier, mit Mage::getStoreConfig('system/smtp/host') und Mage::getStoreConfig('system/smtp/port').

5. Den Cache leeren und neu kompilieren

Wenn der Compiler aktiviert ist (das sehen Sie unter System > Tools > Compilation), kompilieren Sie neu, damit Magento die neuen Dateien verwendet:

php shell/compiler.php clear
php shell/compiler.php compile

Und leeren Sie den Cache:

rm -rf var/cache/*

Bearbeiten Sie immer beide Dateien: Wenn Sie nur eine ändern, verwenden die E-Mails, die über den anderen Weg hinausgehen, weiterhin mail(). Wenn Sie Magento oder OpenMage aktualisieren, vergleichen Sie Ihre Kopien in app/code/local mit den neuen Dateien in core und übernehmen Sie die Änderungen erneut, falls sich etwas geändert hat.

Wenn etwas nicht funktioniert

  • Die Bestell-E-Mails gehen nicht hinaus, die Test-E-Mail schon: Seit Magento 1.9.1 kommen Bestell-E-Mails in eine Warteschlange, die per Cron verarbeitet wird. Prüfen Sie, dass ein Cronjob cron.sh oder cron.php alle paar Minuten ausführt.
  • Wartungsbildschirm nach der Installation der Erweiterung: Löschen Sie die Datei maintenance.flag im Magento-Ordner.
  • Verbindungsfehler mit einem externen Server: Für TLS oder SSL muss die PHP-Erweiterung OpenSSL im PHP-Selektor von cPanel aktiviert sein.

Das könnte Ihnen auch helfen

Stimmt etwas nicht oder hat sich etwas geändert? Erzählen Sie es uns, und wir prüfen es.