Xác nhận email đơn hàng mới không được gửi


Câu trả lời:


96
  1. Bắt đầu với Magento 1.9.1, các email sẽ không được gửi trực tiếp trong quá trình thanh toán mà thay vào đó đang được xếp hàng.
  2. Hàng đợi đang được xử lý thông qua cronjob Magento của bạn - vui lòng đảm bảo rằng hàng này đã được thiết lập và đang chạy chính xác.
  3. Tiện ích mở rộng AOE_Scheduler có thể giúp bạn xác nhận rằng cronjob Magento của bạn đã được cấu hình đúng và đang chạy.

6
Hãy chắc chắn cron.shlà đ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.
forsvunnet

2
Làm thế nào để biết cron.php có hoạt động hay không?
Teja Bhagavan Kollepara

2
Bạn có thể theo dõi nhật ký bên trong / var / log / cron
Beto Castillo

Tôi gặp vấn đề với email đặt hàng trong Magento 2. Cron cũng đang chạy nhưng thư không gửi. Hầu hết các tác vụ cron bị bỏ lỡ trong bảng cơ sở dữ liệu. Làm thế nào tôi có thể giải quyết nó?
Magecode

@Magecode Tôi khuyên bạn nên tìm kiếm Magento 2 câu hỏi cụ thể trước tiên. Nếu không có ai cảm thấy thoải mái để thêm câu hỏi của riêng bạn với các chi tiết về những gì bạn đã tìm thấy / loại trừ cho đến nay.
Kristof tại Fooman

29

Có 2 phương thức để gửi thư từ cửa hàng Magento 1 của chúng tôi.

  1. Bằng cách sử dụng cron
  2. Bằng cách tránh cron

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

làm việc một cách hoàn hảo, đó là cần thiết để thêm mã trên success.phtml becoz mà không có nó dường như làm việc tốt
Suneth Kalhara

3
Xin chào hạnh phúc khi nghe điều này. Không cần thêm bất kỳ mã nào vì thư giao dịch sẽ chuyển đến email ngay lập tức.
Teja Bhagavan Kollepara

1
Không bao giờ thay đổi (hoặc ghi đè, đối với vấn đề đó) mã nhà cung cấp - điều gì xảy ra khi bạn nâng cấp?
Bachi

20

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;
    }

Phương pháp này đã giải quyết được vấn đề, nhưng đăng ký bản tin không hoạt động. Quay trở lại mẫu cũ.php đã giải quyết vấn đề đăng ký thư tin tức.
balajisoundar

14

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

10

Với Magento 1.9, tất cả các email sẽ được xếp hàng và sau đó gửi qua Cron.

Lưu ý phát hành Magento 1.9

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.


10

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:

Chỉnh sửa cron.php trong thư mục gốc Magento

Sau:

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

thêm dòng mã này:

$isShellDisabled = true;

Thiết lập công việc định kỳ

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

Điều quan trọng cần lưu ý là với SMTP Pro, cấu hình này phải được thực hiện cho Magento 1.9.1 trở lên: Hệ thống -> Cấu hình -> SMTP Pro -> Cấu hình hàng đợi -> Sử dụng hàng đợi thay đổi từ Mặc định thành Không bao giờ.
Shrenik

8

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_queuebảng để gửi email của các đơn đặt hàng. Chúng ta phải thiết lập cron.phpmáy chủ

Các cron.phptập tin thiết lập core_email_queue_send_allbả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.


6

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.


6

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.


6

đối với máy chủ godaddy, hãy sử dụng mã sau trong khi thiết lập cronjob:

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

Điều này sẽ chạy mỗi phút.nhập mô tả hình ảnh ở đây


5

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.


5

Tôi có cùng một vấn đề và phát hiện ra rằng nó có liên quan đến một phần mở rộng. Phần đính kèm email Fooman hiện đã được cập nhật lên v0.10.4. Các phiên bản bên dưới v0.10.3 sẽ không hoạt động với Magento 1.9.


5

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


2
Chào mừng đến với Magento SE! Bạn có thể giải thích sâu hơn về câu trả lời của bạn (đưa ra các ví dụ mã, v.v.) không?
đánh dấu

3

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\*/) {

5
Điều này phá vỡ chức năng hình thức liên lạc.
Zoya

9
Không chỉnh sửa lõi
Kevin Schroeder

1
Vui lòng không cung cấp giải pháp yêu cầu thay đổi đối với CORE. Các lớp cốt lõi không bao giờ được thay đổi.
Ahsan Horani

2

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.


0

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.