Magento 2: Gửi email theo chương trình


24

Magento 2 có tích hợp tích hợp nào với các hệ thống gửi email giao dịch của bên thứ ba như Amazon SES, Mandrill, v.v. hay chức năng email tích hợp vẫn dựa trên mailchức năng của PHP không? Hoặc là các email được gửi với một số điều thứ ba?

Nếu câu trả lời là mail, có bất kỳ tiện ích mở rộng của bên thứ ba nào như SMTPPro cho Magento 2 sẽ cho phép nhà phát triển thay thế hệ thống email tiêu chuẩn không?

Câu trả lời:


13

Tôi bắt đầu tìm kiếm xung quanh trong cơ sở mã Magento 2 để tìm các chuỗi như 'email', 'message', v.v. cho đến khi tôi tìm thấy thứ gì đó gửi email. Tôi tình cờ thấy sendPaymentFailedEmail () trong vendor/magento/module-checkout/Helper/Data.php. Điều này đặt ra rất nhiều biến số nhưng cuối cùng lại liên kết chúng với một đối tượng vận chuyển, được tạo ra thông qua một 'TransportBuilder'. TransportBuilder này là một ví dụ của \Magento\Framework\Mail\Template\TransportBuilder.

Trong tệp đó, một $transportbiến tồn tại, là một thể hiện của \Magento\Framework\Mail\TransportInterface. Bởi vì có một giao diện, cũng có một lớp thông thường được gọi \Magento\Framework\Mail\Transport. Khi chúng tôi mở tệp vendor/magento/framework/Mail/Transport.php, chúng tôi thấy rằng điều này mở rộng Zend_Mail_Transport_Sendmail;

lớp Giao thông vận tải mở rộng \ Zend_Mail_Transport_Sendmail thực hiện \ Magento \ Framework \ Mail \ TransportInterface

Đây là những gì bạn đang tìm kiếm. Sử dụng DI, bạn sẽ có thể thay thế phương thức vận chuyển này bằng một khung email khác thay vì Zend_Mail, chẳng hạn như Mandrill hoặc Amazon SES.

Chỉ cần chắc chắn bao gồm send()phương thức vì đó là phương thức được gọi trong 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 TransportBuildersử dụng một mẫu email để soạn cơ thể của email. Cách đơn giản nhất mà tôi tìm thấy để gửi văn bản đơn giản - sử dụng Zend_Mail(được sử dụng bởi chính Magento 2):

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

3
Nếu bạn muốn gửi phần thân dưới dạng html, bạn có thể sử dụng$email->setBodyHtml($body)
Anish Karim

tuy nhiên, điều này thật tuyệt vời, trong trường hợp bạn đang sử dụng smtp thông qua một cái gì đó như google thì hãy theo dõi chủ đề này stackoverflow.com/questions
43255674 / Giả

Tôi đã thử điều này trên Magento nhưng gặp lỗi Lỗi nghiêm trọng: Lỗi nghiêm trọng: Lỗi chưa được xử lý: Không tìm thấy lớp 'Zend_Mail' trong /srv/public_html/pub/test.php
Nagaraju K

@NagarajuK, bạn đã bao gồm trình tải tự động của nhà soạn nhạc vào máy của bạn /srv/public_html/pub/test.phpchưa?
Alex Gusev

Không @AlexGusev bạn có thể hướng dẫn tôi cách thêm trình tải tự động của nhà soạn nhạc vào tệp test.php của mình không?
Nagaraju K

8

có một giả định thường được đưa ra về việc PHP đang mail()lỗi thời và không hỗ trợ bất kỳ thứ 3 nào. dịch vụ tiệc tùng.
Điều đó thực sự sai, như mọi thứ 3 tốt. dịch vụ bên hỗ trợ giao diện SMTP và cũng mail()vậy.

Amazon SES không hỗ trợ SMTP.

và gửi qua SMTP với mail()được mô tả trong câu trả lời này: /programming//a/14457410/716029


1
+1 cho thông tin hữu ích - nhưng tôi vẫn quan tâm đến những gì, nếu có, trừu tượng Magento có để hỗ trợ các email khác nhau thông qua các dịch vụ HTTP.
Alan Storm

Không có triển khai cụ thể ngoài Zend_Mail, thật không may.
Peter Jaap Blaakmeer

-1

Magento 2 Sử dụng lớp \ Magento \ Framework \ Mail \ Template \ TransportBuilder để gửi email tùy chỉnh.

Bạn cần tạo một mô-đun đơn giản và đặt tệp email_tempaltes.xml để xác định các mẫu thư giao dịch của mình.

Bạn có thể gửi thư từ khu vực adminhtml hoặc Frontend Scope.

Tôi đã chia sẻ một liên kết cho hướng dẫn từng bước để gửi thư tùy chỉnh từ Magento 2 bằng mô-đun.

Gửi thư tùy chỉnh từ mô-đun Magento 2

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.