ฉันได้อัพเกรดเว็บไซต์เป็น 1.9.1 และตอนนี้ลูกค้าของฉันไม่ได้รับอีเมลยืนยันคำสั่งซื้อ
ฉันพยายามส่งผ่านแผงการดูแลระบบ แต่ไม่มีอะไรเกิดขึ้นและยังไม่ได้รับอีเมลอัปเดต
ฉันได้อัพเกรดเว็บไซต์เป็น 1.9.1 และตอนนี้ลูกค้าของฉันไม่ได้รับอีเมลยืนยันคำสั่งซื้อ
ฉันพยายามส่งผ่านแผงการดูแลระบบ แต่ไม่มีอะไรเกิดขึ้นและยังไม่ได้รับอีเมลอัปเดต
คำตอบ:
cron.sh
กำลังทำงานอยู่! เราเพิ่งใช้เวลาหนึ่งวันเต็มในการแก้ไขข้อบกพร่องนี้เพื่อค้นพบ cron ได้รับการกำหนดค่าผิดพลาด
มี 2 วิธีในการส่งอีเมลจาก Magento 1 store ของเรา
หากคุณต้องการหลีกเลี่ยง cron:
เปิดไฟล์ order.php ของคุณที่
app / รหัส / core / Mage / การขาย / รุ่น / Order.php
สาย # 1356,1450,
เปลี่ยนแปลง
//$mailer->setQueue($emailQueue)->send();
ไปที่:
$mailer-> send();
ในapp/design/frontend/base/default/template/checkout/success.phtml
: เพิ่มบรรทัดต่อไปนี้หน้าความสำเร็จสูงสุดสำหรับการส่งจดหมายโดยตรง
$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
ฉันลบรหัสคิวอีเมลต่อไปนี้จาก Template.php จากนั้นฉันเริ่มรับอีเมลเมื่อลูกค้าสั่งซื้อสินค้าหรือเมื่อฉันคลิกส่งอีเมลจากแผงผู้ดูแลระบบ "การขาย / คำสั่งซื้อ"
Magento ได้กำหนดอีเมลคำสั่งให้ส่งตามตารางงานแทนที่จะส่งอีเมลทันที ... อาจเป็นเพราะเหตุผลด้านประสิทธิภาพ (ฉันไม่รู้ว่าทำไมฉันยังใหม่กับวีโอไอพี) ... แต่ฉันจะใส่รหัสนี้กลับไป Template.php และค้นหาวิธีการตั้งค่าและเรียกใช้งานกำหนดการเพื่อให้ทำงานทุก 5 นาที ...
Template.php ตั้งอยู่ที่ => /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;
}
มีสองวิธีดังนี้:
โซลูชัน -01: การใช้ cron
ระบบ> การกำหนดค่า> ขั้นสูง> ระบบ> Cron
การตั้งค่าเริ่มต้นคือ:
ประการแรกวีโอไอพี 1.9 ขึ้นอยู่กับงาน cron อย่างสมบูรณ์เพื่อส่งอีเมลธุรกรรม หากคุณไม่เคยติดตั้ง cron jobs อย่างถูกต้องมาก่อนคุณจะต้องทำทันที
ก่อนอื่นตรวจสอบให้แน่ใจว่าคุณได้ตั้งค่า cron ใน Magento admin ภายใต้
ระบบ> การกำหนดค่า> ขั้นสูง> ระบบ> Cron
การตั้งค่าเริ่มต้นคือ:
สร้างตารางทุก ๆ 15 กำหนดการล่วงหน้าสำหรับ 20 พลาดหากไม่ได้ทำงานภายใน 15 ล้างประวัติทุก ๆ 10 สำเร็จประวัติศาสตร์ตลอดชีพ 60 ล้มเหลวประวัติศาสตร์ตลอดชีวิต 600
มีคนแนะนำว่าควรเปลี่ยนการตั้งค่าเหล่านี้ แต่เนื่องจากพวกเขาดูเหมือนจะไม่เห็นด้วยกับชุดค่าผสมที่ดีที่สุดฉันจึงควรปล่อยไว้ตามที่ควรจะเป็น
จากนั้นคุณต้องเข้าไปที่แผงควบคุมการโฮสต์และตั้งค่างาน cron ใน cPanel อยู่ภายใต้ Advanced> Cron Jobs ตั้งค่าให้รันทุกห้านาทีและใช้คำสั่งนี้:
php -f /home/username/public_html/cron.php
ตรวจสอบว่าเส้นทางข้างต้นถูกต้องและไฟล์ cron.php นั้นอยู่ในรูทของการติดตั้ง Magento ของคุณ (ถ้าคุณเพิ่งอัพเกรดมันควรจะเป็น) เปลี่ยนชื่อผู้ใช้เป็นบัญชีที่ถูกต้อง
ตอนนี้ฉันเริ่มทำผิดพลาดในการทำตามคำแนะนำของนักพัฒนาที่ xtento.com ที่บอกว่าจะใช้สตริงคำสั่ง wget: wget -O / dev / null -q http://www.YOURDOMAIN.com/PATH_TO_MAGENTO/cron PHP
โซลูชัน -02: หลีกเลี่ยง cron
อีเมลธุรกรรมจะถูกส่งทันที
//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
ด้วย Magento 1.9 อีเมลทั้งหมดจะเข้าคิวและส่งต่อผ่าน Cron
หากคุณต้องการส่งอีเมลธุรกรรมของคุณผ่าน Cron คุณสามารถตั้ง cron จากระบบ > การกำหนดค่า > ระบบ ภายใต้แท็บCronหรือสร้าง cron ในCpanelตรงไปที่cron.shหรือcron.php ที่อยู่ในไดเรกทอรี Magento ของคุณ
เพียงติดตั้งส่วนขยาย "อีเมล SMTP Pro": http://www.magentocommerce.com/magento-connect/smtp-pro-email-free-custom-smtp-email.html
กรอกรายละเอียด SMTP แบบกำหนดเองของคุณแล้วทำ
ฉันใช้เวลาสองวันเต็มในการหา ไม่มีงาน Cron ที่จำเป็นแม้ว่าคุณจะต้องการให้งาน cron ทำงานและคุณไม่ต้องการทำตามข้างต้นคุณสามารถทำสิ่งต่อไปนี้:
หลังจาก:
$isShellDisabled = (stripos(PHP_OS, ‘win’) === false) ? $isShellDisabled : true;
เพิ่มรหัสบรรทัดนี้:
$isShellDisabled = true;
บน C Panel เปิดส่วน Cron Jobs
สร้างงาน cron ที่รันคำสั่งต่อไปนี้ทุก 15 นาที:
php -f /home/USERNAME/public_html/domain.com/magento_folder/cron.php
ใน Magento 1.9.1.0 Magento ได้เพิ่มคุณสมบัติใหม่: พวกเขาเก็บอีเมลคำสั่งซื้อไว้ในcore_email_queue
ตารางเพื่อส่งอีเมลคำสั่งซื้อ เราต้องตั้งค่าcron.php
เซิร์ฟเวอร์
cron.php
ไฟล์ตั้งค่าcore_email_queue_send_all
ในตารางกำหนดการ cron เมื่อยายเฒ่าดำเนินการ "ส่ง" Mage_Core_Model_Email_Queue
วิธีการเรียกจาก พวกเขาส่งจดหมายถึงลูกค้า
ดังนั้นการแก้ไขด้านบนจะทำงานโดยไม่มีการเปลี่ยนแปลงในไฟล์คอร์
เพียงแค่ทำการติดตั้ง cron บนเซิร์ฟเวอร์ของคุณตามคำสั่งด้านล่างแล้วคุณจะเริ่มได้รับอีเมลการขาย
php -q /home/YOUR_USER_NAME/public_html/Path_to_cron.php
ใช้การตั้งค่าทั่วไปเป็น "*****"
ต้องแทนที่ YOUR_USER_NAME & Path_to_cron.php ด้วยของคุณ
ใช้n98-magerunฉันเพิ่งเรียกใช้ต่อไปนี้:
n98-magerun sys:cron:run core_email_queue_send_all
หรือเวลาถ้าคุณไม่ต้องการเรียกใช้ตลอดเวลา:
watch -n 10 n98-magerun sys:cron:run core_email_queue_send_all
วิธีนี้จะส่งอีเมลทั้งหมดในคิวทุก 10 วินาที
สำหรับเซิร์ฟเวอร์ godaddy ใช้รหัสต่อไปนี้ในขณะที่ตั้งค่า cronjob:
* * * * * /usr/local/bin/php -q /home/steelwa/public_html/project_name/cron.php
หากเป็นเพียงอีเมลคำสั่งซื้อที่ไม่ได้ส่งเป็นเพราะวีโอไอพีจะส่งอีเมลคำสั่งซื้อเท่านั้นและบันทึกไว้เพื่อส่งออกเป็นชุด หากคุณไม่ได้ติดตั้ง Heartbeat Cron ของคุณ .. พวกเขาจะไม่ออกจากคิววีโอไอพี
คุณเห็นอีเมลอื่น ๆ ของ Magento ออกไปเพราะสิ่งเหล่านั้นถูกส่งโดยตรงจาก Magento ไปยังจดหมาย daemon ของคุณ คิววีโอไอพีที่รอคิว (เช่นอีเมลคำสั่งซื้อ) ยังไม่ได้ส่งมอบให้กับ mailer daemon จนกว่า Hearbeat Cron จะทำงาน
หากต้องการบังคับให้พวกเขาออกไปข้างนอก ... ไปที่http://yourmagentodomain.com/cron.phpและรีเฟรชหน้านั้นใหม่ทุก ๆ ห้านาทีและคุณจะเห็นอีเมลคำสั่งที่อยู่ในคิวเริ่มออกไปข้างนอก Heartbeat Cron ควรจะทำเพื่อคุณ โอ้และเมื่อคุณนำทางไปยังไฟล์ cron.php หน้านั้นควรจะว่างเปล่าดังนั้นอย่าตกใจ ... มันจะทำงาน
ฉันมีปัญหาเดียวกันและพบว่ามันเกี่ยวข้องกับส่วนขยาย Fooman Email Attachments ได้รับการอัพเดทเป็น v0.10.4 แล้ว รุ่นที่ต่ำกว่า v0.10.3 จะไม่ทำงานกับ Magento 1.9
ฉันติดตามฐานความรู้เพื่อให้ทำงานได้: http://www.magentocommerce.com/knowledge-base/entry/ee1141-ce191-responsive-email#contact-info
ในส่วน "Localizing Transactional Emails" หลังจากทำตามคำแนะนำก่อนหน้านี้แล้วการคัดลอกไปที่ / en_UK จนได้รับอีเมลระหว่างทาง (รวมถึงที่ไม่ได้ส่งไปก่อนหน้านี้) เรายังประสบปัญหากับหน้ายืนยันการสั่งซื้อที่ไม่ปรากฏให้ลูกค้าเห็น เสร็จสิ้น เรื่องนี้ได้รับการแก้ไขด้วย
ตัวอย่างเช่นโลแคล en_GB คุณจะต้องคัดลอกไฟล์ที่อยู่ที่:
app / สถานที่ / th / แม่แบบ / อีเมล์
ไปยังสถานที่:
app / สถานที่ / en_GB / แม่แบบ / อีเมล์
หากระบบเมลของคุณ (smtp, zend_mail) ทำงานได้ดี; การปิดใช้งาน mailQueue อาจช่วยแก้ปัญหาของคุณได้
/app/code/core/Mage/Core/Model/Email/Template.php
เปลี่ยน Line 407
if ($this->hasQueue() && $this->getQueue() instanceof Mage_Core_Model_Email_Queue) {
ไปยัง
if (false /\*$this->hasQueue() && $this->getQueue() instanceof Mage_Core_Model_Email_Queue\*/) {
หากคุณมีส่วนขยาย SMTPpro กว่าลองปิดการใช้งาน และตรวจสอบอีกครั้ง อีเมลทั้งหมดทำงานได้ดีและคุณต้องกำหนดค่าอย่างถูกต้อง
วิธีที่ดีกว่าคือทำสำเนาแอพ / รหัส / คอร์ / ผู้วิเศษ / คอร์ / โมเดล / อีเมล / เทมเพลต / Mailer.php
ไปยังแอปโฟลเดอร์ในเครื่องของคุณ / รหัส / local / Mage / Core / รุ่น / อีเมล / แม่แบบ / Mailer.php
จากนั้นใส่เครื่องหมายความคิดเห็นในบรรทัดที่ 76
->setQueue($this->getQueue())
ถ้าอย่างนั้นคุณก็ทำได้ ไม่จำเป็นต้องแก้ไขเทมเพลต success.phtml : D