M2 nie wchodzi w skład zestawu, ale jest to funkcja wbudowana w środowisko Zend. Oto dobre odniesienie, jak dodać tę funkcjonalność do magento: https://blog.bitexpert.de/blog/sending-mails-with-attachments-in-magento-2/
Jeśli link przestanie działać, utwórz następujące
<?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;
}
}
następnie dodaj do 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>
Teraz możesz korzystać z addAttachment()
całej witryny.
Począwszy od Magento 2.2.7 opisane powyżej rozwiązania już nie działają, ponieważ
\Magento\Framework\Mail\Message
porzucono rozszerzenie\Zend_Mail
.Aby obejść brak łatwego sposobu dodawania załączników za pomocą konstruktora transportu (który obecnie wydaje się właściwym miejscem dla takiej funkcji), należy utworzyć zamiennik TransportBuilder i skorzystać z
\Zend\Mime\Part
:Nie zapomnij zastąpić oryginału
\Magento\Framework\Mail\Template\TransportBuilder
swoją implementacją za pośrednictwemdi.xml
.Pamiętaj, że ta implementacja prawdopodobnie
\Magento\Framework\Mail\MessageInterface::setBody()
zepsuje się wraz z nadchodzącą wersją Magento, ponieważ jest przestarzała i może zostać wkrótce usunięta.HTH
źródło
Magento 2 Niestandardowy e-mail z modułu, nie zawiera załącznika do obrazu.
Jeśli chcesz używać załącznika obrazu z szablonami e-mail w Magento 2, musisz zastąpić klasę, Magento \ Framework \ Mail \ Template \ TransportBuilder
Magento Out-of-box nie zapewnia funkcji załączników do wiadomości e-mail. Możesz odsyłać blogi w celu przesłania załącznika obrazu szczegółowo,
Musisz dodać logikę jak poniżej,
źródło
Oto idealna odpowiedź na przesłanie pdf w e-mailu w magetno 2.3
źródło
Kompatybilny z Magento 2.3.x:
To była moja odpowiedź dla Magento 2.3, ponieważ było to najważniejsze pytanie w Google i wydaje się, że wiele osób szuka komentarzy.
Wygląda na to, że w innych postach jest wiele chęci zastąpienia domyślnej
TransportBuilder
klasy poprzezetc/di.xml
, jednak moduł, nad którym pracuję, jest tak mały, że nie chcę, aby był odpowiedzialny za domyślny,TransportBuilder
więc zbudowałem klasę Pomocnika (powinien prawdopodobnie będzie modelem opartym na tym, jak jest powiązany z zadeklarowanym szablonem e-maila - ale przechodzę do dygresji).TransportBuilder
Nie ma publicznego dostępu doTransportInterface
, lecz za każdym razem generuje klon, a następnie resetuje Builder. Łatwiej było mi zbudowaćTransportInterface
instancję, a następnie dołączyćPart
obiekty załącznika do komunikatu transportu. Jeśli uznasz, że konieczne jest zastąpienie ustawień domyślnychTransportBuilder
za pomocą preferencji wstrzykiwania zależności, należy zachować ostrożność przy aktualizacji metod publicznych. Pamiętaj, aby ćwiczyć O , zachowując kod SOLID !źródło
MessageInterface::getBody
Podpis metoda pokazuje typ zwracany ciąg. Być może będziesz musiał przekopać się w swoimTransportInterface
obiekcie, ale mogę ci powiedzieć, żeaddPart
metoda istnieje naZend\Mime\Message
obiekcie. Ponieważ magento prawdopodobnie rozszerzyło tę klasę na własnąMessage
klasę, myślę, że byłoby mądre spróbować$transport->getMessage()->addpart($part);
Jak wspomniano w poprzednich odpowiedziach, magento2 nie ma gotowej funkcji do wysyłania wiadomości e-mail z załącznikami.
Nie wiem, czy jest to najlepsza praktyka, ale możesz wywołać bezpośrednio
Zend_Mail
klasę, aby to zrobić, bez tworzenia niestandardowej funkcji i zastępowaniaMagento\Framework\Mail\Template\TransportBuilder
, jak poniżejźródło