O M2 não vem pronto para uso, no entanto, é um recurso incorporado à estrutura do zend. Aqui está uma boa referência de como adicionar essa funcionalidade ao magento: https://blog.bitexpert.de/blog/sending-mails-with-attachments-in-magento-2/
Caso o link fique inoperante, crie o seguinte
<?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;
}
}
depois adicione 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>
Agora você pode usar em addAttachment()
todo o site.
A partir do Magento 2.2.7, as soluções descritas acima não funcionam mais desde que a
\Magento\Framework\Mail\Message
extensão caiu\Zend_Mail
.Para contornar a falta de uma maneira fácil de adicionar anexos por meio do construtor de transporte (que atualmente parece ser o local correto para essa função), é necessário criar um substituto para o TransportBuilder e usar
\Zend\Mime\Part
:Não se esqueça de substituir o original
\Magento\Framework\Mail\Template\TransportBuilder
pela sua implementação viadi.xml
.Observe que esta implementação provavelmente será interrompida com uma versão futura do Magento, que
\Magento\Framework\Mail\MessageInterface::setBody()
está obsoleta e pode ser removida em breve.HTH
fonte
Magento 2 Email personalizado do módulo, Não fornece anexo de imagem.
Se você quiser usar o anexo de imagem com modelos de email no Magento 2, precisará substituir a classe Magento \ Framework \ Mail \ Template \ TransportBuilder
O Magento Out-of-box não fornece recurso de anexo para email. Você pode consultar blogs para enviar anexo de imagem em detalhes,
Você precisa adicionar lógica como abaixo,
fonte
Aqui está a resposta perfeita para enviar pdf em E-mail em magetno 2.3
fonte
Como mencionado nas respostas anteriores, o magento2 não possui uma função pronta para enviar e-mails com anexos.
Não sei se é uma prática recomendada, mas você poderia chamar diretamente a
Zend_Mail
classe para fazê-lo, sem criar uma função personalizada e substituirMagento\Framework\Mail\Template\TransportBuilder
, como abaixofonte
Compatível com Magento 2.3.x:
Esta foi a minha resposta para o Magento 2.3, já que essa era uma pergunta importante no google e parece haver muita gente nos comentários procurando.
Em outros posts, parece haver muita vontade de sobrescrever a
TransportBuilder
classe padrãoetc/di.xml
, no entanto, o módulo no qual estou trabalhando é tão pequeno que não quero que seja responsável pelo padrãoTransportBuilder
então criei uma classe Helper (deveria provavelmente seja um modelo baseado em como está acoplado ao modelo de email declarado - mas discordo).O
TransportBuilder
não tem acesso público aoTransportInterface
, mas gera um clone toda vez e, em seguida, redefine o construtor. Achei mais fácil criar minhaTransportInterface
instância e anexar meusPart
objetos de anexo à mensagem do transporte. Se você achar necessário sobrescrever o padrãoTransportBuilder
via preferência de injeção de dependência, tenha cuidado ao atualizar métodos públicos. Lembre-se de praticar o O ao manter seu código SOLID !fonte
MessageInterface::getBody
assinatura do método mostra um tipo de retorno de sequência. Você pode ter que procurar em seuTransportInterface
objeto, mas posso dizer que oaddPart
método existe em umZend\Mime\Message
objeto. Desde magento provável estendeu essa classe para sua própriaMessage
classe, eu acho que seria inteligente para tentar$transport->getMessage()->addpart($part);