Magento 2: invio di e-mail a livello di codice


24

Magento 2 ha un'integrazione integrata con i sistemi di consegna della posta elettronica delle transazioni di terze parti come Amazon SES, Mandrill, ecc. O la funzionalità di posta elettronica integrata è ancora basata sulla mailfunzione di PHP ? O le e-mail vengono inviate con una terza cosa?

Se la risposta è mail: ci sono estensioni di terze parti come SMTPPro per Magento 2 che consentirebbe a uno sviluppatore di sostituire il sistema di posta elettronica standard?

Risposte:


13

Ho iniziato a cercare nel codebase di Magento 2 stringhe come "email", "message", ecc. Fino a quando non ho trovato qualcosa che inviava un'email. Mi sono imbattuto in sendPaymentFailedEmail () in vendor/magento/module-checkout/Helper/Data.php. Questo imposta molte variabili ma alla fine le lega a un oggetto di trasporto, che viene creato tramite un "transportBuilder". Questo TransportBuilder è un'istanza di \Magento\Framework\Mail\Template\TransportBuilder.

In quel file $transportesiste una variabile, che è un'istanza di \Magento\Framework\Mail\TransportInterface. Poiché esiste un'interfaccia, esiste anche una classe regolare chiamata \Magento\Framework\Mail\Transport. Quando apriamo il file vendor/magento/framework/Mail/Transport.php, vediamo che questo estende Zend_Mail_Transport_Sendmail;

classe Transport estende \ Zend_Mail_Transport_Sendmail implementa \ Magento \ Framework \ Mail \ TransportInterface

Questo e ciò che stai cercando. Utilizzando DI, sarai in grado di sostituire questo trasporto con un altro framework di posta elettronica anziché Zend_Mail, come Mandrill o Amazon SES.

Assicurati solo di includere il send()metodo poiché quello è il metodo chiamato 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);
    }
}

12

Magento 2 TransportBuilderutilizza un modello di email per comporre il corpo del messaggio. Il modo più semplice che ho trovato per inviare testo semplice: usa Zend_Mail(che è usato dallo stesso Magento 2):

$email = new \Zend_Mail();
$email->setSubject("Feedback email");
$email->setBodyText($body);
$email->setFrom($from, $nameFrom);
$email->addTo($to, $nameTo);
$email->send();

3
Se vuoi inviare il corpo sotto forma di html, puoi usare$email->setBodyHtml($body)
Anish Karim

questo è grande, tuttavia, nel caso in cui si sta utilizzando il protocollo SMTP tramite qualcosa come google quindi seguire questa discussione stackoverflow.com/questions/3455674/...
Ahdee

Ho provato questo su Magento ma ho riscontrato un errore Errore irreversibile: Errore irreversibile: Errore non rilevato: Classe 'Zend_Mail' non trovata in /srv/public_html/pub/test.php
Nagaraju K

@NagarajuK, hai incluso l'autloader del compositore nel tuo /srv/public_html/pub/test.php?
Alex Gusev,

No @AlexGusev mi puoi guidare su come aggiungere l'autloader del compositore nel mio file test.php?
Nagaraju K

8

c'è un presupposto spesso fatto che i PHP siano mail()obsoleti e non supportino il 3 °. servizi per feste.
Questo è in realtà sbagliato, come ogni 3 ° bene. il servizio per le feste supporta un'interfaccia SMTP, e così mail()pure.

Amazon SES supporta SMTP.

e l'invio tramite SMTP con mail()è descritto in questa risposta: /programming//a/14457410/716029


1
+1 per informazioni utili - ma sono ancora interessato a quali eventuali astrazioni Magento ha per supportare le varie e-mail tramite servizi HTTP.
Alan Storm,

Purtroppo, nessuna implementazione specifica oltre a Zend_Mail.
Peter Jaap Blaakmeer,

-1

Magento 2 utilizza la classe \ Magento \ Framework \ Mail \ Template \ TransportBuilder per inviare e-mail personalizzate.

È necessario creare un modulo semplice e impostare il file email_tempaltes.xml per definire i modelli di posta delle transazioni.

È possibile inviare posta dall'area Adminhtml o Frontend Scope.

Ho condiviso un link per la guida passo passo per inviare una mail personalizzata da Magento 2 utilizzando un modulo.

Invia posta personalizzata dal modulo Magento 2

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.