Подтверждение по электронной почте о новом заказе не отправляется


100

Я обновил свой веб-сайт до 1.9.1, и теперь мои клиенты не получают электронное письмо с подтверждением заказа.

Я попытался отправить сообщение через админ-панель, но ничего не происходит, также не получено письмо с обновлением.


Ответы:


96
  1. Начиная с Magento 1.9.1, электронные письма не отправляются непосредственно во время оформления заказа, а помещаются в очередь.
  2. Очередь обрабатывается через ваш cronjob Magento - убедитесь, что он настроен и работает правильно.
  3. Расширение AOE_Scheduler может помочь вам подтвердить, что ваш cronjob Magento настроен правильно и работает.

6
Убедитесь, что cron.shработает! Мы потратили целый день на отладку, чтобы обнаружить неверную конфигурацию cron.
forsvunnet

2
как узнать работает ли cron.php или нет?
Теджа Бхагаван Коллепара

2
Вы можете отслеживать журналы внутри / var / log / cron
Beto Castillo

У меня проблема с заказом электронной почты в Magento 2. Cron также работает, но почта не отправляется. Большинство задач cron отсутствуют в таблице базы данных. Как я могу решить это?
Магический код

@Magecode Я бы предложил сначала поискать конкретные вопросы по Magento 2. Если их нет, не стесняйтесь добавлять свой собственный вопрос с подробностями того, что вы нашли / исключили до сих пор.
Кристоф в Фуман

29

Есть 2 способа отправки писем из нашего магазина Magento 1.

  1. Используя cron
  2. Избегая cron

Если вы хотите избежать cron:

Откройте файл order.php по адресу

Приложение / код / ​​ядро ​​/ Mage / Продажа / Модель / Order.php

Линия # 1356,1450,

менять

//$mailer->setQueue($emailQueue)->send(); 

чтобы:

$mailer-> send();

В app/design/frontend/base/default/template/checkout/success.phtml: добавьте следующую строку. Страница с наибольшим успехом для прямой отправки почты.

$order = Mage::getModel('sales/order');
$incrementId = Mage::getSingleton('checkout/session')->getLastRealOrderId(); 
$order->loadByIncrementId($incrementId);
try{ 
    $order->sendNewOrderEmail();
} catch (Exception $ex) { 
    echo "Email Not Sent..."; 
}
$customer = Mage::getSingleton('customer/session')->getCustomer();
$email = $customer->getEmail();
//End Email Sending

отлично работает, нужно ли добавлять код в success.phtml becoz без этого, кажется, работает нормально
Сунет Калхара

3
Здравствуйте, рад это слушать. Нет необходимости добавлять какой-либо код, потому что транзакционная почта сразу же попадет на электронную почту.
Теджа Бхагаван Коллепара

1
Никогда не меняйте (или перезаписывайте) код поставщика - что произойдет при обновлении?
Бачи

20

я удалил следующий код почтовой очереди из Template.php, затем я начал получать электронную почту, когда заказ сделан заказчиком или когда я щелкнул отправить электронное письмо на вкладке «Продажи / Заказы» панели администратора.

Magento установил заказное письмо, которое будет отправлено по расписанию, а не по мгновенному письму ... вероятно, из-за производительности? Template.php и найти способ установить и запустить задание расписания для запуска каждые 5 минут ...

Template.php находится в => /app/code/core/Mage/Core/Model/Email/Template.php

   if ($this->hasQueue() && $this->getQueue() instanceof Mage_Core_Model_Email_Queue) { 

    /** @var $emailQueue Mage_Core_Model_Email_Queue */
        $emailQueue = $this->getQueue();
        $emailQueue->setMessageBody($text);
        $emailQueue->setMessageParameters(array(
                'subject'           => $subject,
                'return_path_email' => $returnPathEmail,
                'is_plain'          => $this->isPlain(),
                'from_email'        => $this->getSenderEmail(),
                'from_name'         => $this->getSenderName(),
                'reply_to'          => $this->getMail()->getReplyTo(),
                'return_to'         => $this->getMail()->getReturnPath(),
            ))
            ->addRecipients($emails, $names, Mage_Core_Model_Email_Queue::EMAIL_TYPE_TO)
            ->addRecipients($this->_bccEmails, array(), Mage_Core_Model_Email_Queue::EMAIL_TYPE_BCC);
        $emailQueue->addMessageToQueue();

        return true;
    }

Этот метод решил проблему, но подписка на новостную рассылку не работает. Возвращение к старому template.php решило проблему подписки на новостное письмо.
balajisoundar

14

Там два решения следующим образом:

Solution-01: Использование cron

Система> Конфигурация> Дополнительно> Система> Cron

Настройки по умолчанию:

Прежде всего, Magento 1.9+ полностью полагается на задания cron для отправки транзакционных электронных писем. Если у вас не было должным образом настроенных заданий cron, вам придется сделать это сейчас.

Прежде всего убедитесь, что вы настроили задачи cron в админке Magento под

Система> Конфигурация> Дополнительно> Система> Cron

Настройки по умолчанию:

Генерируйте расписания Каждое 15 Расписание на 20 пропущенных, если не выполняется в течение 15 Очистка истории Каждые 10 История успеха Срок службы 60 История ошибок Срок службы 600

Есть люди, которые предлагают изменить эти настройки, но, поскольку они не могут договориться о наилучшей комбинации, я бы предпочел оставить все как есть.

Затем вам нужно зайти в панель управления хостингом и настроить задания cron. В cPanel это в разделе Advanced> Cron Jobs. Настройте их на запуск каждые пять минут и используйте эту команду:

php -f /home/username/public_html/cron.php

Проверьте правильность указанного выше пути и наличие файла cron.php в корне вашей установки Magento (если вы только что обновились, так и должно быть). Измените имя пользователя на правильный аккаунт.

Теперь я изначально сделал ошибку, следуя советам разработчиков на xtento.com, которые говорят, что нужно использовать командную строку wget: wget -O / dev / null -q http://www.YOURDOMAIN.com/PATH_TO_MAGENTO/cron. PHP

Решение-02: Избегайте cron

Транзакционные электронные письма будут отправлены немедленно.

//app/code/core/Mage/Sales/Model/Order.php Line#1356,1450 
  //$mailer->setQueue($emailQueue)->send(); Change To 

          $mailer->send();

app/design/frontend/base/default/template/checkout/success.phtml
    //add following line Top success page for sending mail direct
    // Start Send Emai Here......
    $order = Mage::getModel('sales/order');
    $incrementId = Mage::getSingleton('checkout/session')->getLastRealOrderId(); 
    $order->loadByIncrementId($incrementId);

    try{ $order->sendNewOrderEmail();} 
    catch (Exception $ex) { echo "Email Not Sent..."; }
    $customer = Mage::getSingleton('customer/session')->getCustomer();
    $email = $customer->getEmail();//End Email Sending

10

С Magento 1.9 все электронные письма будут поставлены в очередь и позже отправлены через Cron.

Magento 1.9 Release Note

Если вы хотите, чтобы ваши электронные письма с транзакциями отправлялись через Cron, вы можете установить cron из System > Configuration > System на вкладке Cron ИЛИ создать cron в Cpanel и направить его в ваш cron.sh или cron.php, расположенный в корневом каталоге Magento.


10

Просто установите расширение «SMTP Pro Email»: http://www.magentocommerce.com/magento-connect/smtp-pro-email-free-custom-smtp-email.html

Заполните ваши пользовательские SMTP-данные и готово.


Это заняло у меня два полных дня, чтобы понять. Нет необходимости в Cron Jobs, хотя, если вы хотите, чтобы работали cron, и вы не хотели делать вышеуказанное, вы можете сделать следующее:

Отредактируйте cron.php в корневом каталоге Magento

После:

$isShellDisabled = (stripos(PHP_OS, win’) === false) ? $isShellDisabled : true;

добавьте эту строку кода:

$isShellDisabled = true;

Настройка Cron Job

На панели C откройте раздел Cron Jobs.
Создайте задание cron, которое будет запускать следующую команду каждые 15 минут:

php -f /home/USERNAME/public_html/domain.com/magento_folder/cron.php

Важно отметить, что с SMTP Pro эта конфигурация должна быть выполнена для Magento 1.9.1 и выше: Система -> Конфигурация -> SMTP Pro -> Конфигурация очереди -> Изменение использования очереди с По умолчанию на Никогда.
Шреник

8

В Magento 1.9.1.0 Magento добавила новую функцию: они сохраняют электронную почту заказа в core_email_queueтаблице для отправки электронной почты заказов. Мы должны установить на cron.phpсервере

cron.phpФайл установить core_email_queue_send_allв хрон таблице расписания. Когда крона выполняет метод send, вызванный из Mage_Core_Model_Email_Queue. Они отправляют почту клиенту.

Так что вышеприведенное исправление работает без каких-либо изменений в основном файле.


6

Просто выполните настройку cron на вашем сервере, как показано ниже, и вы начнете получать письма с продажами.

php -q /home/YOUR_USER_NAME/public_html/Path_to_cron.php

Используйте общие настройки как "*****"

Необходимо заменить YOUR_USER_NAME & Path_to_cron.php на ваш.


6

Используя n98-magerun, я просто запускаю следующее:

n98-magerun sys:cron:run core_email_queue_send_all

Или время, если вы не хотите запускать его все время:

watch -n 10 n98-magerun sys:cron:run core_email_queue_send_all

Это отправляет все электронные письма в очереди каждые 10 секунд.


6

для сервера Godaddy используйте следующий код при настройке cronjob:

*   *   *   *   *   /usr/local/bin/php -q /home/steelwa/public_html/project_name/cron.php

Это будет работать каждую минуту.введите описание изображения здесь


5

если это ТОЛЬКО электронное письмо с заказом не отправляется, то это потому, что Magento ставит в очередь только электронные письма с заказами и сохраняет их для отправки в пакетном режиме. Если у вас нет настройки Heartbeat Cron ... тогда они никогда не покинут очередь Magento.

Вы видите, как выходят другие электронные письма Magento, потому что они передаются непосредственно из Magento вашему демону почтовой программы. Те очереди Magento (как электронная почта заказа) даже не передаются демону почтовой программы, пока не запустится Hearbeat Cron.

Чтобы заставить их выйти ... перейдите на http://yourmagentodomain.com/cron.php и продолжайте обновлять эту страницу каждые пять минут, и вы увидите, что электронные письма с очередями начинают выходить. Сердцебиение Крон должен сделать это для вас. Да, и когда вы переходите к этому файлу cron.php, страница должна быть пустой, так что не пугайтесь ... она будет работать.


5

У меня была такая же проблема, и я узнал, что это связано с расширением. Почтовые вложения Fooman были обновлены до v0.10.4. Версии ниже v0.10.3 не будут работать с Magento 1.9.


5

Я следил за базой знаний, чтобы она заработала: http://www.magentocommerce.com/knowledge-base/entry/ee1141-ce191-responsive-email#contact-info

В части «Локализация транзакционных электронных писем», следуя предыдущим инструкциям, при копировании в / en_UK наконец-то поступили электронные письма (включая ранее не отправленные), у нас также была проблема с тем, что страница подтверждения заказа не отображалась для клиентов на завершение. Это было исправлено также.

Например, для локали en_GB вам необходимо скопировать файлы, расположенные по адресу:

Приложение / локаль / en_US / шаблон / электронной почты

к месту:

Приложение / локаль / en_GB / шаблон / электронной почты


2
Добро пожаловать в Magento SE! Можете ли вы уточнить свой ответ (предложив примеры кода и т. Д.)?
отметки

3

Если ваша почтовая система (smtp, zend_mail) работает нормально; отключение mailQueue может решить вашу проблему.

/app/code/core/Mage/Core/Model/Email/Template.php

Смена строки 407

if ($this->hasQueue() && $this->getQueue() instanceof Mage_Core_Model_Email_Queue) {

в

if (false /\*$this->hasQueue() && $this->getQueue() instanceof Mage_Core_Model_Email_Queue\*/) {

5
это нарушает функциональность контактной формы.
Зоя

9
Не редактировать ядро
Кевин Шредер

1
Пожалуйста, не предоставляйте решения, которые требуют изменений в CORE. Основные классы никогда не должны быть изменены.
Асан Хорани,

2

Если у вас есть расширение SMTPpro, попробуйте отключить его. И проверьте еще раз. Все электронные письма работают нормально, и вам нужно только правильно настроить.


0

Лучший способ - сделать копию вашего приложения / кода / ядра / мага / ядра / модели / электронной почты / шаблона / Mailer.php

К вашей локальной папке приложения / код / ​​локальный / маг / ядро ​​/ модель / электронная почта / шаблон / Mailer.php

Затем закомментируйте эту строку в строке 76

->setQueue($this->getQueue())

Тогда все готово. Нет необходимости изменять шаблон success.phtml. : D

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.