Прежде всего, да, это еще один вопрос / тема об электронной почте 1.9.1. Но речь идет не о каких-либо проблемах cron (таких как эта или эта ) или о том, что новая функция очереди не используется (как эта ).
В нашем случае у нас была проблема, что очередь ( core_email_queue
и core_email_queue_recipients
) просто не получала бы электронных писем о новых заказах или обновлениях заказов, и, следовательно, больше писем не отправлялось для чего-либо связанного с заказом, также cron отлично работает и вручную добавляет электронные письма в очередь работает, и они отправляются.
Странно то, что в нашей тестовой среде все работало. Даже когда мы начали работать с сегодняшнего дня в первые минуты, все письма были обработаны, но через несколько минут (без каких-либо дополнительных изменений в действующей системе) больше никаких новых писем не добавлялось в очередь. Кажется, что это произошло (но я не могу сказать наверняка), когда первый клиент использовал PayPal Express, который мы не тестировали заранее: - / И действительно, мы использовали некоторые пользовательские переопределения в логике PayPal Express со старой sendNewOrderEmail()
функцией. Но мы не могли заставить работать электронные письма снова, даже после того, как исправили их для использования queueNewOrderEmail()
.
Итак, первый вопрос: возможно ли, что старая функция вызвала некоторую несогласованность, которая «сломалась» очередь электронной почты? Или это просто большое совпадение и есть совершенно другое объяснение?
Поскольку мы не смогли найти проблему, но, разумеется, нам нужно было, чтобы письма снова работали как можно скорее, мы пошли на другое переопределение ядра. В Mage_Core_Model_Email_Template_Mailer
(конечно, в копии local
) мы закомментировали строку 76: ->setQueue($this->getQueue())
Это, кажется, обходит очередь, и все письма снова отправляются в старом порядке.
Однако, поскольку мы хотели бы свести к минимуму количество переопределений ядра, и мы также не можем прямо сейчас сказать, столкнемся ли мы с какими-либо другими побочными эффектами, любыми другими советами или решениями от людей с более глубоким пониманием кода magento и очередь электронной почты будет оценена.
Обновление для 1.9.2: при обновлении до 1.9.2 мы снова внимательно рассмотрели очередь электронной почты и не смогли воспроизвести проблему. Но поскольку мы до сих пор не имеем реального представления о том, в чем заключалась проблема с 1.9.1, и поскольку переопределение Mage_Core_Model_Email_Template_Mailer::send()
все еще работает описанным здесь способом, мы все еще не используем очередь. Таким образом, мы надеемся, что не будем снова сталкиваться с той же проблемой через некоторое время в производстве.
tl; dr: в 1.9.1 очередь электронной почты не работает, закомментируя строку 76 в Mage_Core_Model_Email_Template_Mailer
обход очереди электронной почты, и письма отправляются снова, но это не похоже на хорошее решение. Как это можно решить лучше?
источник
exception.log
или, возможноsystem.log
, есть какие-нибудь подсказки там?core
т. Д., Чтобы убедиться, что все не настроено или расширение установлено и немодифицировано и оно есть). Права доступа соответствуют старой настройке, а журналы / отчеты чистые.core_email_queue_send_all
запуск каждую минуту и откуда мы видим, что он на самом деле выполняется.Ответы:
Я предполагаю, что настройка cron.php для запуска каждую минуту привела к тому, что многие вещи встали друг на друга, то есть не закончили до того, как выполнится следующая запланированная задача того же характера или аналогичная. Поскольку оба cron.php не будут знать о каждом состоянии. Одна и та же запись может быть предпринята дважды, что приведет к нечетному исключению, нарушающему отправку электронной почты в очереди.
С учетом вышесказанного, есть
Mage::Log
исключения в почтовой программе очереди, поэтому проверка того, включено ли ведение журнала, будет лучшим шагом, чтобы определить, есть ли исключения. Также может быть целесообразно просто запуститьphp -f cron.php
из CLI, чтобы увидеть, вызывает ли он какие-либо исключения, вы можете не увидеть, что он работает за кулисами.Я бы также начал с простого
mail()
теста PHP, чтобы убедиться, что вы не сталкиваетесь ни с какими политиками спама или чем-то подобным. Просто чтобы быть уверенным, что это не что-то меньшее в стеке, вызывающее проблему.Просто некоторые предположения, надеюсь, это поможет!
* РЕДАКТИРОВАТЬ *
Используйте
cron.sh
вместо ,cron.php
как он будет делать ,grep ps
чтобы посмотреть , чтобы увидеть , если предыдущий процесс уже запущен.источник
Проверьте, имеют ли core_email_queue и core_email_queue_recipients AUTO_INCREMENT. Если в этой таблице нет AI, она не будет принимать новые записи.
источник