Magento 2: E-postayı Programlı Olarak Gönderme


24

Magento 2, üçüncü taraf işlem e-posta Amazon SES, Mandrill, vb. Gibi e-posta teslim etme sistemleriyle herhangi bir yerleşik entegrasyona sahip mi, yoksa dahili e-posta işlevi hala PHP'nin mailişlevine dayanıyor mu? Yoksa e-postalar üçüncü bir şeyle mi gönderiliyor?

Cevap ise mail, bir geliştiricinin standart e-posta sistemini değiştirmesine izin verecek SMTPPro for Magento 2 gibi üçüncü taraf uzantıları var mı?

Yanıtlar:


13

Bir e-posta gönderen bir şey bulana kadar Magento 2 kod tabanında 'e-posta', 'mesaj' vb. Gibi dizeleri aramaya başladım. SendPaymentFailedEmail () 'in üzerine tökezledi vendor/magento/module-checkout/Helper/Data.php. Bu, pek çok değişken belirler ancak sonunda onları bir 'transportBuilder' ile oluşturulan bir transport nesnesine bağlar. Bu transportBuilder bir örneğidir \Magento\Framework\Mail\Template\TransportBuilder.

Bu dosyada, $transportbir örneği olan bir değişken var \Magento\Framework\Mail\TransportInterface. Arayüz olduğu için denilen düzenli bir sınıf da var \Magento\Framework\Mail\Transport. Dosyayı vendor/magento/framework/Mail/Transport.phpaçtığımızda, bunun Zend_Mail_Transport_Sendmail;

sınıf Aktarımı \ Zend_Mail_Transport_Sendmail \ Magento \ Framework \ Mail \ TransportInterface öğelerini uygular

Aradığın şey bu. DI kullanarak, bu aktarımı, Mandrill veya Amazon SES gibi Zend_Mail yerine başka bir e-posta çerçevesiyle değiştirebilirsiniz.

Sadece bu send()yöntemi içerdiğinden emin olun çünkü o yöntemde 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, e-postanın gövdesini oluşturmak için bir e-posta şablonu kullanır. Düz metin göndermeyi bulduğum en basit yol - kullan Zend_Mail(Magento 2'nin kendisi tarafından kullanılıyor):

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

3
Gövdeyi html biçiminde göndermek istiyorsanız, kullanabilirsiniz$email->setBodyHtml($body)
Anish Karim

Bu harika, ancak google gibi bir şeyle smtp kullanıyorsanız, daha sonra bu konuyu takip edin stackoverflow.com/questions/3455674/…
Ahdee

Bunu Magento'da denedim ama bir hata aldım Ölümcül hata: Ölümcül hata: Yakalanmamış Hata: Sınıf 'Zend_Mail' /srv/public_html/pub/test.php adresinde bulunamadı
Nagaraju K

@ NagarajuK, bestecinin yazarını içine aldın /srv/public_html/pub/test.phpmı?
Alex Gusev

Hiçbir @AlexGusev, test.php dosyama nasıl besteci autloader ekleneceği konusunda bana rehberlik eder mi?
Nagaraju K

8

PHP'lerin mail()modası geçmiş olduğu ve herhangi bir üçüncüsü desteklemediği konusunda sık sık yapılan bir varsayım var . parti hizmetleri
Bu, her 3 üncüde olduğu gibi yanlış. parti servisi bir SMTP arayüzünü destekler ve aynı şekilde yapar mail().

Amazon SES, SMTP'yi desteklemektedir.

ve ile birlikte SMTP yoluyla gönderme mail()bu yanıtta açıklanmıştır: /programming//a/14457410/716029


1
Faydalı bilgiler için +1 - ancak Magento'nun çeşitli e-postaları HTTP hizmetleri aracılığıyla desteklemek için sahip olduğu soyutlamalar nelerdir.
Alan Storm

Maalesef Zend_Mail dışında belirli bir uygulama yok.
Peter Jaap Blaakmeer

-1

Magento 2 Özel e-posta göndermek için \ Magento \ Framework \ Mail \ Template \ TransportBuilder sınıfını kullanır.

İşlem posta şablonlarınızı tanımlamak için basit bir modül oluşturmanız ve email_tempaltes.xml dosyasını ayarlamanız gerekir .

Adminhtml veya Frontend Scope alanından posta gönderebilirsiniz.

Bir modül kullanarak Magento 2'den özel bir posta göndermek için adım adım kılavuz için bir bağlantı paylaştığım.

Magento 2 Modülünden Özel Posta Gönder

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.