In Magento 2, The lib/internal/Magento/Framework/Mail/Template/TransportBuilder Class takes responsibility for preparing and sending emails, but it’s still lacking a method for attaching PDF files.
However, since the TransportBuilder Class uses the Message class, which inherits from \Zend_Mail, we are now able to add attachments programmatically.
Here is how we do it.
Table of Contents
Step 1: Create TransportBuilder Class
Step 2: Create a Sample Email to Send 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 contacting our high-level Magento experts for the most advanced solutions if you have any problems.
Show More
Hide




