Attaching PDF file to email on Magento 2

attach-pdf-file-email-magento-2

In Magento 2, The lib/internal/Magento/Framework/Mail/Template/TransportBuilder Class takes responsibility for preparing and sending email, but it’s still lacking a method for attaching PDF files.

However, since the TransportBuilder Class uses Message class, which inherits from \Zend_Mail, we are now able to add attachments programmatically.

Here is how we do it.

Step 1: Create TransportBuilder Class

Step 2: Create sample Email Sending on Controller

<?php

namespace Vendor_Name\Module_Name\Controller\Adminhtml\Ticket;

use Magento\Backend\App\Action;
use Magento\Backend\App\Action\Context;
use Magento\Framework\Translate\Inline\StateInterface;
use Vendor_Name\Module_Name\Model\Mail\Template\TransportBuilder;
use Magento\Framework\App\Area;
use Magento\Store\Model\StoreManagerInterface;


/**
* Class SendMail
* @package Magenest\Ticket\Controller\Adminhtml\Ticket   ,
*/
class SendMail extends Action
{
   /**
    * @var StateInterface
    */
   protected $inlineTranslation;

   /**
    * @var TransportBuilder
    */
   protected $_transportBuilder;

   /**
    * @var StoreManagerInterface
    */
   protected $_storeManager;

   /**
    * SendMail constructor.
    * @param Context $context
    */
   public function __construct(
       Context $context,
       StateInterface $inlineTranslation,
       TransportBuilder $transportBuilder,
       StoreManagerInterface $storeManager
   ) {
       parent::__construct($context);
       $this->inlineTranslation = $inlineTranslation;
       $this->_transportBuilder = $transportBuilder;
       $this->_storeManager = $storeManager;
   }

   /**
    * @return $this
    */
   public function execute()
   {
       $resultPage = $this->resultRedirectFactory->create();
       $this->sendMail();
       return $resultPage->setPath('*/*/index');
   }
   /**
    * Send Mail to customer
    *
    * @param $eventName
    */
   public function sendMail()
   {
       $pdfFile = '.../email.pdf';
       $this->inlineTranslation->suspend();
       $transport = $this->_transportBuilder->setTemplateIdentifier('name_email_use')->setTemplateOptions(
           [
               'area' => Area::AREA_FRONTEND,
               'store' => $this->_storeManager->getStore()->getId(),
           ]
       )->setTemplateVars(
           [
               'message' => 'this is test with send mail',
           ]
       )->setFrom(
           [
               'email' => 'test@gmail.com',
               'name' => 'Test'
           ]
       )->addTo(
          'receiver@gmail.com', 'Receiver'
       )->addAttachment(file_get_contents($pdfFile))->getTransport();
       $transport->sendMessage();
       $this->inlineTranslation->resume();
   }}

That’s all for the coding part.

Try to run the controller and check the result on the receiver’s email.

You will see a PDF file in the sent email like in the image below.

Hope this topic is helpful for you. Don’t mind leaving your questions here if you have any problems.

 

 

Subscribe to our newsletter

Disclaimer:By clicking submit, you agree to share your contact information with us to receive news, announcements, and resources when they are available.
Relevant Entries
How to debug Magento 2 code with Xdebug and PhpStorm (Part 1)20170421072230
How To Configure LinkedIn API in Magento 220170919200011
Magento Solutions for Australia and Singapore Markets20160119072400