M2 no viene listo para usar, sin embargo, es una característica integrada en el marco zend. Aquí hay una buena referencia sobre cómo agregar esta funcionalidad a magento: https://blog.bitexpert.de/blog/sending-mails-with-attachments-in-magento-2/
En caso de que el enlace se bloquee, cree lo siguiente
<?php
namespace Your\CustomModule\Magento\Mail\Template;
class TransportBuilder
extends \Magento\Framework\Mail\Template\TransportBuilder
{
public function addAttachment(
$body,
$mimeType = Zend_Mime::TYPE_OCTETSTREAM,
$disposition = Zend_Mime::DISPOSITION_ATTACHMENT,
$encoding = Zend_Mime::ENCODING_BASE64,
$filename = null
) {
$this->message->createAttachment($body, $mimeType, $disposition, $encoding, $filename);
return $this;
}
}
luego agregue a etc / di.xml
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<preference for="\Magento\Framework\Mail\Template\TransportBuilder"
type="\Your\CustomModule\Magento\Mail\Template\TransportBuilder" />
</config>
Ahora puede usarlo en addAttachment()todo su sitio.
A partir de Magento 2.2.7, las soluciones descritas anteriormente ya no funcionan ya que
\Magento\Framework\Mail\Messagedejó de extenderse\Zend_Mail.Para evitar la falta de una manera fácil de agregar archivos adjuntos a través del constructor de transporte (que actualmente parece ser el lugar correcto para tal función), es necesario crear un reemplazo para el TransportBuilder y utilizar
\Zend\Mime\Part:No olvide reemplazar el original
\Magento\Framework\Mail\Template\TransportBuilderpor su implementación a través dedi.xml.Tenga en cuenta que esta implementación probablemente se romperá con un próximo lanzamiento de Magento como
\Magento\Framework\Mail\MessageInterface::setBody()está en desuso y puede eliminarse pronto.HTH
fuente
Correo electrónico personalizado de Magento 2 desde el módulo, no proporciona datos adjuntos
Si desea utilizar archivos adjuntos de imágenes con plantillas de correo electrónico en Magento 2, debe anular la clase, Magento \ Framework \ Mail \ Template \ TransportBuilder
Magento listo para usar no proporciona la función de archivo adjunto para correo electrónico. Puede referir blogs para enviar datos adjuntos de imágenes en detalles,
Necesitas agregar lógica como a continuación,
fuente
Aquí hay una respuesta perfecta para enviar pdf en correo electrónico en magetno 2.3
fuente
Compatible con Magento 2.3.x:
Esta fue mi respuesta para Magento 2.3 ya que esta era una pregunta importante en Google y parece que hay mucha gente mirando los comentarios.
Parece que hay muchas ganas en otras publicaciones sobre sobrescribir la
TransportBuilderclase predeterminada a través deetc/di.xml, sin embargo, el módulo en el que estoy trabajando es tan pequeño que no quiero que sea responsable de la clase predeterminadaTransportBuilderasí que construí una clase auxiliar (debería probablemente sea un modelo basado en qué tan acoplado está a la plantilla de correo electrónico declarada, pero estoy divagando).El
TransportBuilderno tiene acceso público alTransportInterface, sino que genera un clon cada vez y luego restablece el generador. Me resultó más fácil construir miTransportInterfaceinstancia y luego adjuntar misPartobjetos adjuntos al mensaje del transporte. Si considera necesario sobrescribir el valor predeterminadoTransportBuildermediante la preferencia de inyección de dependencia, tenga cuidado al actualizar los métodos públicos. ¡Recuerde practicar el O cuando mantenga su código SOLIDO !fuente
MessageInterface::getBodyfirma del método muestra un tipo de retorno de cadena. Puede que tenga que cavar en suTransportInterfaceobjeto, pero puedo decirle que eladdPartmétodo existe en unZend\Mime\Messageobjeto. Dado que magento probablemente extendió esa clase para su propiaMessageclase, creo que sería inteligente intentarlo$transport->getMessage()->addpart($part);Como se mencionó en las respuestas anteriores, magento2 no tiene una función lista para usar para enviar correos con archivos adjuntos.
No sé si es una mejor práctica, pero podría llamar directamente a la
Zend_Mailclase para hacerlo, sin crear una función personalizada y anularMagento\Framework\Mail\Template\TransportBuilder, como se muestra a continuaciónfuente