M2 не поставляется из коробки, однако это функция, встроенная в Zend Framework. Вот хороший справочник, как добавить эту функциональность в magento: https://blog.bitexpert.de/blog/sending-mails-with-attachments-in-magento-2/
Если ссылка не работает, создайте следующее
<?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;
}
}
затем добавьте в 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>
Теперь вы можете использовать по addAttachment()
всему сайту.
Начиная с Magento 2.2.7, решения, описанные выше, больше не работают, так как
\Magento\Framework\Mail\Message
отбрасывание расширяется\Zend_Mail
.Чтобы обойти отсутствие простого способа добавления вложений через построитель транспорта (который в настоящее время кажется правильным местом для такой функции), необходимо создать замену для TransportBuilder и использовать
\Zend\Mime\Part
:Не забудьте заменить оригинал
\Magento\Framework\Mail\Template\TransportBuilder
вашей реализацией черезdi.xml
.Обратите внимание, что эта реализация, скорее всего, выйдет из
\Magento\Framework\Mail\MessageInterface::setBody()
строя с выходом Magento, поскольку она устарела и может быть удалена в ближайшее время.НТН
источник
Magento 2 Пользовательская электронная почта от модуля, не обеспечивает прикрепление изображения.
Если вы хотите использовать вложение изображений с шаблонами электронной почты в Magento 2, вам нужно переопределить класс, Magento \ Framework \ Mail \ Template \ TransportBuilder
Magento Out-of-box не предоставляет функцию прикрепления к электронной почте. Вы можете ссылаться на блоги для отправки изображений в деталях,
Вы должны добавить логику, как показано ниже,
источник
Вот идеальный ответ для отправки PDF в электронной почте в Magetno 2,3
источник
Совместимость с Magento 2.3.x:
Это был мой ответ для Magento 2.3, так как это был главный вопрос в Google, и, похоже, в комментариях просматривалось много людей.
В других постах, похоже, есть большое желание переписать
TransportBuilder
класс по умолчанию черезetc/di.xml
, однако модуль, над которым я работаю, настолько мал, что я не хочу, чтобы он отвечал за стандарт,TransportBuilder
поэтому я создал класс Helper (должен вероятно, это будет модель, основанная на том, насколько она связана с объявленным шаблоном электронной почты - но я отвлекся).TransportBuilder
Не имеет доступа общественности кTransportInterface
, но вместо этого создает клон каждый раз, а затем сбрасывает строитель. Я обнаружил, что проще создать свойTransportInterface
экземпляр, а затем прикрепитьPart
объекты вложения к сообщению транспорта. Если вы считаете необходимым перезаписать значениеTransportBuilder
по умолчанию с помощью предпочтения внедрения зависимостей, будьте осторожны при обновлении открытых методов. Не забывайте практиковать букву O, сохраняя ваш код SOLID !источник
MessageInterface::getBody
Метод подпись показывает строковый тип возвращаемого значения . Возможно, вам придется копаться в вашемTransportInterface
объекте, но я могу вам сказать, чтоaddPart
метод существует наZend\Mime\Message
объекте. Поскольку magento, вероятно, расширил этот класс для своего собственногоMessage
класса, я думаю, что было бы разумно попробовать$transport->getMessage()->addpart($part);
Как уже упоминалось в предыдущих ответах, magento2 не имеет встроенной функции отправки писем с вложениями.
Я не знаю, является ли это наилучшей практикой, но вы можете напрямую вызвать
Zend_Mail
класс, чтобы сделать это, без создания пользовательской функции и переопределенияMagento\Framework\Mail\Template\TransportBuilder
, как показано нижеисточник