Ответы:
cron.sh
работает! Мы потратили целый день на отладку, чтобы обнаружить неверную конфигурацию cron.
Есть 2 способа отправки писем из нашего магазина Magento 1.
Если вы хотите избежать 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
я удалил следующий код почтовой очереди из 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;
}
Там два решения следующим образом:
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
С Magento 1.9 все электронные письма будут поставлены в очередь и позже отправлены через Cron.
Если вы хотите, чтобы ваши электронные письма с транзакциями отправлялись через Cron, вы можете установить cron из System > Configuration > System на вкладке Cron ИЛИ создать cron в Cpanel и направить его в ваш cron.sh или cron.php, расположенный в корневом каталоге Magento.
Просто установите расширение «SMTP Pro Email»: http://www.magentocommerce.com/magento-connect/smtp-pro-email-free-custom-smtp-email.html
Заполните ваши пользовательские SMTP-данные и готово.
Это заняло у меня два полных дня, чтобы понять. Нет необходимости в Cron Jobs, хотя, если вы хотите, чтобы работали cron, и вы не хотели делать вышеуказанное, вы можете сделать следующее:
После:
$isShellDisabled = (stripos(PHP_OS, ‘win’) === false) ? $isShellDisabled : true;
добавьте эту строку кода:
$isShellDisabled = true;
На панели C откройте раздел Cron Jobs.
Создайте задание cron, которое будет запускать следующую команду каждые 15 минут:
php -f /home/USERNAME/public_html/domain.com/magento_folder/cron.php
В Magento 1.9.1.0 Magento добавила новую функцию: они сохраняют электронную почту заказа в core_email_queue
таблице для отправки электронной почты заказов. Мы должны установить на cron.php
сервере
cron.php
Файл установить core_email_queue_send_all
в хрон таблице расписания. Когда крона выполняет метод send, вызванный из Mage_Core_Model_Email_Queue
. Они отправляют почту клиенту.
Так что вышеприведенное исправление работает без каких-либо изменений в основном файле.
Просто выполните настройку cron на вашем сервере, как показано ниже, и вы начнете получать письма с продажами.
php -q /home/YOUR_USER_NAME/public_html/Path_to_cron.php
Используйте общие настройки как "*****"
Необходимо заменить YOUR_USER_NAME & Path_to_cron.php на ваш.
Используя 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 секунд.
если это ТОЛЬКО электронное письмо с заказом не отправляется, то это потому, что Magento ставит в очередь только электронные письма с заказами и сохраняет их для отправки в пакетном режиме. Если у вас нет настройки Heartbeat Cron ... тогда они никогда не покинут очередь Magento.
Вы видите, как выходят другие электронные письма Magento, потому что они передаются непосредственно из Magento вашему демону почтовой программы. Те очереди Magento (как электронная почта заказа) даже не передаются демону почтовой программы, пока не запустится Hearbeat Cron.
Чтобы заставить их выйти ... перейдите на http://yourmagentodomain.com/cron.php и продолжайте обновлять эту страницу каждые пять минут, и вы увидите, что электронные письма с очередями начинают выходить. Сердцебиение Крон должен сделать это для вас. Да, и когда вы переходите к этому файлу cron.php, страница должна быть пустой, так что не пугайтесь ... она будет работать.
Я следил за базой знаний, чтобы она заработала: http://www.magentocommerce.com/knowledge-base/entry/ee1141-ce191-responsive-email#contact-info
В части «Локализация транзакционных электронных писем», следуя предыдущим инструкциям, при копировании в / en_UK наконец-то поступили электронные письма (включая ранее не отправленные), у нас также была проблема с тем, что страница подтверждения заказа не отображалась для клиентов на завершение. Это было исправлено также.
Например, для локали en_GB вам необходимо скопировать файлы, расположенные по адресу:
Приложение / локаль / en_US / шаблон / электронной почты
к месту:
Приложение / локаль / en_GB / шаблон / электронной почты
Если ваша почтовая система (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\*/) {
Если у вас есть расширение SMTPpro, попробуйте отключить его. И проверьте еще раз. Все электронные письма работают нормально, и вам нужно только правильно настроить.
Лучший способ - сделать копию вашего приложения / кода / ядра / мага / ядра / модели / электронной почты / шаблона / Mailer.php
К вашей локальной папке приложения / код / локальный / маг / ядро / модель / электронная почта / шаблон / Mailer.php
Затем закомментируйте эту строку в строке 76
->setQueue($this->getQueue())
Тогда все готово. Нет необходимости изменять шаблон success.phtml. : D