M2 tidak keluar dari kotak tetapi itu adalah fitur yang dibangun ke dalam kerangka zend. Berikut ini adalah referensi yang bagus bagaimana cara menambahkan fungsi ini ke dalam magento: https://blog.bitexpert.de/blog/sending-mails-with-attachments-in-magento-2/
Jika tautannya mati, buat yang berikut ini
<?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;
}
}
lalu tambahkan ke 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>
Sekarang Anda dapat menggunakan addAttachment()
seluruh situs Anda.
Pada Magento 2.2.7 solusi yang dijelaskan di atas tidak berfungsi lagi sejak
\Magento\Framework\Mail\Message
dijatuhkan\Zend_Mail
.Untuk menghindari kurangnya cara mudah untuk menambahkan lampiran melalui pembangun transportasi (yang saat ini tampaknya menjadi tempat yang tepat untuk fungsi seperti itu), kita perlu membuat pengganti untuk TransportBuilder dan menggunakan
\Zend\Mime\Part
:Jangan lupa ganti yang asli
\Magento\Framework\Mail\Template\TransportBuilder
dengan implementasi Anda viadi.xml
.Perhatikan bahwa implementasi ini mungkin akan berakhir dengan rilis Magento yang akan datang
\Magento\Framework\Mail\MessageInterface::setBody()
sudah usang dan mungkin akan segera dihapus.HTH
sumber
Magento 2 Email khusus dari Modul, Tidak menyediakan lampiran gambar.
Jika Anda ingin menggunakan lampiran gambar dengan templat email di Magento 2 Anda harus menimpa kelas, Magento \ Framework \ Mail \ Template \ TransportBuilder
Magento Out-of-box tidak menyediakan fitur lampiran untuk email. Anda dapat merujuk blog untuk mengirim lampiran gambar secara detail,
Anda perlu menambahkan logika seperti di bawah ini,
sumber
Inilah jawaban sempurna untuk mengirim pdf dalam Email di magetno 2.3
sumber
Seperti disebutkan oleh jawaban sebelumnya, magento2 tidak memiliki fungsi out-of-the-box untuk mengirim email dengan lampiran.
Saya tidak tahu apakah ini adalah praktik terbaik, tetapi Anda dapat memanggil langsung
Zend_Mail
kelas untuk melakukannya, tanpa membuat fungsi khusus dan menimpanyaMagento\Framework\Mail\Template\TransportBuilder
, seperti di bawah inisumber
Kompatibel dengan Magento 2.3.x:
Ini adalah jawaban saya untuk Magento 2.3 karena ini adalah pertanyaan teratas di google dan sepertinya ada banyak orang di komentar mencari.
Tampaknya ada banyak keinginan dalam posting lain tentang menimpa
TransportBuilder
kelas default melaluietc/di.xml
, namun modul yang saya kerjakan sangat kecil sehingga saya tidak ingin bertanggung jawab atas defaultTransportBuilder
sehingga saya membangun kelas Helper (harus mungkin model yang didasarkan pada bagaimana digabungkan ke template email yang dinyatakan - tapi saya ngelantur).Tidak
TransportBuilder
memiliki akses publik keTransportInterface
, tetapi menghasilkan klon setiap kali dan kemudian me-reset pembangun. Saya merasa lebih mudah untuk membangunTransportInterface
instance saya dan kemudian melampirkanPart
objek lampiran saya ke pesan transport. Jika Anda merasa perlu untuk menimpa defaultTransportBuilder
melalui preferensi injeksi ketergantungan, berhati-hatilah memperbarui metode publik. Ingatlah untuk berlatih O saat menjaga kode Anda SOLID !sumber
MessageInterface::getBody
tangan metode menunjukkan tipe pengembalian string. Anda mungkin harus menggali di dalamTransportInterface
objek Anda , tetapi saya dapat memberitahu Anda bahwaaddPart
metode ini ada padaZend\Mime\Message
objek. Karena magento kemungkinan memperpanjang kelas itu untuk kelas mereka sendiriMessage
, saya pikir akan lebih pintar untuk mencoba$transport->getMessage()->addpart($part);