Magento 2: Envoi d'e-mails par programme

24

Magento 2 a-t-il une intégration intégrée avec les systèmes de délivrabilité des e-mails de transaction tiers comme Amazon SES, Mandrill, etc., ou la fonctionnalité de messagerie intégrée est-elle toujours basée sur la mailfonction de PHP ? Ou les e-mails sont-ils envoyés avec une troisième chose?

Si la réponse est mail, existe-t-il des extensions tierces comme SMTPPro pour Magento 2 qui permettraient à un développeur de remplacer le système de messagerie standard?

Alan Storm
la source

Réponses:

13

J'ai commencé à chercher dans la base de code de Magento 2 des chaînes telles que «e-mail», «message», etc. jusqu'à ce que je trouve quelque chose qui envoie un e-mail. Je suis tombé sur sendPaymentFailedEmail () dans vendor/magento/module-checkout/Helper/Data.php. Cela définit un grand nombre de variables mais les lie finalement à un objet de transport, qui est créé via un «transportBuilder». Ce transportBuilder est une instance de \Magento\Framework\Mail\Template\TransportBuilder.

Dans ce fichier, une $transportvariable existe, qui est une instance de \Magento\Framework\Mail\TransportInterface. Parce qu'il existe une interface, il existe également une classe régulière appelée \Magento\Framework\Mail\Transport. Lorsque nous ouvrons le fichier vendor/magento/framework/Mail/Transport.php, nous voyons que cela étend Zend_Mail_Transport_Sendmail;

classe Transport étend \ Zend_Mail_Transport_Sendmail implémente \ Magento \ Framework \ Mail \ TransportInterface

Voilà ce que vous recherchez. En utilisant DI, vous pourrez remplacer ce transport par un autre cadre de messagerie au lieu de Zend_Mail, tel que Mandrill ou Amazon SES.

Assurez-vous simplement d'inclure la send()méthode car c'est la méthode appelée 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
la source
12

Magento 2 TransportBuilderutilise un modèle d'e-mail pour composer le corps de l'e-mail. Le moyen le plus simple que j'ai trouvé pour envoyer du texte brut - utiliser Zend_Mail(qui est utilisé par Magento 2 lui-même):

$email = new \Zend_Mail();
$email->setSubject("Feedback email");
$email->setBodyText($body);
$email->setFrom($from, $nameFrom);
$email->addTo($to, $nameTo);
$email->send();
Alex Gusev
la source
3
Si vous souhaitez envoyer le corps sous forme de code html, vous pouvez utiliser$email->setBodyHtml($body)
Anish Karim
c'est génial, cependant, au cas où vous utilisez smtp via quelque chose comme google, suivez ce thread stackoverflow.com/questions/3455674/…
Ahdee
J'ai essayé ceci sur Magento mais j'obtiens une erreur Erreur fatale: Erreur fatale: Erreur non interceptée: Classe 'Zend_Mail' introuvable dans /srv/public_html/pub/test.php
Nagaraju K
@NagarajuK, avez-vous inclus le chargeur automatique du compositeur dans votre /srv/public_html/pub/test.php?
Alex Gusev
Non @AlexGusev pouvez-vous me guider sur la façon d'ajouter le chargeur automatique du compositeur dans mon fichier test.php?
Nagaraju K
8

il y a souvent une hypothèse selon laquelle les PHP sont mail()obsolètes et ne soutiennent aucun 3ème. services de fête.
C'est en fait faux, comme tout bon 3ème. le service de partie prend en charge une interface SMTP, et il en est de même mail()aussi.

Amazon SES prend en charge SMTP.

et l'envoi via SMTP avec mail()est décrit dans cette réponse: /programming//a/14457410/716029

Flyingmana
la source
1
+1 pour des informations utiles - mais je suis toujours intéressé par les abstractions éventuelles de Magento pour prendre en charge les différents e-mails via les services HTTP.
Alan Storm
Aucune implémentation spécifique à part Zend_Mail, malheureusement.
Peter Jaap Blaakmeer
-1

Magento 2 Utilise la classe \ Magento \ Framework \ Mail \ Template \ TransportBuilder pour envoyer des e-mails personnalisés.

Vous devez créer un module simple et définir le fichier email_tempaltes.xml pour définir vos modèles de courrier de transaction.

Vous pouvez envoyer du courrier à partir de la zone Adminhtml ou de l'étendue frontend.

J'ai partagé un lien pour un guide étape par étape pour envoyer un courrier personnalisé depuis Magento 2 à l'aide d'un module.

Envoyer un courrier personnalisé à partir du module Magento 2

Rakesh Jesadiya
la source