Magento 2: envío de correo electrónico mediante programación

24

¿Magento 2 tiene alguna integración integrada con sistemas de entrega de correo electrónico de transacciones de terceros como Amazon SES, Mandrill, etc., o la funcionalidad de correo electrónico integrada todavía se basa en la mailfunción de PHP ? ¿O se envían los correos electrónicos con alguna tercera cosa?

Si la respuesta es mail, ¿hay extensiones de terceros como SMTPPro para Magento 2 que permitirían a un desarrollador reemplazar el sistema de correo electrónico estándar?

Alan Storm
fuente

Respuestas:

13

Comencé a buscar en la base de código de Magento 2 cadenas como 'correo electrónico', 'mensaje', etc. hasta que encontré algo que envía un correo electrónico. Me topé con sendPaymentFailedEmail () en vendor/magento/module-checkout/Helper/Data.php. Esto establece muchas variables, pero finalmente las vincula a un objeto de transporte, que se crea a través de un 'transportBuilder'. Este transportBuilder es una instancia de \Magento\Framework\Mail\Template\TransportBuilder.

En ese archivo, $transportexiste una variable, que es una instancia de \Magento\Framework\Mail\TransportInterface. Como hay una interfaz, también hay una clase regular llamada \Magento\Framework\Mail\Transport. Cuando abrimos el archivo vendor/magento/framework/Mail/Transport.php, vemos que esto extiende Zend_Mail_Transport_Sendmail;

El transporte de clase se extiende \ Zend_Mail_Transport_Sendmail implementa \ Magento \ Framework \ Mail \ TransportInterface

Esto es lo que estás buscando. Con DI, podrá reemplazar este transporte con otro marco de correo electrónico en lugar de Zend_Mail, como Mandrill o Amazon SES.

Solo asegúrese de incluir el send()método ya que ese es el método llamado 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
fuente
12

Magento 2 TransportBuilderutiliza plantillas de correo electrónico para componer el cuerpo del correo electrónico. La forma más sencilla que encontré para enviar texto sin formato: uso Zend_Mail(que es utilizado por 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
fuente
3
Si desea enviar el cuerpo en forma de html, puede usar$email->setBodyHtml($body)
Anish Karim
esto es genial, sin embargo, en caso de que esté utilizando smtp a través de algo como google, siga este hilo stackoverflow.com/questions/3455674/…
Ahdee
He intentado esto en Magento pero obtengo un error Error fatal: Error fatal: Error no detectado: No se encuentra la clase 'Zend_Mail' en /srv/public_html/pub/test.php
Nagaraju K
@NagarajuK, ¿incluiste el cargador automático del compositor en tu /srv/public_html/pub/test.php?
Alex Gusev
No @AlexGusev, ¿puede guiarme sobre cómo agregar el cargador automático del compositor en mi archivo test.php?
Nagaraju K
8

a menudo se asume que los PHP están mail()desactualizados y no son compatibles con ningún tercero. servicios de fiesta.
Eso está realmente mal, como cada 3º bueno. party service admite una interfaz SMTP, y también lo hace mail().

Amazon SES es compatible con SMTP.

y el envío a través de SMTP mail()se describe en esta respuesta: /programming//a/14457410/716029

Flyingmana
fuente
1
+1 para obtener información útil, pero todavía estoy interesado en las abstracciones que Magento tiene para admitir los diversos correos electrónicos a través de los servicios HTTP.
Alan Storm
Desafortunadamente, no hay implementaciones específicas además de Zend_Mail.
Peter Jaap Blaakmeer
-1

Magento 2 utiliza la clase \ Magento \ Framework \ Mail \ Template \ TransportBuilder para enviar correos electrónicos personalizados.

Debe crear un módulo simple y configurar el archivo email_tempaltes.xml para definir sus plantillas de correo de transacciones.

Puede enviar correo desde el área Adminhtml o Frontend Scope.

He compartido un enlace para la guía paso a paso para enviar un correo personalizado desde Magento 2 usando un módulo.

Enviar correo personalizado desde el módulo Magento 2

Rakesh Jesadiya
fuente