Magento 2: การส่งอีเมลแบบเป็นโปรแกรม


24

Magento 2 มีการบูรณาการใด ๆ กับระบบส่งอีเมลธุรกรรมของบุคคลที่สามเช่น Amazon SES, Mandrill ฯลฯ หรือฟังก์ชั่นอีเมลในตัวยังทำงานโดยใช้mailฟังก์ชันของ PHP หรือไม่ หรืออีเมลที่ถูกส่งไปพร้อมกับสิ่งที่สามบางอย่าง?

หากคำตอบคือmailมีส่วนขยายของบุคคลที่สามเช่น SMTPPro สำหรับ Magento 2 ที่จะให้นักพัฒนาแทนที่ระบบอีเมลมาตรฐานหรือไม่

คำตอบ:


13

ฉันเริ่มค้นหารอบ ๆ ในโค้ดเบสของ Magento 2 เพื่อหาสตริงเช่น 'อีเมล', 'ข้อความ' ฯลฯ จนกว่าฉันจะพบสิ่งที่ส่งอีเมล ฉัน stumbled เมื่อ sendPaymentFailedEmail () vendor/magento/module-checkout/Helper/Data.phpใน ชุดนี้มีตัวแปรจำนวนมาก แต่ในที่สุดก็ผูกกับวัตถุการขนส่งซึ่งถูกสร้างขึ้นผ่าน 'transportBuilder' transportBuilder \Magento\Framework\Mail\Template\TransportBuilderนี่คือตัวอย่างของ

ในแฟ้มที่เป็นตัวแปรที่มีอยู่ซึ่งเป็นตัวอย่างของ$transport \Magento\Framework\Mail\TransportInterfaceเนื่องจากมีอินเตอร์เฟซ, \Magento\Framework\Mail\Transportนอกจากนี้ยังมีระดับปกติที่เรียกว่า เมื่อเราเปิดไฟล์vendor/magento/framework/Mail/Transport.phpเราจะเห็นว่านี่เป็นการขยาย Zend_Mail_Transport_Sendmail

การขนส่งระดับขยาย \ Zend_Mail_Transport_Sendmail ใช้ \ Magento \ Framework \ Mail \ TransportInterface

นี่คือสิ่งที่คุณกำลังมองหา เมื่อใช้ DI คุณจะสามารถแทนที่การขนส่งนี้ด้วยเฟรมเวิร์กอีเมลอื่นแทน Zend_Mail เช่น Mandrill หรือ Amazon SES

เพียงให้แน่ใจว่าได้รวมsend()วิธีการตั้งแต่นั้นเป็นวิธีการที่เรียกว่าใน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);
    }
}

12

Magento 2 TransportBuilderใช้เทมเพลตอีเมลเพื่อเขียนเนื้อหาของอีเมล วิธีที่ง่ายที่สุดที่ฉันพบว่าส่งข้อความธรรมดา - ใช้Zend_Mail(ที่ใช้โดย Magento 2 เอง):

$email = new \Zend_Mail();
$email->setSubject("Feedback email");
$email->setBodyText($body);
$email->setFrom($from, $nameFrom);
$email->addTo($to, $nameTo);
$email->send();

3
หากคุณต้องการส่งเนื้อหาในรูปแบบของ html คุณสามารถใช้$email->setBodyHtml($body)
Anish Karim

นี้เป็นสิ่งที่ดี แต่ในกรณีที่คุณใช้ smtp ผ่านบางสิ่งบางอย่างเช่น google จากนั้นทำตามเธรดstackoverflow.com/questions/3455674/…
Ahdee

ฉันได้ลองทำสิ่งนี้บน Magento แล้ว แต่ได้รับข้อผิดพลาดข้อผิดพลาดร้ายแรง: ข้อผิดพลาดร้ายแรง: ข้อผิดพลาดที่ไม่ได้ตรวจ: Class 'Zend_Mail' ไม่พบใน /srv/public_html/pub/test.php
Nagaraju K

@NagarajuK คุณรวมนักแต่งเพลงอัตโนมัติไว้ในของคุณ/srv/public_html/pub/test.phpหรือไม่?
Alex Gusev

ไม่มี @AlexGusev คุณสามารถแนะนำฉันเกี่ยวกับวิธีเพิ่มผู้แต่งอัตโนมัติในไฟล์ test.php ของฉันได้อย่างไร
Nagaraju K

8

มีข้อสันนิษฐานที่เกิดขึ้นบ่อยครั้งเกี่ยวกับ PHPs ที่mail()ล้าสมัยและไม่สนับสนุนสิ่งที่สาม บริการปาร์ตี้
นั่นเป็นสิ่งที่ผิดจริงเช่นเดียวกับที่ดีทุกอย่างที่ 3 บริการปาร์ตี้รองรับอินเทอร์เฟซ SMTP และก็mail()มีเช่นกัน

Amazon SES รองรับ SMTP

และการส่งผ่าน SMTP ด้วยmail()อธิบายไว้ในคำตอบนี้: /programming//a/14457410/716029


1
+1 สำหรับข้อมูลที่เป็นประโยชน์ - แต่ฉันยังสนใจในสิ่งที่ถ้ามี abstractions ที่วีโอไอพีมีเพื่อสนับสนุนอีเมลต่างๆผ่านบริการ HTTP
อลันสตอร์ม

ไม่มีการใช้งานเฉพาะนอกเหนือจาก Zend_Mail แต่น่าเสียดายที่
Peter Jaap Blaakmeer

-1

Magento 2 ใช้\ Magento \ Framework \ Mail \ Template \ TransportBuilderคลาสสำหรับส่งอีเมลแบบกำหนดเอง

คุณต้องสร้างโมดูลอย่างง่ายและตั้งค่าไฟล์email_tempaltes.xmlเพื่อกำหนดเทมเพลตเมลธุรกรรมของคุณ

คุณสามารถส่งจดหมายจาก Adminhtml หรือส่วนขอบเขต Frontend

ฉันได้แชร์ลิงก์สำหรับคำแนะนำทีละขั้นตอนเพื่อส่งอีเมลที่กำหนดเองจาก Magento 2 โดยใช้โมดูล

ส่งจดหมายที่กำหนดเองจาก Magento 2 Module

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.