Magento 2: Mengirim Email Secara Programatis

24

Apakah Magento 2 memiliki integrasi built-in dengan sistem pengiriman email transaksi pihak ketiga seperti Amazon SES, Mandrill, dll., Atau apakah fungsionalitas email bawaan masih berbasis di sekitar mailfungsi PHP ? Atau apakah email yang dikirim dengan hal ketiga?

Jika jawabannya adalah mail, apakah ada ekstensi pihak ketiga seperti SMTPPro untuk Magento 2 yang akan membiarkan pengembang mengganti sistem email standar?

Alan Storm
sumber

Jawaban:

13

Saya mulai mencari-cari string basis kode Magento 2 seperti 'email', 'message', dll hingga saya menemukan sesuatu yang mengirim email. Saya menemukan sendPaymentFailedEmail () di vendor/magento/module-checkout/Helper/Data.php. Ini menetapkan banyak variabel tetapi akhirnya mengikat mereka ke objek transportasi, yang dibuat melalui 'transportBuilder'. TransportBuilder ini adalah turunan dari \Magento\Framework\Mail\Template\TransportBuilder.

Dalam file itu, $transportada variabel, yang merupakan turunan dari \Magento\Framework\Mail\TransportInterface. Karena ada antarmuka, ada juga kelas reguler yang disebut \Magento\Framework\Mail\Transport. Ketika kita membuka file vendor/magento/framework/Mail/Transport.php, kita melihat bahwa ini meluas Zend_Mail_Transport_Sendmail;

Transport kelas meluas \ Zend_Mail_Transport_Sendmail mengimplementasikan \ Magento \ Framework \ Mail \ TransportInterface

Ini yang kamu cari. Dengan menggunakan DI, Anda dapat mengganti transportasi ini dengan kerangka kerja email lain alih-alih Zend_Mail, seperti Mandrill atau Amazon SES.

Pastikan untuk memasukkan send()metode karena itu adalah metode yang dipanggil sendMessage();

public function sendMessage()
{
    try {
        parent::send($this->_message);
    } catch (\Exception $e) {
        throw new \Magento\Framework\Exception\MailException(new \Magento\Framework\Phrase($e->getMessage()), $e);
    }
}
Peter Jaap Blaakmeer
sumber
12

Magento 2 TransportBuildermenggunakan templat email untuk menyusun tubuh email. Cara paling sederhana yang saya temukan untuk mengirim teks - gunakan Zend_Mail(yang digunakan oleh Magento 2 sendiri):

$email = new \Zend_Mail();
$email->setSubject("Feedback email");
$email->setBodyText($body);
$email->setFrom($from, $nameFrom);
$email->addTo($to, $nameTo);
$email->send();
Alex Gusev
sumber
3
Jika Anda ingin mengirim tubuh dalam bentuk html, Anda dapat menggunakan$email->setBodyHtml($body)
Anish Karim
ini bagus, namun, jika Anda menggunakan smtp melalui sesuatu seperti google kemudian ikuti utas ini stackoverflow.com/questions/3455674/…
Ahdee
Saya sudah mencoba ini di Magento tetapi mendapatkan kesalahan. Kesalahan fatal: Kesalahan fatal: Kesalahan tidak tertangkap: Kelas 'Zend_Mail' tidak ditemukan di /srv/public_html/pub/test.php
Nagaraju K
@NagarajuK, apakah Anda memasukkan autloader komposer ke dalam Anda /srv/public_html/pub/test.php?
Alex Gusev
Tidak @AlexGusev dapatkah Anda membimbing saya tentang cara menambahkan autloader komposer dalam file test.php saya?
Nagaraju K
8

ada asumsi yang sering dibuat tentang PHP karena mail()ketinggalan zaman dan tidak mendukung ke-3. layanan pesta.
Itu sebenarnya salah, karena setiap 3 bagus. layanan pihak mendukung antarmuka SMTP, dan mail()juga demikian.

Amazon SES mendukung SMTP.

dan mengirim melalui SMTP dengan mail()dijelaskan dalam jawaban ini: /programming//a/14457410/716029

Flyingmana
sumber
1
+1 untuk informasi bermanfaat - tetapi saya masih tertarik pada apa, jika ada, abstraksi yang dimiliki Magento untuk mendukung berbagai email melalui layanan HTTP.
Alan Storm
Sayangnya, tidak ada implementasi spesifik selain Zend_Mail.
Peter Jaap Blaakmeer
-1

Magento 2 Menggunakan \ Magento \ Framework \ Mail \ Template \ TransportBuilder kelas untuk mengirim email khusus.

Anda perlu membuat modul sederhana dan mengatur file email_tempaltes.xml untuk mendefinisikan template email transaksi Anda.

Anda dapat mengirim email dari Adminhtml atau area Lingkup Frontend.

Saya telah membagikan tautan untuk panduan langkah demi langkah untuk mengirim surat khusus dari Magento 2 menggunakan modul.

Kirim Surat Kustom dari Modul Magento 2

Rakesh Jesadiya
sumber