M2 n'est pas livré avec, mais c'est une fonctionnalité intégrée au framework zend. Voici une bonne référence pour ajouter cette fonctionnalité dans magento: https://blog.bitexpert.de/blog/sending-mails-with-attachments-in-magento-2/
Dans le cas où le lien devient mort, créez ce qui suit
<?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;
}
}
puis ajoutez à 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>
Maintenant, vous pouvez utiliser addAttachment()
tout au long de votre site.
Depuis Magento 2.2.7, les solutions décrites ci-dessus ne fonctionnent plus depuis l'
\Magento\Framework\Mail\Message
extension abandonnée\Zend_Mail
.Pour contourner le manque d'un moyen facile d'ajouter des pièces jointes via le constructeur de transport (qui semble actuellement être le bon endroit pour une telle fonction), il faut créer un remplacement pour TransportBuilder et utiliser
\Zend\Mime\Part
:N'oubliez pas de remplacer l'original
\Magento\Framework\Mail\Template\TransportBuilder
par votre implémentation viadi.xml
.Notez que cette implémentation rompra probablement avec une prochaine version de Magento car elle
\Magento\Framework\Mail\MessageInterface::setBody()
est obsolète et peut être supprimée bientôt.HTH
la source
Magento 2 Courriel personnalisé du module, ne fournit pas de pièce jointe d'image.
Si vous souhaitez utiliser la pièce jointe Image avec des modèles d'e-mail dans Magento 2, vous devez remplacer la classe, Magento \ Framework \ Mail \ Template \ TransportBuilder
Magento Out-of-box ne fournit pas de fonction de pièce jointe pour les e-mails. Vous pouvez parrainer des blogs pour envoyer des images jointes en détail,
Vous devez ajouter une logique comme ci-dessous,
la source
Voici la réponse parfaite pour envoyer un pdf par e-mail dans magetno 2.3
la source
Compatible avec Magento 2.3.x:
Ce fut ma réponse pour Magento 2.3 car c'était une question majeure sur Google et il semble y avoir beaucoup de gens dans les commentaires.
Il semble y avoir beaucoup de désir dans d'autres articles sur le remplacement de la
TransportBuilder
classe par défaut viaetc/di.xml
, mais le module sur lequel je travaille est si petit que je ne veux pas qu'il soit responsable de la valeur par défautTransportBuilder
, j'ai donc construit une classe Helper (devrait être probablement un modèle basé sur la façon dont il est couplé au modèle d'e-mail déclaré - mais je m'écarte).Le
TransportBuilder
n'a pas d'accès public àTransportInterface
, mais génère à la place un clone à chaque fois, puis réinitialise le générateur. J'ai trouvé plus facile de créer monTransportInterface
instance, puis d'attacher mesPart
objets attachés au message du transport. Si vous trouvez nécessaire d'écraser la valeurTransportBuilder
par défaut via la préférence d'injection de dépendance, faites attention à la mise à jour des méthodes publiques. N'oubliez pas de pratiquer le O lorsque vous gardez votre code SOLIDE !la source
MessageInterface::getBody
signature de méthode montre un type de retour de chaîne. Vous devrez peut-être fouiller dans votreTransportInterface
objet, mais je peux vous dire que laaddPart
méthode existe sur unZend\Mime\Message
objet. Puisque magento a probablement étendu cette classe pour leur propreMessage
classe, je pense qu'il serait intelligent d'essayer$transport->getMessage()->addpart($part);
Comme mentionné dans les réponses précédentes, magento2 n'a pas de fonction prête à l'emploi pour envoyer des e-mails avec des pièces jointes.
Je ne sais pas si c'est une meilleure pratique, mais vous pouvez appeler directement la
Zend_Mail
classe pour le faire, sans créer de fonction personnalisée et remplacerMagento\Framework\Mail\Template\TransportBuilder
, comme ci-dessousla source