M2 ist nicht im Lieferumfang enthalten, es ist jedoch eine Funktion, die in das zend-Framework integriert ist. Hier ist eine gute Referenz, wie man diese Funktionalität in Magento hinzufügt: https://blog.bitexpert.de/blog/sending-mails-with-attachments-in-magento-2/
Wenn der Link nicht mehr funktioniert, erstellen Sie Folgendes
<?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;
}
}
Fügen Sie dann zu etc / di.xml hinzu
<?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>
Jetzt können Sie addAttachment()
auf Ihrer gesamten Website verwenden.
Ab Magento 2.2.7 funktionieren die oben beschriebenen Lösungen nicht mehr, da
\Magento\Framework\Mail\Message
die Erweiterung entfällt\Zend_Mail
.Um das Fehlen einer einfachen Möglichkeit zum Hinzufügen von Anhängen über den Transport Builder (der derzeit der richtige Ort für eine solche Funktion zu sein scheint) zu umgehen, müssen Sie einen Ersatz für den TransportBuilder erstellen und Folgendes verwenden
\Zend\Mime\Part
:Vergessen Sie nicht, das Original
\Magento\Framework\Mail\Template\TransportBuilder
durch Ihre Implementierung über zu ersetzendi.xml
.Beachten Sie, dass diese Implementierung wahrscheinlich mit einem bevorstehenden Release von Magento
\Magento\Framework\Mail\MessageInterface::setBody()
abbricht, da es veraltet ist und möglicherweise bald entfernt wird.HTH
quelle
Magento 2 Benutzerdefinierte E-Mail vom Modul, Bietet keinen Bildanhang.
Wenn Sie einen Bildanhang mit E-Mail-Vorlagen in Magento 2 verwenden möchten, müssen Sie die Klasse Magento \ Framework \ Mail \ Template \ TransportBuilder überschreiben
Magento Out-of-Box bietet keine Anhangsfunktion für E-Mails. Sie können Blogs zum Senden von Bildanhängen in Details verweisen,
Sie müssen Logik wie unten hinzufügen,
quelle
Hier ist die perfekte Antwort, um ein PDF in E-Mail in magetno 2.3 zu senden
quelle
Wie in den vorherigen Antworten erwähnt, verfügt magento2 nicht über eine sofort einsatzbereite Funktion zum Versenden von E-Mails mit Anhängen.
Ich weiß nicht, ob es sich um eine bewährte Methode handelt, aber Sie können direkt
Zend_Mail
class aufrufen , um dies zu tun, ohne eine benutzerdefinierte Funktion zu erstellen und zu überschreibenMagento\Framework\Mail\Template\TransportBuilder
(siehe unten)quelle
Magento 2.3.x kompatibel:
Dies war meine Antwort für Magento 2.3, da dies eine Top-Frage bei Google war und es scheint, dass viele Leute in den Kommentaren suchen.
Es scheint , über das Überschreiben der Standard viel Lust in anderen Beiträgen zu sein
TransportBuilder
Klasse überetc/di.xml
, aber das Modul I auf mich arbeiten , ist so klein , dass ich will nicht , dass es für die Standard verantwortlich seinTransportBuilder
, damit ich eine Helper - Klasse gebaut (sollte wahrscheinlich ein Modell basierend darauf, wie gekoppelt es mit der deklarierten E-Mail-Vorlage ist - aber ich schweife ab).Der
TransportBuilder
hat keinen öffentlichen Zugriff auf denTransportInterface
, sondern generiert stattdessen jedes Mal einen Klon und setzt dann den Builder zurück. Ich fand es einfacher, meineTransportInterface
Instanz zu erstellen und dann meine AnhangsobjektePart
an die Nachricht des Transports anzuhängen . Wenn Sie den StandardwertTransportBuilder
über die Abhängigkeitsinjektionseinstellung überschreiben müssen , müssen Sie die öffentlichen Methoden sorgfältig aktualisieren. Denken Sie daran, das O zu üben, wenn Sie Ihren Code SOLID halten !quelle
MessageInterface::getBody
Methodensignatur zeigt einen Stringrückgabetyp. Möglicherweise müssen Sie in IhremTransportInterface
Objekt herumgraben, aber ich kann Ihnen sagen, dass dieaddPart
Methode für einZend\Mime\Message
Objekt vorhanden ist. Da Magento wahrscheinlich diese Klasse für sich erweitertMessage
Klasse, ich glaube , es klug wäre , zu versuchen$transport->getMessage()->addpart($part);