এই সমস্যাটি অবশ্যই নতুন ম্যাজেন্টো ইমেল ক্যু সিস্টেমের সাথে সম্পর্কিত হতে পারে যা প্রাপকদের টেবিলে এতিম রেকর্ড ছেড়ে দেয়। এটি যদি আপনার সমস্যা হয় তবে আমি আপনাকে একটি সমাধান পাঠিয়ে দেব।
নতুন ম্যাগেন্টো ইমেল ক্যু সিস্টেমটি এই দুটি সারণী পরিচালনা করে: কোর_ইমেল_কুই এবং কোর_ইমেল_কুই_রেসিপিয়েন্টস । পূর্ববর্তীটি ইমেল বার্তাগুলি এবং পরবর্তী বার্তাগুলি এই বার্তাগুলির প্রাপকদের পরিচালনা করে।
Core_email_queue টেবিল আউট পরিষ্কার যেমন Magento ইমেইল সারি উপর ইমেল পাঠানো হয়েছে হয়। এই পরিষ্কারকরণটি কোর_ইমেল_কুই_ক্লান_আপ নামে একটি ক্রোন ট্যাব কাজ দ্বারা সম্পাদিত হয় যা অ্যাপ / কোড / কোর / মাইজ / কোর / ইত্যাদি / কনফিগারেশন। এক্স কনফিগারেশন ফাইলের মধ্যে সংজ্ঞায়িত করা হয় । পরিচ্ছন্নতা সম্পাদন করে এমন কোডটি 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;
}
উপরের কোডটি ক্রোন টাস্ক দ্বারা দিনে একবার কার্যকর করা হয়।
তবে এটি ঘটে যায় যে কোর_ইমেল_উইউ_সেসিপিয়েন্টস টেবিল (ইমেল প্রাপকদের ধারণকৃত একটি, এবং এটি মেসেজ_আইডি ক্ষেত্রে কোর_ইমেল_উইউ টেবিলের সাথে সংযুক্ত ), কোর_ইমেল_উইউ টেবিল (যা ইমেল বার্তাগুলি ধারণ করে) সাথে একসাথে পরিষ্কার করা হয় না , অনাথ রেকর্ড ভিতরে রেখে দেয় সেই বার্তাগুলি টেবিলটি যখন বার্তা সারণীটি পরিষ্কার হয়ে যায়।
এখানে বর্ণিত সমস্যাটি উত্থাপিত হয় যখন কোর_ইমেল_কিউ টেবিল (বার্তাগুলি) পুনরায় সেট করা হয় এবং এই টেবিলের স্বতঃআগ্রহ বার্তা_আইডি ফিল্ডটি আবার 1 এ পুনরায় সংযুক্ত করা হয়।
কারণ কোর_ইমেল_কুই_রেসিপিয়েন্টস টেবিল (প্রাপকগণ) সেই অনুযায়ী পরিষ্কার করা হয়নি, যখন নতুন ইমেলগুলি ম্যাগেন্টো ইমেল সারিতে যুক্ত করা হয়, তখন কোর_ইমেল_উইউ টেবিলে নতুন রেকর্ড তৈরি করা হয় ( বার্তা_আইডি আবার 1 থেকে শুরু হবে) এবং একই সাথে নতুন রেকর্ড তৈরি করা হয় উপর core_email_queue_recipients এই একই আইডি টেবিল (1 থেকে আবার শুরু)।
সমস্যাটি হ'ল এই আইডিগুলি ইতিমধ্যে প্রাপকদের টেবিলে অনাথ রেকর্ড হিসাবে উপস্থিত থাকতে পারে (পূর্ববর্তী ইমেল বার্তাগুলির কারণে)। এই নতুন বার্তা আইডিগুলি এরপরে পুনরাবৃত্তি হয় get কোর_ইমেল_কুই_প্রাপ্তি সারণীর । শেষ অবধি , বিভিন্ন ইমেল বার্তাগুলি ম্যাসেজ_আইডি দ্বারা তাদের সংশ্লিষ্ট প্রাপকদের সাথে লিঙ্ক করা হয়েছে তবে তারা পূর্ববর্তী ইমেলগুলি থেকে একই বার্তা_আইড বরাদ্দ করা পূর্ববর্তী গ্রহণকারীদের সাথেও ভুলভাবে যুক্ত হয়েছে ।
সুতরাং, যখন প্রাপকদের একটি প্রদত্ত বার্তা প্রেরণের জন্য অনুসন্ধান করা হয়, উপযুক্ত প্রাপক ছাড়াও, অন্য ভুল প্রাপক উত্থাপিত হতে পারে।
ভাগ্যক্রমে এই সমস্যার সমাধানটি সম্পাদন করা সহজ।
যা দরকার তা হ'ল কোর_ইমেল_কুই_প্রেরক টেবিলের সমস্ত পুনরাবৃত্তি বার্তাগুলি আইডি পরিষ্কার করা এবং এটি নিশ্চিত করা যে কোনও বার্তা যখন কোর_ইমেল_উইউটিতে মুছে ফেলা হয় টেবিলে , একই সাথে তার প্রাপকগুলি কোর_ইমেল_কুই_আরসিপিয়েন্টস টেবিলে মুছে ফেলা হয় ।
এটি অর্জনের সর্বোত্তম উপায় হ'ল একটি বিদেশী কী তৈরি করা যা এই রেকর্ডগুলিকে লিঙ্ক করে এবং তাদের ক্যাসকেডে মুছে দেয় (তবে এটি করার আগে আপনাকে কিছু পরিষ্কার করা দরকার)।
এই সমস্যাটি সমাধানের পদ্ধতি:
1) এতিম রেকর্ড এবং পুনরাবৃত্তি বার্তাগুলি আইডি থেকে কোর_ইমেল_কুই_প্রেরক সারণীটি পরিষ্কার করার জন্য নিম্নলিখিত দুটি এসকিউএল কোয়েরি কার্যকর করুন :
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);
প্রথম ক্যোয়ারী এতিম রেকর্ডগুলি মুছে দেয় এবং দ্বিতীয়টি পুরানো রেকর্ডগুলি মুছে দেয় যা আর বৈধ নয়।
2) ক্যাসকেডে প্রাপকদের রেকর্ড মুছতে কোর_ইমেল_কুই_প্রেরক টেবিলে একটি বিদেশী কী তৈরি করুন । এই বিদেশী কী তৈরির জন্য এসকিউএল কোয়েরিটি হ'ল:
ALTER TABLE core_email_queue_recipients ADD FOREIGN KEY(message_id) REFERENCES core_email_queue(message_id) ON DELETE CASCADE;
এই নতুন বিদেশী কী ব্যবহার করার মাধ্যমে, কোন এতিম রেকর্ড উপর ছেড়ে দেওয়া হবে core_email_queue_recipients যখন পরিস্কার টেবিল core_email_queue টেবিল ও ভুল প্রাপককে কোন সদৃশ বার্তা ভবিষ্যতে পাঠানো হবে।