Tôi đã nâng cấp trang web của mình lên 1.9.1 và hiện tại khách hàng của tôi không nhận được email xác nhận đơn hàng.
Tôi đã thử gửi qua bảng quản trị nhưng không có gì xảy ra, cũng không nhận được email cập nhật.
Tôi đã nâng cấp trang web của mình lên 1.9.1 và hiện tại khách hàng của tôi không nhận được email xác nhận đơn hàng.
Tôi đã thử gửi qua bảng quản trị nhưng không có gì xảy ra, cũng không nhận được email cập nhật.
Câu trả lời:
cron.sh
là đang chạy! Chúng tôi vừa dành cả ngày để gỡ lỗi này chỉ để phát hiện ra cron đã bị định cấu hình sai.
Có 2 phương thức để gửi thư từ cửa hàng Magento 1 của chúng tôi.
Nếu bạn muốn tránh cron:
Mở tệp order.php của bạn tại
ứng dụng / mã / lõi / Pháp sư / Bán hàng / Mô hình / Đặt hàng.php
Dòng # 1356,1450,
thay đổi
//$mailer->setQueue($emailQueue)->send();
đến:
$mailer-> send();
Trong app/design/frontend/base/default/template/checkout/success.phtml
: thêm dòng sau Trang thành công hàng đầu để gửi thư trực tiếp
$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
Tôi đã xóa mã hàng đợi thư sau khỏi Template.php, sau đó tôi bắt đầu nhận email khi đơn đặt hàng được đặt bởi khách hàng hoặc khi tôi nhấp gửi email từ tab "Bán hàng / Đơn hàng" của bảng quản trị.
Magento đã đặt email đơn đặt hàng được gửi theo lịch trình công việc thay vì email tức thì ... có lẽ vì lý do hiệu suất? (Tôi không biết tại sao, tôi rất mới với magento) ... tuy nhiên tôi sẽ đưa mã này trở lại Template.php và tìm cách thiết lập và chạy công việc lịch trình để chạy cứ sau 5 phút ...
Template.php được đặt trong => /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;
}
Có hai giải pháp như sau:
Giải pháp-01: Sử dụng cron
Hệ thống> Cấu hình> Nâng cao> Hệ thống> Cron
Các cài đặt mặc định là:
Trước hết, Magento 1.9+ phụ thuộc hoàn toàn vào các công việc định kỳ để gửi email giao dịch. Nếu trước đây bạn không có công việc định kỳ được thiết lập đúng cách, bạn sẽ phải thực hiện ngay bây giờ.
Trước hết, hãy đảm bảo bạn đã thiết lập các tác vụ cron trong quản trị viên Magento bên dưới
Hệ thống> Cấu hình> Nâng cao> Hệ thống> Cron
Các cài đặt mặc định là:
Tạo lịch biểu cứ sau 15 lịch trình trước 20 lần bị bỏ lỡ nếu không chạy trong vòng 15 lịch sử Dọn dẹp cứ sau 10 lịch sử thành công 60 lần Lịch sử thất bại trọn đời 600
Có những người đề xuất những cài đặt này nên được thay đổi, nhưng vì họ dường như không thể đồng ý với sự kết hợp tốt nhất, tôi muốn để nguyên như vậy.
Sau đó, bạn cần phải đi vào bảng điều khiển lưu trữ của mình và thiết lập các công việc định kỳ. Trong cPanel, nó nằm dưới Advanced> Cron Jobs. Thiết lập chúng để chạy cứ sau năm phút và sử dụng lệnh này:
php -f /home/username/public_html/cron.php
Kiểm tra xem đường dẫn trên có chính xác không và tệp cron.php có thực sự nằm trong thư mục gốc của bản cài đặt Magento của bạn không (nếu bạn vừa nâng cấp, thì nó phải như vậy). Thay đổi tên người dùng cho đúng tài khoản.
Bây giờ, ban đầu tôi đã phạm sai lầm khi làm theo lời khuyên của các nhà phát triển tại xtento.com, người nói rằng hãy sử dụng chuỗi lệnh wget: wget -O / dev / null -q http://www.YOURDOMAIN.com/PATH_TO_MAGENTO/cron. php
Giải pháp-02: Tránh cron
Email giao dịch sẽ được gửi ngay lập tức.
//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
Với Magento 1.9, tất cả các email sẽ được xếp hàng và sau đó gửi qua Cron.
Nếu bạn muốn email giao dịch để được gửi thông qua Cron, bạn có thể đặt cron từ từ hệ thống > Cấu hình > Hệ thống dưới tab Cron HOẶC tạo cron trong Cpanel đạo nó để bạn cron.sh hoặc cron.php nằm trong thư mục gốc của web site Magento.
Chỉ cần cài đặt tiện ích mở rộng "Email Pro Email": http : //www.magentoc Commerce.com/magento-connect/smtp-pro-email-free-custom-smtp-email.html
Điền vào các chi tiết SMTP tùy chỉnh của bạn và thực hiện.
Điều này khiến tôi mất hai ngày để tìm hiểu. Không cần công việc Cron, mặc dù nếu bạn muốn công việc cron hoạt động và bạn không muốn làm những điều trên, bạn có thể làm như sau:
Sau:
$isShellDisabled = (stripos(PHP_OS, ‘win’) === false) ? $isShellDisabled : true;
thêm dòng mã này:
$isShellDisabled = true;
Trên Bảng C mở phần Công việc Cron
Tạo công việc định kỳ chạy lệnh sau mỗi 15 phút:
php -f /home/USERNAME/public_html/domain.com/magento_folder/cron.php
Trong Magento 1.9.1.0, Magento đã thêm một tính năng mới: Họ lưu trữ email đặt hàng trong core_email_queue
bảng để gửi email của các đơn đặt hàng. Chúng ta phải thiết lập cron.php
máy chủ
Các cron.php
tập tin thiết lập core_email_queue_send_all
bảng lịch trình cron. Khi crone thực hiện phương thức "gửi" được gọi từ Mage_Core_Model_Email_Queue
. Họ gửi mail cho khách hàng.
Vì vậy, sửa chữa ở trên đang làm việc mà không có bất kỳ thay đổi trong tập tin cốt lõi.
Chỉ cần thực hiện thiết lập cron trên máy chủ của bạn như lệnh dưới đây và sau đó bạn sẽ bắt đầu nhận được thư bán hàng.
php -q /home/YOUR_USER_NAME/public_html/Path_to_cron.php
Sử dụng các cài đặt phổ biến là "*****"
Cần thay thế YOU_USER_NAME & Path_to_cron.php bằng của bạn.
Sử dụng n98-magerun tôi chỉ cần chạy như sau:
n98-magerun sys:cron:run core_email_queue_send_all
Hoặc theo thời gian nếu bạn không muốn chạy nó mọi lúc:
watch -n 10 n98-magerun sys:cron:run core_email_queue_send_all
Điều này sẽ gửi tất cả các email trong hàng đợi cứ sau 10 giây.
nếu CHỈ là email đơn đặt hàng không gửi, đó là vì Magento chỉ xếp hàng các email đặt hàng và lưu chúng để gửi chúng theo đợt. Nếu bạn không cài đặt Heartbeat Cron .. thì họ sẽ không bao giờ rời khỏi hàng đợi Magento.
Bạn đang thấy các email Magento khác bị mất vì chúng được chuyển trực tiếp từ Magento đến trình nền thư của bạn. Những hàng đợi Magento (như email đặt hàng) thậm chí không được trao cho daemon người gửi thư cho đến khi Cron Hearbeat chạy.
Để buộc họ ra ngoài ... điều hướng đến http://yourmagentodomain.com/cron.php và tiếp tục làm mới trang đó cứ năm phút một lần và bạn sẽ thấy các email đặt hàng xếp hàng bắt đầu tắt. Heartbeat Cron có nhiệm vụ làm điều này cho bạn. Ồ, và khi bạn điều hướng đến tệp cron.php đó, trang được cho là trống để không bị báo động ... nó sẽ hoạt động.
Tôi đã theo dõi cơ sở kiến thức để làm cho nó hoạt động: http : //www.magentoc Commerce.com/ledgeledge-base/entry/ee1141-ce191-responsive-email#contact-info
Trong phần "Bản địa hóa email giao dịch", sau khi làm theo các hướng dẫn trước đó, sao chép vào / en_UK cuối cùng cũng nhận được email trên đường đi của họ (bao gồm cả những email trước đây không được gửi), chúng tôi cũng gặp vấn đề với trang xác nhận đơn hàng không được hiển thị cho khách hàng trên hoàn thành. Điều này cũng đã được sửa.
Ví dụ: đối với miền địa phương en_GB, bạn sẽ cần sao chép các tệp được đặt tại:
ứng dụng / ngôn ngữ / en_US / mẫu / email
đến địa điểm:
ứng dụng / ngôn ngữ / en_GB / mẫu / email
Nếu hệ thống thư của bạn (smtp, zend_mail) hoạt động tốt; vô hiệu hóa mailQueue có thể giải quyết vấn đề của bạn.
/app/code/core/Mage/Core/Model/Email/Template.php
Thay đổi dòng 407
if ($this->hasQueue() && $this->getQueue() instanceof Mage_Core_Model_Email_Queue) {
đến
if (false /\*$this->hasQueue() && $this->getQueue() instanceof Mage_Core_Model_Email_Queue\*/) {
Nếu bạn có tiện ích mở rộng SMTPpro hơn hãy thử tắt nó. Và kiểm tra lại. Tất cả các email hoạt động tốt và bạn chỉ cần cấu hình chính xác.
Cách tốt hơn là tạo một bản sao của ứng dụng / mã / lõi / Mage / Core / Model / Email / Template / Mailer.php của bạn
Đến ứng dụng thư mục cục bộ / mã / cục bộ / Mage / Core / Model / Email / Template / Mailer.php
Sau đó nhận xét dòng này trong dòng 76
->setQueue($this->getQueue())
Vậy là xong. Không cần phải sửa đổi mẫu thành công. :CƯỜI MỞ MIỆNG