Email đơn hàng mới được gửi hai lần


25

Tôi đang sử dụng Magento 1.9.1 và khi tạo một đơn hàng mới, cho dù đó là từ frontend hay Admin, hệ thống sẽ gửi 2 email - cả hai đều giống nhau!

Tôi đã xem trên mạng và tìm thấy một lỗi cũ và tôi không thể tìm thấy mã được đề cập để bình luận, nó cũng giống như là để làm với các đơn đặt hàng Paypal và đây không phải là trường hợp.

Tôi đã vô hiệu hóa TẤT CẢ các tiện ích mở rộng và đã thử và vẫn có cùng một vấn đề vì vậy tôi tin rằng đó không phải là sự cố Tiện ích mở rộng.


1
Bạn đã giải quyết vấn đề này? Thỉnh thoảng tôi cũng nhận được xác nhận đơn đặt hàng kép kỳ lạ và sử dụng bcc cho thư xác nhận. Không biết khách hàng có nhận được hai thư hay không, nhưng tôi không hy vọng như vậy.
Cáo

Email được gửi đến ai? Bạn đang kiểm tra với một trong những email quản trị của bạn?
SR_Magento

Tôi đang gặp vấn đề tương tự (người dùng đang nhận được hai email sau khi đặt hàng mới). Tôi không chắc chắn cho câu trả lời dưới đây và cả hai bảng "core_email_queue" và "core_email_queue_reciprons" đều trống, vì vậy tôi nghĩ đây không phải là trường hợp của tôi. Xin hãy giúp tôi về điều này.
Abi Sharma

Abi Sharma, tôi có cùng một vấn đề, tuy nhiên, tôi nhận được email trùng lặp ... bạn đã giải quyết vấn đề chưa? xin vui lòng cho tôi biết
Lior Loria

Câu trả lời:


48

Vấn đề này phải liên quan đến hệ thống Hàng đợi Email Magento mới, để lại các bản ghi mồ côi trên bảng Người nhận. Nếu đây là vấn đề của bạn, tôi gửi cho bạn một sửa chữa.

Hệ thống hàng đợi email Magento mới quản lý hai bảng này: core_email_queuecore_email_queue_reciprons . Cái trước xử lý các Tin nhắn email, và cái sau, Người nhận các tin nhắn này.

Bảng core_email_queue được xóa sạch khi các email trên Hàng đợi email Magento được gửi. Việc dọn dẹp này được thực hiện bởi một công việc tab cron có tên core_email_queue_clean_up , được xác định bên trong tệp cấu hình app / code / core / Mage / Core / etc / config.xm l. Mã thực hiện việc dọn dẹp được xác định trên hàm removeSentMessages trong lớp Mage_Core_Model_Resource_Email_Queue :

/**
 * Remove already sent messages
 *
 * @return Mage_Core_Model_Resource_Email_Queue
 */
public function removeSentMessages()
{
    $this->_getWriteAdapter()->delete($this->getMainTable(), 'processed_at IS NOT NULL');
    return $this;
}

Đoạn mã trên được thực thi mỗi ngày một lần bởi tác vụ cron.

Nhưng điều đó xảy ra là bảng core_email_queue_reciprons (bảng chứa người nhận email và được liên kết với bảng core_email_queue bởi trường message_id ), không được làm sạch cùng với bảng core_email_queue (bảng giữ các bản ghi email) Bảng người nhận khi bảng Tin nhắn được xóa sạch.

Vấn đề được mô tả ở đây phát sinh khi bảng core_email_queue (Tin nhắn) được đặt lại và trường message_id tự động trên bảng này được khởi tạo lại thành 1.

Vì bảng core_email_queue_reciprons (Người nhận) chưa được làm sạch tương ứng, khi các email mới được thêm vào Hàng đợi Email Magento, các bản ghi mới được tạo trên bảng core_email_queue (với message_id bắt đầu lại từ 1), đồng thời các bản ghi mới được tạo lại từ 1) trên bảng core_email_queue_reciprons có cùng các id này (bắt đầu lại từ 1).

Vấn đề là những id này có thể đã tồn tại trên bảng Người nhận dưới dạng bản ghi mồ côi (do các thông báo email trước đó). Các id mesage mới này sau đó được lặp lại bên trong bảng core_email_queue_reciprons . Cuối cùng, các Tin nhắn email khác nhau được liên kết với Người nhận tương ứng của họ bởi message_id , nhưng chúng cũng được liên kết sai với những người nhận trước đó được gán cùng một message_id từ các email trước đó.

Do đó, khi người nhận được tìm kiếm để gửi một tin nhắn nhất định, bên cạnh người nhận thích hợp, những người nhận sai khác có thể phát sinh.

May mắn là sửa chữa cho vấn đề này là dễ dàng để thực hiện.

Tất cả những gì cần thiết là làm sạch tất cả các id tin nhắn lặp lại trên bảng core_email_queue_reciprons và đảm bảo rằng khi một Tin nhắn bị xóa trên bảng core_email_queue , đồng thời, những Người nhận tương ứng của nó sẽ bị xóa trên bảng core_email_queue_reciprons .

Cách tốt nhất để đạt được điều này là tạo một khóa ngoại liên kết các bản ghi này và xóa chúng trên tầng (nhưng bạn cần thực hiện một số thao tác dọn dẹp trước khi bạn có thể làm điều đó).

Đây là thủ tục để khắc phục sự cố:

1) Thực hiện hai truy vấn SQL sau để xóa bảng core_email_queue_reciprons khỏi các bản ghi mồ côi và id tin nhắn lặp lại:

DELETE FROM core_email_queue_recipients WHERE message_id NOT IN (SELECT message_id FROM core_email_queue);
DELETE FROM core_email_queue_recipients WHERE recipient_id < (SELECT recipient_id FROM (SELECT recipient_id FROM core_email_queue_recipients ORDER BY message_id ASC, recipient_id DESC LIMIT 1) AS r);

Truy vấn đầu tiên xóa các bản ghi mồ côi và truy vấn thứ hai xóa các bản ghi cũ không còn hiệu lực.

2) Tạo khóa ngoại trên bảng core_email_queue_reciprons để xóa các bản ghi Người nhận trên tầng. Truy vấn SQL để tạo khóa ngoại này là:

ALTER TABLE core_email_queue_recipients ADD FOREIGN KEY(message_id) REFERENCES core_email_queue(message_id) ON DELETE CASCADE;

Bằng cách sử dụng khóa ngoại mới này, sẽ không có bản ghi mồ côi nào trên bảng core_email_queue_reciprons khi làm sạch bảng core_email_queue và sẽ không gửi tin nhắn trùng lặp đến người nhận sai trong tương lai.


2
Nghiên cứu tuyệt vời và cung cấp sửa chữa làm việc César. Đây là một sự giám sát lớn của nhóm Magento vì cho rằng điều này sẽ có khả năng gửi tên và địa chỉ của khách hàng cho các khách hàng khác. Bất cứ ai cũng biết nếu điều này đã được giải quyết trong một bản vá (phát hành) mà vấn đề này được phát hiện?
zigojacko

Vẫn phải đối mặt với vấn đề cùng một email Đặt hàng được gửi nhiều lần đến cùng một địa chỉ email sau khi thực hiện giải pháp trên. Bạn có thể giúp đỡ không ??
aton1004

Tôi đang kiểm tra cả hai bảng của mình đã trống, vậy tôi có phải chạy hai bước này không (truy vấn) ???
Abi Sharma

Bất kỳ cách nào tôi đã thực hiện các truy vấn này nhưng không có trợ giúp .. Vẫn nhận được email đặt hàng hai lần
Abi Sharma

5

Tôi đã từng gặp vấn đề tương tự. Đối với mỗi đơn hàng tôi sẽ nhận được e-mail của khách hàng và một e-mail riêng đến địa chỉ cửa hàng của tôi - cả hai vào hộp thư của tài khoản e-mail cửa hàng của tôi.

Trong Magento Admin: Hệ thống> Cấu hình> Email bán hàng> Đặt hàng

Tôi đã đặt e-mail "Gửi phương thức sao chép thư điện tử" từ "Gửi thư điện tử" thành "Bcc" và hiện tại nó hoạt động. Tôi chỉ nhận được một e-mail mỗi đơn hàng bây giờ.


3
Tôi đã sử dụng phương pháp Bcc nên không may là vấn đề với tôi :(
Christopher Thrower

Tôi cũng đang sử dụng cài đặt này, nhưng người dùng sẽ nhận được 2 email sau khi đặt hàng mới.
Abi Sharma

1

Tôi đã từng gặp vấn đề tương tự. Trong trường hợp của tôi, vấn đề là do mã nguồn của tập lệnh cron.sh.

Nhà cung cấp hosting của tôi sử dụng các phiên bản riêng của ông về cron.shcron.php kịch bản cho Magento cron công việc.

Khi tôi thay đổi từ cron.sh kịch bản cho cron.php kịch bản để tiến hành khởi Magento-Cron-Job email trật tự mới chỉ gửi một lần, probelm của tôi đã được giải quyết.

Có lẽ vấn đề của bạn có cái gì để làm với mã của cron.sh hoặc cron.php kịch bản.


Xin chào, Chúng tôi đã sử dụng tập lệnh cron.php cho công việc cron Magento nhưng tôi nhận được email hai lần.
Abi Sharma
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.