Neue Auftragsbestätigung per E-Mail wird nicht gesendet

100

Ich habe meine Website auf 1.9.1 aktualisiert und jetzt erhalten meine Kunden keine Bestellbestätigungs-E-Mail.

Ich habe versucht, über das Admin-Panel zu senden, aber es passiert nichts. Außerdem wird keine Aktualisierungs-E-Mail empfangen.

user16826
quelle

Antworten:

96
  1. Ab Magento 1.9.1 werden die E-Mails nicht direkt beim Auschecken gesendet, sondern in die Warteschlange gestellt.
  2. Die Warteschlange wird über Ihren Magento-Cronjob verarbeitet. Stellen Sie sicher, dass diese eingerichtet wurde und ordnungsgemäß ausgeführt wird.
  3. Die Erweiterung AOE_Scheduler kann Ihnen dabei helfen, zu bestätigen, dass Ihr Magento-Cronjob korrekt konfiguriert wurde und ausgeführt wird.
Kristof bei Fooman
quelle
6
Stellen Sie sicher, cron.shläuft! Wir haben gerade einen ganzen Tag damit verbracht, dieses Problem zu beheben, um festzustellen, dass cron falsch konfiguriert wurde.
Forsvunnet
2
woher wissen, ob cron.php funktioniert oder nicht?
Teja Bhagavan Kollepara
2
Sie können die Protokolle in / var / log / cron
Beto Castillo
Ich habe ein Problem mit der Bestell-E-Mail in Magento 2. Cron wird ebenfalls ausgeführt, aber es werden keine E-Mails gesendet. Die meisten Cron-Tasks fehlen in der Datenbanktabelle. Wie kann ich das beheben?
Magiercode
@Magecode Ich würde vorschlagen, zuerst nach Magento 2-spezifischen Fragen zu suchen. Wenn es keine gibt, können Sie gerne Ihre eigene Frage mit Details zu dem, was Sie bisher gefunden / ausgeschlossen haben, hinzufügen.
Kristof bei Fooman
29

Es gibt 2 Methoden, um E-Mails aus unserem Magento 1-Shop zu versenden.

  1. Mit cron
  2. Durch Vermeiden von Cron

Wenn Sie Cron vermeiden wollen:

Öffnen Sie Ihre order.php-Datei unter

app / code / core / Mage / Sales / Model / Order.php

Zeile # 1356,1450,

Veränderung

//$mailer->setQueue($emailQueue)->send(); 

zu:

$mailer-> send();

In app/design/frontend/base/default/template/checkout/success.phtml: folgende Zeile hinzufügen Top Erfolgsseite für den direkten Mailversand

$order = Mage::getModel('sales/order');
$incrementId = Mage::getSingleton('checkout/session')->getLastRealOrderId(); 
$order->loadByIncrementId($incrementId);
try{ 
    $order->sendNewOrderEmail();
} catch (Exception $ex) { 
    echo "Email Not Sent..."; 
}
$customer = Mage::getSingleton('customer/session')->getCustomer();
$email = $customer->getEmail();
//End Email Sending
Teja Bhagavan Kollepara
quelle
funktioniert perfekt, ist das notwendig, um code auf success.phtml hinzuzufügen, weil es ohne funktioniert
Suneth Kalhara
3
Hallo gerne zuhören. Sie müssen keinen Code hinzufügen, da die Transaktions-E-Mail sofort an die E-Mail-Adresse gesendet wird.
Teja Bhagavan Kollepara
1
Ändern (oder überschreiben) Sie niemals den Herstellercode - was passiert, wenn Sie ein Upgrade durchführen?
Bachi
20

Ich habe den folgenden E-Mail-Warteschlangencode aus Template.php entfernt und dann angefangen, E-Mails zu erhalten, wenn die Bestellung vom Kunden aufgegeben wurde oder wenn ich auf der Registerkarte "Verkauf / Bestellungen" im Administrationsbereich auf E-Mail senden geklickt habe.

Magento hat die Auftrags-E-Mail so eingestellt, dass sie per Zeitplan-Job anstatt per Sofort-E-Mail gesendet wird ... wahrscheinlich aus Performance-Gründen? (Ich weiß nicht warum, ich bin sehr neu in Magento) ... aber ich werde diesen Code wieder einfügen die Template.php und finde eine Möglichkeit, den Zeitplan-Job so einzustellen und auszuführen, dass er alle 5 Minuten ausgeführt wird ...

Template.php befindet sich in => /app/code/core/Mage/Core/Model/Email/Template.php

   if ($this->hasQueue() && $this->getQueue() instanceof Mage_Core_Model_Email_Queue) { 

    /** @var $emailQueue Mage_Core_Model_Email_Queue */
        $emailQueue = $this->getQueue();
        $emailQueue->setMessageBody($text);
        $emailQueue->setMessageParameters(array(
                'subject'           => $subject,
                'return_path_email' => $returnPathEmail,
                'is_plain'          => $this->isPlain(),
                'from_email'        => $this->getSenderEmail(),
                'from_name'         => $this->getSenderName(),
                'reply_to'          => $this->getMail()->getReplyTo(),
                'return_to'         => $this->getMail()->getReturnPath(),
            ))
            ->addRecipients($emails, $names, Mage_Core_Model_Email_Queue::EMAIL_TYPE_TO)
            ->addRecipients($this->_bccEmails, array(), Mage_Core_Model_Email_Queue::EMAIL_TYPE_BCC);
        $emailQueue->addMessageToQueue();

        return true;
    }
Helmey Hussain
quelle
Diese Methode hat das Problem behoben, aber das Newsletter-Abonnement funktioniert nicht. Das Zurückrollen auf die alte Vorlage.php hat das Problem mit dem Newsletter-Abonnement behoben.
Balajisoundar
14

Es gibt zwei Lösungen wie folgt:

Lösung-01: Verwenden von Cron

System> Konfiguration> Erweitert> System> Cron

Die Standardeinstellungen sind:

Zunächst einmal ist Magento 1.9+ vollständig auf Cron-Jobs angewiesen, um Transaktions-E-Mails zu versenden. Wenn Sie zuvor keine ordnungsgemäßen Cron-Jobs eingerichtet haben, müssen Sie dies jetzt tun.

Stellen Sie zunächst sicher, dass Sie im Magento-Admin unter cron-Tasks eingerichtet haben

System> Konfiguration> Erweitert> System> Cron

Die Standardeinstellungen sind:

Generieren Sie alle 15 Zeitpläne einen Zeitplan für 20 verpasste, wenn Sie nicht innerhalb von 15 ausgeführt werden

Es gibt Leute, die vorschlagen, diese Einstellungen zu ändern, aber da sie sich nicht auf die beste Kombination einigen können, lasse ich es lieber so, wie es ist.

Sie müssen dann in Ihr Hosting-Control-Panel gehen und Cron-Jobs einrichten. In cPanel befindet es sich unter Erweitert> Cron-Jobs. Richten Sie sie so ein, dass sie alle fünf Minuten ausgeführt werden, und verwenden Sie den folgenden Befehl:

php -f /home/username/public_html/cron.php

Stellen Sie sicher, dass der oben angegebene Pfad korrekt ist und dass sich die Datei cron.php im Stammverzeichnis Ihrer Magento-Installation befindet (wenn Sie gerade ein Upgrade durchgeführt haben, sollte dies der Fall sein). Ändern Sie den Benutzernamen in das richtige Konto.

Jetzt habe ich zunächst den Fehler gemacht, den Rat der Entwickler von xtento.com zu befolgen, die sagen, dass sie eine wget-Befehlszeichenfolge verwenden sollen: wget -O / dev / null -q http://www.YOURDOMAIN.com/PATH_TO_MAGENTO/cron. php

Solution-02: Vermeiden Sie cron

Transaktions-E-Mails werden sofort gesendet.

//app/code/core/Mage/Sales/Model/Order.php Line#1356,1450 
  //$mailer->setQueue($emailQueue)->send(); Change To 

          $mailer->send();

app/design/frontend/base/default/template/checkout/success.phtml
    //add following line Top success page for sending mail direct
    // Start Send Emai Here......
    $order = Mage::getModel('sales/order');
    $incrementId = Mage::getSingleton('checkout/session')->getLastRealOrderId(); 
    $order->loadByIncrementId($incrementId);

    try{ $order->sendNewOrderEmail();} 
    catch (Exception $ex) { echo "Email Not Sent..."; }
    $customer = Mage::getSingleton('customer/session')->getCustomer();
    $email = $customer->getEmail();//End Email Sending
matinict
quelle
10

Mit Magento 1.9 werden alle E-Mails in die Warteschlange gestellt und später über Cron versendet.

Magento 1.9 Release Note

Wenn Sie möchten, dass Ihre Transaktions-E-Mails über Cron gesendet werden, können Sie den Cron über System > Konfiguration > System unter der Registerkarte Cron einstellen ODER in Cpanel einen Cron erstellen, der direkt zu Ihrer cron.sh oder cron.php in Ihrem Magento-Stammverzeichnis führt.

Ajay Bisht
quelle
10

Installieren Sie einfach die Erweiterung "SMTP Pro Email": http://www.magentocommerce.com/magento-connect/smtp-pro-email-free-custom-smtp-email.html

Füllen Sie Ihre benutzerdefinierten SMTP-Details aus und fertig.


Ich habe zwei volle Tage gebraucht, um das herauszufinden. Es werden keine Cron-Jobs benötigt. Wenn Sie jedoch möchten, dass Cron-Jobs funktionieren, und dies nicht möchten, können Sie Folgendes tun:

Bearbeiten Sie cron.php im Magento-Stammverzeichnis

Nach:

$isShellDisabled = (stripos(PHP_OS, win’) === false) ? $isShellDisabled : true;

Fügen Sie diese Codezeile hinzu:

$isShellDisabled = true;

Richten Sie Cron Job ein

Öffnen Sie in C Panel den Abschnitt Cron-Jobs.
Erstellen Sie einen Cron-Job, der alle 15 Minuten den folgenden Befehl ausführt:

php -f /home/USERNAME/public_html/domain.com/magento_folder/cron.php
Jagoman
quelle
Beachten Sie, dass diese Konfiguration mit SMTP Pro für Magento 1.9.1 und höher durchgeführt werden muss: System -> Konfiguration -> SMTP Pro -> Warteschlangenkonfiguration -> Änderung der Warteschlangennutzung von Standard auf Nie.
Shrenik
8

In Magento 1.9.1.0 hat Magento eine neue Funktion hinzugefügt: Sie speichern die Bestell-E-Mail in der core_email_queueTabelle, um die Bestell-E-Mail zu senden. Wir müssen den cron.phpIn-Server einstellen

Die cron.phpDatei legt die core_email_queue_send_allIn-Cron-Zeitplantabelle fest. Führen Sie bei crone die Methode "send" aus, die von aufgerufen wird Mage_Core_Model_Email_Queue. Sie senden die Mail an den Kunden.

Das obige Update funktioniert also ohne Änderung der Core-Datei.

Ankita Pancholi
quelle
6

Führen Sie einfach das Cron-Setup auf Ihrem Server wie folgt aus: Befehl & dann erhalten Sie Sales-Mails.

php -q /home/YOUR_USER_NAME/public_html/Path_to_cron.php

Übliche Einstellungen als "*****" verwenden

Sie müssen YOUR_USER_NAME & Path_to_cron.php durch Ihre ersetzen.

Akhil Gupta
quelle
6

Unter Verwendung von n98-magerun führe ich einfach Folgendes aus:

n98-magerun sys:cron:run core_email_queue_send_all

Oder um es zeitlich festzulegen, wenn Sie es nicht ständig ausführen möchten:

watch -n 10 n98-magerun sys:cron:run core_email_queue_send_all

Dadurch werden alle 10 Sekunden alle in der Warteschlange befindlichen E-Mails gesendet.

Timon de Groot
quelle
6

Verwenden Sie für den Godaddy-Server folgenden Code, während Sie den Cronjob einrichten:

*   *   *   *   *   /usr/local/bin/php -q /home/steelwa/public_html/project_name/cron.php

Dies wird jede Minute ausgeführt.Bildbeschreibung hier eingeben

alok
quelle
5

Wenn NUR die Bestell-E-Mail nicht gesendet wird, werden in Magento nur die Bestell-E-Mails in die Warteschlange gestellt und gespeichert, um sie stapelweise zu versenden. Wenn Sie Ihr Heartbeat Cron-Setup nicht haben, verlassen sie niemals die Magento-Warteschlange.

Sie sehen, dass andere Magento-E-Mails ausgehen, da diese direkt von Magento an Ihren Mailer-Daemon übergeben werden. Die Magento-Warteschlangen (wie die Bestell-E-Mail) werden erst dann an den Mailer-Daemon übergeben, wenn der Hearbeat Cron ausgeführt wird.

Wechseln Sie zu http://yourmagentodomain.com/cron.php, und aktualisieren Sie diese Seite alle fünf Minuten. Die in der Warteschlange befindlichen Bestell-E-Mails erlöschen. Der Heartbeat Cron soll das für Sie tun. Oh, und wenn Sie zu dieser cron.php-Datei navigieren, sollte die Seite leer sein, seien Sie also nicht beunruhigt ... es wird funktionieren.

Aidan
quelle
5

Ich hatte das gleiche Problem und stellte fest, dass es sich um eine Erweiterung handelte. Fooman Email Attachments wurde jetzt auf v0.10.4 aktualisiert. Versionen unter v0.10.3 funktionieren nicht mit Magento 1.9.

loeffel
quelle
5

Ich verfolgte die Wissensdatenbank, um sie zum Laufen zu bringen: http://www.magentocommerce.com/knowledge-base/entry/ee1141-ce191-responsive-email#contact-info

Im Abschnitt "Lokalisieren von Transaktions-E-Mails" wurden nach Befolgen der vorherigen Anweisungen beim Kopieren nach / de_DE die E-Mails endgültig auf den Weg gebracht (einschließlich der zuvor nicht gesendeten). Außerdem trat ein Problem auf, bei dem die Bestellbestätigungsseite nicht für Kunden angezeigt wurde Fertigstellung. Dies wurde auch behoben.

Für das Gebietsschema en_GB müssten Sie beispielsweise die Dateien kopieren, die sich unter folgender Adresse befinden:

app / locale / de_DE / template / email

zum Ort:

app / locale / de_DE / template / email

Onkel Paul
quelle
2
Willkommen bei Magento SE! Können Sie Ihre Antwort noch genauer erläutern (Codebeispiele usw.)?
benmarks
3

Wenn Ihr Mailsystem (smtp, zend_mail) einwandfrei funktioniert; Das Deaktivieren von mailQueue kann Ihr Problem lösen.

/app/code/core/Mage/Core/Model/Email/Template.php

Ändern Sie die Zeile 407

if ($this->hasQueue() && $this->getQueue() instanceof Mage_Core_Model_Email_Queue) {

zu

if (false /\*$this->hasQueue() && $this->getQueue() instanceof Mage_Core_Model_Email_Queue\*/) {
user20329
quelle
5
Dadurch wird die Funktionalität des Kontaktformulars unterbrochen.
Zoya,
9
Bearbeite den Kern nicht
Kevin Schroeder
1
Bitte geben Sie keine Lösungen an, die Änderungen an CORE erfordern. Kernklassen dürfen niemals geändert werden.
Ahsan Horani
2

Wenn Sie die Erweiterung SMTPpro haben, versuchen Sie, diese zu deaktivieren. Und nochmal nachschauen. Alle E-Mails funktionieren einwandfrei und Sie müssen nur richtig konfigurieren.

Entwickler Webile
quelle
0

Besser ist es, eine Kopie Ihrer App / code / core / Mage / Core / Model / Email / Template / Mailer.php zu erstellen

In deinen lokalen Ordner app / code / local / Mage / Core / Model / Email / Template / Mailer.php

Kommentieren Sie dann diese Zeile in Zeile 76 aus

->setQueue($this->getQueue())

Dann bist du fertig. Die Vorlage success.phtml muss nicht geändert werden. : D

Jehzlau
quelle