We sacrifice by not doing any other technology, so that you get the best of Magento.

We sacrifice by not doing any other technology, so that you get the best of Magento.

    If you want to implement “add file attachment in the email” functionality in Magento 2, then please follow the below step.

    Step 1) Create Vendor/Module/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="MagentoFrameworkMailTemplateTransportBuilder" type="VendorModuleModelMailTransportBuilder" />
    </config>

    Step 2) Please create the email template in Vendor/Module/view/frontend/email/email_template.html
    then after calling this file to Vendor/Module/etc/email_templates.xml

    Step 3) CreateTransportBuilder and extend with MagentoFrameworkMailTemplateTransportBuilder

    Create Vendor/Module/Model/Mail/TransportBuilder.php

    <?php
    namespace VendorModuleModelMail;
    
    use Zend_Mime;
    class TransportBuilder extends MagentoFrameworkMailTemplateTransportBuilder
    {
        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;
        }
    }
    

    Step 4) Send mail using controller in execute method
    Create Vendor/Module/Controller/Index/Index.php

    <?php
    namespace VendorModuleControllerIndex;
    
    use MagentoFrameworkAppActionContext;
    use MagentoFrameworkUrlFactory;
    use MagentoFrameworkAppFilesystemDirectoryList;
    use MagentoFrameworkTranslateInlineStateInterface;
    use VendorModuleModelMailTransportBuilder;
    use MagentoFrameworkAppConfigScopeConfigInterface;
    use MagentoStoreModelScopeInterface;
    use Zend_Mime;
    
    
    class Index extends MagentoCustomerControllerAbstractAccount {
        
        public function __construct(Context $context, 
            MagentoFrameworkFilesystem $fileSystem,
            StateInterface $inlineTranslation,
            TransportBuilder $transportBuilder,  
            ScopeConfigInterface $scopeConfig,
            UrlFactory $urlFactory, 
            MagentoFrameworkMessageManagerInterface $messageManager
        ) {
            $this->_filesystem = $fileSystem;
            $this->urlModel = $urlFactory->create ();
            $this->inlineTranslation = $inlineTranslation;
            $this->_transportBuilder = $transportBuilder;
            $this->scopeConfig = $scopeConfig;
            $this->messageManager = $messageManager;
            parent::__construct ( $context );
        }
        public function execute() {
            $objectManager = MagentoFrameworkAppObjectManager::getInstance();
            $storeurl = $objectManager->get( 'MagentoStoreModelStoreManagerInterface' )->getStore()->getBaseUrl();
            $result = array();
            $resultRedirect = $this->resultRedirectFactory->create ();
            if($_FILES['fileattach']['name']){
                try {
                    $uploader = $objectManager->create('MagentoMediaStorageModelFileUploader',['fileId' => 'fileattach']);
                    $uploader->setAllowedExtensions(['docx']);
                    $uploader->setAllowRenameFiles(true);
                    $uploader->setFilesDispersion(true);
                    // get media directory
                    $mediaDirectory = $this->_filesystem->getDirectoryRead(DirectoryList::MEDIA);
                    // save the image to media directory
                    
                    $result = $uploader->save($mediaDirectory->getAbsolutePath()."fileupload");
                    $email = $this->scopeConfig->getValue('trans_email/ident_general/email',ScopeInterface::SCOPE_STORE);
                    $name  = $this->scopeConfig->getValue('trans_email/ident_general/name',ScopeInterface::SCOPE_STORE);
                    $pdfFile = $result['path'].$result['file'];
                    $emailTemplateVariables['message'] = 'This is a test message.';
                    $this->inlineTranslation->suspend();
                    $this->_transportBuilder->setTemplateIdentifier('email_template') // Add your template name
                      ->setTemplateOptions(
                          [
                              'area' => MagentoFrameworkAppArea::AREA_FRONTEND,
                              'store' =>  $objectManager->get( 'MagentoStoreModelStoreManagerInterface' )->getStore()->getId(),
                          ]
                      )
                      ->setTemplateVars($emailTemplateVariables)
                      ->setFrom([
                          'name' => 'From Name',
                          'email' => "test1@gmail.com",
                      ])
                      ->addTo("test123@gmail.com", "To Name")
                      ->addAttachment(file_get_contents($pdfFile),$result['type'],Zend_Mime::DISPOSITION_ATTACHMENT,Zend_Mime::ENCODING_BASE64,$result['name']); //Attachment goes here.
                  try {
                      $transport = $this->_transportBuilder->getTransport();
                      $transport->sendMessage();
                      $this->inlineTranslation->resume();
                  } catch (Exception $e) {
                      echo $e->getMessage(); die;
                  }
                } catch (Exception $e) {
                    Zend_Debug::dump($e->getMessage());
                }
            }else{
                $url = $this->urlModel->getUrl ( '*/*/create', [ 
                        '_secure' => true 
                ] );
                $resultRedirect->setUrl ( $this->_redirect->error ( $url ) );
                $this->messageManager->addError(__('Please upload the document'));
                return $resultRedirect;
            }
          }
        }

     

    field_5bfb909c5ccae

      Get a Free Quote