Magento 2: Programowe wysyłanie wiadomości e-mail

24

Czy Magento 2 ma jakąkolwiek wbudowaną integrację z systemami dostarczania e-maili transakcyjnych stron trzecich, takimi jak Amazon SES, Mandrill itp., Czy też wbudowana funkcja e-mail wciąż opiera się na mailfunkcji PHP ? Czy e-maile są wysyłane z trzecią rzeczą?

Jeśli odpowiedź brzmi mail, czy są jakieś rozszerzenia stron trzecich, takie jak SMTPPro dla Magento 2, które pozwoliłyby deweloperowi zastąpić standardowy system poczty e-mail?

Alan Storm
źródło

Odpowiedzi:

13

Zacząłem wyszukiwać w bazie kodu Magento 2 ciągi znaków, takie jak „e-mail”, „wiadomość” itp., Aż znalazłem coś, co wysyła wiadomość e-mail. Natknąłem się na sendPaymentFailedEmail () w vendor/magento/module-checkout/Helper/Data.php. To ustawia wiele zmiennych, ale ostatecznie wiąże je z obiektem transportowym, który jest tworzony przez „transportBuilder”. Ten transportBuilder jest instancją klasy \Magento\Framework\Mail\Template\TransportBuilder.

W tym pliku $transportistnieje zmienna, która jest instancją \Magento\Framework\Mail\TransportInterface. Ponieważ istnieje interfejs, istnieje również zwykła klasa o nazwie \Magento\Framework\Mail\Transport. Kiedy otwieramy plik vendor/magento/framework/Mail/Transport.php, widzimy, że rozszerza to Zend_Mail_Transport_Sendmail;

klasa Transport rozszerza \ Zend_Mail_Transport_Sendmail implementuje \ Magento \ Framework \ Mail \ TransportInterface

Tego właśnie szukasz. Korzystając z DI, będziesz mógł zastąpić ten transport inną strukturą e-mail zamiast Zend_Mail, taką jak Mandrill lub Amazon SES.

Pamiętaj tylko, aby dołączyć send()metodę, ponieważ jest to metoda wywoływana 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
źródło
12

Magento 2 TransportBuilderużywa szablonów wiadomości e-mail do tworzenia treści wiadomości e-mail. Najprostszy sposób, jaki znalazłem, aby wysłać zwykły tekst - użyj Zend_Mail(który jest używany przez sam Magento 2):

$email = new \Zend_Mail();
$email->setSubject("Feedback email");
$email->setBodyText($body);
$email->setFrom($from, $nameFrom);
$email->addTo($to, $nameTo);
$email->send();
Alex Gusev
źródło
3
Jeśli chcesz wysłać ciało w postaci html, możesz użyć$email->setBodyHtml($body)
Anish Karim
jest to jednak świetne, jeśli używasz smtp przez coś takiego jak Google, a następnie postępuj zgodnie z tym wątkiem stackoverflow.com/questions/3455674/…
Ahdee 24.09.17
Próbowałem tego na Magento, ale pojawia się błąd Błąd krytyczny: Błąd krytyczny: Nieprzechwycony błąd: Nie znaleziono klasy „Zend_Mail” w katalogu /srv/public_html/pub/test.php
Nagaraju K
@NagarajuK, czy dołączyłeś autloader kompozytora do swojego /srv/public_html/pub/test.php?
Alex Gusev
Żaden @AlexGusev nie może mi pomóc, jak dodać program ładujący kompozytora do mojego pliku test.php?
Nagaraju K
8

często przyjmuje się założenie, że PHP są mail()przestarzałe i nie obsługują żadnego trzeciego. usługi imprezowe.
To jest właściwie złe, jak każde dobre 3 miejsce. usługa party obsługuje interfejs SMTP, a także to mail()samo.

Amazon SES obsługuje SMTP.

i wysyłanie za pomocą SMTP z mail()jest opisane w tej odpowiedzi: /programming//a/14457410/716029

Flyingmana
źródło
1
+1 za przydatne informacje - ale nadal interesuje mnie, jeśli w ogóle, abstrakcje, które Magento ma do obsługi różnych e-maili za pośrednictwem usług HTTP.
Alan Storm,
Niestety nie ma żadnych konkretnych implementacji poza Zend_Mail.
Peter Jaap Blaakmeer
-1

Magento 2 Wykorzystuje klasę \ Magento \ Framework \ Mail \ Template \ TransportBuilder do wysyłania niestandardowych wiadomości e-mail.

Musisz utworzyć prosty moduł i ustawić plik email_tempaltes.xml do definiowania szablonów transakcji.

Możesz wysyłać pocztę z obszaru administracyjnego lub obszaru Frontend Scope.

Udostępniłem link do przewodnika krok po kroku, aby wysłać niestandardową pocztę z Magento 2 za pomocą modułu.

Wyślij niestandardową pocztę z modułu Magento 2

Rakesh Jesadiya
źródło