Magento 2: Programmgesteuertes Senden von E-Mails

24

Verfügt Magento 2 über eine integrierte Integration in Transaktions-E-Mail-Zustellungssysteme von Drittanbietern wie Amazon SES, Mandrill usw. oder basiert die integrierte E-Mail-Funktionalität immer noch auf der mailFunktion von PHP ? Oder werden die E-Mails mit einer dritten Nachricht verschickt?

Wenn die Antwort lautet mail, gibt es Erweiterungen von Drittanbietern wie SMTPPro für Magento 2, mit denen ein Entwickler das Standard-E-Mail-System ersetzen könnte?

Alan Storm
quelle

Antworten:

13

Ich fing an, in der Magento 2-Codebasis nach Zeichenfolgen wie "E-Mail", "Nachricht" usw. zu suchen, bis ich etwas fand, das eine E-Mail verschickt. Ich bin auf sendPaymentFailedEmail () in gestoßen vendor/magento/module-checkout/Helper/Data.php. Dies setzt viele Variablen, bindet sie aber schließlich an ein Transportobjekt, das über einen 'transportBuilder' erstellt wird. Dieser transportBuilder ist eine Instanz von \Magento\Framework\Mail\Template\TransportBuilder.

In dieser Datei existiert eine $transportVariable, die eine Instanz von ist \Magento\Framework\Mail\TransportInterface. Da es eine Schnittstelle gibt, gibt es auch eine reguläre Klasse namens \Magento\Framework\Mail\Transport. Wenn wir die Datei öffnen vendor/magento/framework/Mail/Transport.php, sehen wir, dass dies Zend_Mail_Transport_Sendmail erweitert;

Klasse Transport extended \ Zend_Mail_Transport_Sendmail implementiert \ Magento \ Framework \ Mail \ TransportInterface

Das ist was Sie suchen. Mit DI können Sie diesen Transport durch ein anderes E-Mail-Framework anstelle von Zend_Mail wie Mandrill oder Amazon SES ersetzen.

Nur sicher sein , die einschließen send()Methode , da , dass das Verfahren in genannt wird sendMessage();

public function sendMessage()
{
    try {
        parent::send($this->_message);
    } catch (\Exception $e) {
        throw new \Magento\Framework\Exception\MailException(new \Magento\Framework\Phrase($e->getMessage()), $e);
    }
}
Peter Jaap Blaakmeer
quelle
12

Magento 2 TransportBuilderverwendet E-Mail-Vorlagen, um den E-Mail-Körper zu erstellen. Die einfachste Möglichkeit, um Klartext zu versenden Zend_Mail(wird von Magento 2 selbst verwendet):

$email = new \Zend_Mail();
$email->setSubject("Feedback email");
$email->setBodyText($body);
$email->setFrom($from, $nameFrom);
$email->addTo($to, $nameTo);
$email->send();
Alex Gusev
quelle
3
Wenn Sie den Körper in Form von HTML senden möchten, können Sie verwenden$email->setBodyHtml($body)
Anish Karim
Dies ist jedoch großartig, wenn Sie SMTP über etwas wie Google verwenden, dann folgen Sie diesem Thread stackoverflow.com/questions/3455674/…
Ahdee
Ich habe dies in Magento versucht, aber einen Fehler erhalten. Schwerwiegender Fehler: Schwerwiegender Fehler: Nicht gefangener Fehler: Die Klasse 'Zend_Mail' wurde in /srv/public_html/pub/test.php
Nagaraju K
@NagarajuK, haben Sie den Autloader des Komponisten in Ihre Liste aufgenommen /srv/public_html/pub/test.php?
Alex Gusev
Nein @AlexGusev kann Sie anleiten, wie Sie den Autloader des Komponisten in meine test.php-Datei einfügen?
Nagaraju K
8

Es wird oft angenommen, dass mail()PHPs veraltet sind und kein drittes unterstützen. Partyservices.
Das ist eigentlich falsch, wie jeder gute 3.. Der Party-Service unterstützt eine SMTP-Schnittstelle, und dies mail()auch.

Amazon SES unterstützt SMTP.

Das Senden über SMTP mit mail()wird in der folgenden Antwort beschrieben: /programming//a/14457410/716029

Flyingmana
quelle
1
+1 für nützliche Informationen - aber ich bin immer noch daran interessiert, welche Abstraktionen Magento für die Unterstützung der verschiedenen E-Mail-Dienste über HTTP hat.
Alan Storm
Außer Zend_Mail gibt es leider keine speziellen Implementierungen.
Peter Jaap Blaakmeer
-1

Magento 2 Verwendet die Klasse \ Magento \ Framework \ Mail \ Template \ TransportBuilder , um benutzerdefinierte E-Mails zu senden.

Sie müssen ein einfaches Modul erstellen und die Datei email_tempaltes.xml zum Definieren Ihrer Transaktionsmailvorlagen festlegen.

Sie können E-Mails aus dem Bereich "Adminhtml" oder "Frontend-Bereich" senden.

Ich habe einen Link für eine Schritt-für-Schritt-Anleitung zum Senden einer benutzerdefinierten E-Mail von Magento 2 mithilfe eines Moduls freigegeben.

Senden Sie benutzerdefinierte E-Mails aus dem Magento 2-Modul

Rakesh Jesadiya
quelle