Нове підтвердження електронної пошти для замовлення не надсилається


100

Я оновив свій веб-сайт до 1.9.1, і тепер мої клієнти не отримують електронного листа з підтвердженням замовлення.

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


Відповіді:


96
  1. Починаючи з Magento 1.9.1, електронні листи не надсилаються безпосередньо під час оформлення замовлення, а натомість надходять у чергу.
  2. Черга обробляється за допомогою Magento cronjob - переконайтеся, що вона налаштована та працює правильно.
  3. Розширення AOE_Scheduler може допомогти вам у підтвердженні того, що ваш Magento cronjob був налаштований правильно та працює.

6
Переконайтеся, що cron.shпрацює! Ми щойно провели цілий день, налагоджуючи це лише для того, щоб виявити, що Cron був неправильно налаштований.
forsvunnet

2
як знати, чи працює cron.php чи ні?
Теха Бхагаван Коллепара

2
Ви можете простежити колоди всередині / var / log / cron
Beto Castillo

У мене є проблема з електронною поштою для замовлення в Magento 2. Cron також працює, але пошта не надсилається. Більшість завдань cron пропускаються в таблиці бази даних. Як я можу це вирішити?
Magecode

@Magecode Я б запропонував спочатку пошукати конкретні питання Magento 2. Якщо немає жодного, сміливо додайте власне запитання з подробицями про те, що ви знайшли / виключили досі.
Крістоф у Фомані

29

Існує 2 способи надсилання листів з нашого магазину Magento 1.

  1. За допомогою cron
  2. Уникаючи cron

Якщо ви хочете уникнути cron:

Відкрийте файл order.php за адресою

app / code / core / 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 без цього, здається, працює нормально
Suneth Kalhara

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

Існує два рішення наступним чином:

Рішення-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: Уникайте крона

Трансакційні електронні листи будуть надіслані миттєво.

//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

Якщо ви хочете, щоб ваші електронні листи транзакцій надсилалися через Cron, ви можете встановити cron із системи > Конфігурація > Система на вкладці 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 не потрібна, хоча якщо ви хочете, щоб завдання 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. Вони відправляють пошту замовнику.

Отже, вище виправлення працює без будь-яких змін у файлі core.


6

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

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 Heartbeat повинен зробити це за вас. О, і коли ви переходите до цього файлу 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 вам потрібно буде скопіювати файли, розташовані за адресою:

app / locale / en_US / шаблон / електронна пошта

до місця розташування:

app / locale / 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. Основні класи ніколи не повинні змінюватися.
Ahsan Horani

2

Якщо у вас є розширення SMTPpro, спробуйте його відключити. І ще раз перевірте. Всі електронні листи працюють добре, і вам потрібно лише правильно налаштувати.


0

Кращий спосіб - це зробити копію програми / код / ​​core / Mage / Core / Model / Email / Template / Mailer.php

До програми локальної папки / код / ​​локальний / Mage / Core / Модель / Електронна пошта / Шаблон / Mailer.php

Потім прокоментуйте цей рядок у рядку 76

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

Тоді ти закінчиш. Не потрібно змінювати шаблон success.phtml. : D

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