Magento 2: Надсилання електронної пошти програмно


24

Чи має Magento 2 якусь вбудовану інтеграцію із системами доставки електронної пошти сторонніх операцій, такими як Amazon SES, Mandrill тощо, чи вбудована функція електронної пошти все ще базується на mailфункції PHP ? Або електронні листи надсилаються з якоюсь третьою справою?

Якщо відповідь є mail, чи є розширення сторонніх розробників, як SMTPPro для Magento 2, які б дозволяли розробнику замінити стандартну систему електронної пошти?

Відповіді:


13

Я почав шукати в кодовій базі Magento 2 рядки, такі як "електронна пошта", "повідомлення" тощо, поки не знайшов щось, що посилає електронний лист. Я натрапив на 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, але отримую помилку Фатальна помилка: Fatal error: Uncaught Error: Клас 'Zend_Mail' не знайдено в /srv/public_html/pub/test.php
Nagaraju K

@NagarajuK, ти включив автозавантажувач композитора до свого /srv/public_html/pub/test.php?
Олексій Гусєв

Ні @AlexGusev не може мене вказувати, як додати автозавантажувач композитора у мій файл test.php?
Nagaraju K

8

часто існує припущення про те, що PHP mail()застаріли і не підтримують жодного 3-го. партійні послуги.
Це насправді неправильно, як і кожен добрий 3-й. Партійна служба підтримує інтерфейс SMTP, і це mail()також.

Amazon SES підтримує SMTP.

і надсилання через SMTP з mail()описано у цій відповіді: /programming//a/14457410/716029


1
+1 для корисної інформації - але мене все ще цікавить, які, якщо такі є, абстракції, які Magento має для підтримки різних електронних повідомлень за допомогою HTTP-сервісів.
Алан Шторм

На жаль, жодних конкретних реалізацій, крім Zend_Mail.
Peter Jaap Blaakmeer

-1

Magento 2 Використовує \ Magento \ Framework \ Mail \ Шаблон \ Transport \ TransportBuilder клас для надсилання власної електронної пошти.

Вам потрібно створити простий модуль і встановити файл email_tempaltes.xml для визначення шаблонів пошти транзакцій.

Ви можете відправляти пошту з області адміністратора чи області Frontend.

Я поділився посиланням для покрокового керівництва для надсилання користувальницької пошти від Magento 2 за допомогою модуля.

Надішліть спеціальну пошту з модуля Magento 2

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.