e-mail de confirmation de commande non envoyé dans magento 2

9

J'ai installé magento 2 sur mon serveur vps et configuré le courrier électronique du magasin comme celui-ci

mais l'e-mail de confirmation de commande n'enverra pas aux clients que dois-je faire, dois-je configurer cron comme un lien recommandé pour le faire ou dois-je configurer mon serveur comme ce lien quel est le problème?

ali gh
la source
Essayez avec cron configuré.
Dhiren Vasoya

Réponses:

14

Si vous avez correctement configuré les systèmes de messagerie Magento 2, vous devrez peut-être vérifier le point ci-dessous:

  1. Aller à Stores -> Configuration -> Advanced -> System

Sous Paramètres d'envoi de courrier, assurez-vous que la valeur Disable Email Communicationsest définie sur No. Vérifiez également vos champs Hostet Portsi vous utilisez un serveur de messagerie externe.

  1. Aller à Stores -> Configuration -> Sales -> Sales Emails

Sous l' onglet Paramètres généraux , choisissez Asynchronous sendingdeDisable

Sous l' Orderonglet EnabledpourYes

Maintenant, videz / rafraîchissez votre cache.

J'espère que cela vous aidera. Cette solution est testée avec Magento 2.1.0

Kamal Singh
la source
1
Il n'y a pas "d'envoi asynchrone"
Deepak Kamat
Quelle est la version de magento que vous utilisez?
Kamal Singh
C'est Magento / 2.2 (Communauté)
Deepak Kamat
J'ai un problème dans Magento 2.2.7
Pratik Mehta
ne fonctionne pas avec 2.2.7
Navin Bhudiya
4

Cela fonctionnera.

La classe transportbuilderbystore a déjà été dépréciée en 2.3 et le sera bientôt en 2.2.

Corrigé dans Magento 2.2.7.

Correction: vendeur / magento / module-sales / Model / Order / Email / SenderBuilder.php

remplacer

    $this->transportBuilderByStore->setFromByStore(
        $this->identityContainer->getEmailIdentity(),
        $this->identityContainer->getStore()->getId()
    );

avec

    $this->transportBuilder->setFrom(
        $this->identityContainer->getEmailIdentity(), 
        $this->identityContainer->getStore()->getId()
    ); 

fournisseur / magento / framework / Mail / Template / TransportBuilder.php

remplacer

/**
 * Set mail from address
 *
 * @param string|array $from
 * @return $this
 */
public function setFrom($from)
{
    $result = $this->_senderResolver->resolve($from);
    $this->message->setFrom($result['email'], $result['name']);
    return $this;
}

avec

/**
 * Set mail from address
 *
 * @param string|array $from
 * @return $this
 */
public function setFrom($from, $store = null)
{
    $result = $this->_senderResolver->resolve($from, $store);
    $this->message->setFrom($result['email'], $result['name']);
    return $this;
}

et juste comme ça, nous n'avons plus besoin de TransportBuilderByStore et cela fonctionne comme prévu.

Pratik Mehta
la source
1
ne fonctionne pas, si
j'utilise
Vérifiez ça. github.com/magento/magento2/issues/16355
Pratik Mehta
0

J'ai eu le même problème et j'ai découvert que le problème réel était dû à l'en-tête "from". Il était réglé deux fois pour une raison quelconque. Veuillez mettre à jour le fichier ci-dessous pour résoudre ce problème:

fournisseur \ magento \ framework \ Mail \ Template \ TransportBuilderByStore

public function setFromByStore($from, $store)
{
    $result = $this->senderResolver->resolve($from, $store);
    $this->message->setFrom($result['email'], $result['name']);

    return $this;
}

À

public function setFromByStore($from, $store)
{
    $result = $this->senderResolver->resolve($from, $store);

    if ($this->message->getFrom()) {
        $this->message->clearFrom();
    }

    $this->message->setFrom($result['email'], $result['name']);

    return $this;
}
Himmat Paliwal
la source
ne fonctionne pas cette solution pour moi 2.2.7
Navin Bhudiya