How can I send email with attachment in magento 2.3.I already tried the way of custom TransportBuilder class from many answer but not working at all.I'm new to magento pls help me.

  • 1
    can you share your code? May 9, 2019 at 4:37

2 Answers 2


Finally I found the solution after two day.Here I found the module for magento 2.3 email attachment for anyone who face the problem like me.

Module Repo https://github.com/extait-com/email-attachment

Tutorial https://extait.com/blog/how-to-send-email-with-attachment-in-magento-2-3/

Thanks Extait


For Override TransportBuilder.php file in Magento 2, you need to create di.xml file.

Using di.xml file you can override any PHP class in Magento 2.

Create di.xml in your module,


<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
   <!-- Mail sending with attachment -->
   <preference for="\Magento\Framework\Mail\Template\TransportBuilder" type="Namespace\Modulename\Model\Mail\Template\TransportBuilder" />

Create TransportBuilder.php file at below location,


namespace Namespace\Modulename\Model\Mail\Template;

class TransportBuilder extends \Magento\Framework\Mail\Template\TransportBuilder
 public function addAttachment(
    $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;

Create helper file to send image attachment in mail template,

namespace Namespace\Modulename\Helper;

use Magento\Customer\Model\Session;

class Data extends \Magento\Framework\App\Helper\AbstractHelper
    const EMAIL_IDENTIFIER_TEMPLATE = 'custommodule/general/emailtemplate';

    protected $_inlineTranslation;

    protected $_storeManager;

    protected $_transportBuilder;

    public function __construct(
        \Magento\Framework\App\Helper\Context $context,
        \Magento\Framework\Translate\Inline\StateInterface $inlineTranslation,
        \Magento\Store\Model\StoreManagerInterface $storeManager,
        \Magento\Framework\Mail\Template\TransportBuilder $transportBuilder    ) 
        $this->_inlineTranslation = $inlineTranslation;
        $this->_storeManager = $storeManager;
        $this->_transportBuilder = $transportBuilder;

    public function mailSend() {

        $storeId = $this->_storeManager->getStore()->getStoreId();
        $templateName = $this->scopeConfig->getValue(

        $senderName = 'Sender name'; //store admin sender name
        $senderEmail = '[email protected]'; // store admin email id
        $recipientEmail = '[email protected]'; // recipient email id
        $recipientName = 'recipient name';

        if (!$senderEmail && !$recipientEmail) {
            return false;


                'area'  => \Magento\Framework\App\Area::AREA_FRONTEND,
                'store' => $storeId,
                    'order' => 'custom order data',
                    'store' => $this->_storeManager->getStore(),
           /*  image attachment logic */
            $image = 'abc.jpg'; //actual image name
            $mediaPath = 'image_dynamic_file_path'.$image; //set image path
            $body = file_get_contents($mediaPath);
            $imageName = pathinfo($image,PATHINFO_BASENAME);

                'name'  => $senderName,
                'email' => $senderEmail,
            ->addTo($recipientEmail, $recipientName);

        /* @var \Magento\Framework\Mail\Transport $transport */
        $transport = $this->_transportBuilder->getTransport();

        try {
        } catch (\Exception $e) {


Note: In above example i send image attachment

I hope it works! Thanks.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.