ไม่ได้ส่งอีเมลยืนยันคำสั่งซื้อใหม่


100

ฉันได้อัพเกรดเว็บไซต์เป็น 1.9.1 และตอนนี้ลูกค้าของฉันไม่ได้รับอีเมลยืนยันคำสั่งซื้อ

ฉันพยายามส่งผ่านแผงการดูแลระบบ แต่ไม่มีอะไรเกิดขึ้นและยังไม่ได้รับอีเมลอัปเดต


คำตอบ:


96
  1. เริ่มต้นด้วย Magento 1.9.1 อีเมลจะไม่ถูกส่งโดยตรงระหว่างการเช็คเอาต์ แต่จะถูกจัดคิว
  2. กำลังประมวลผลคิวผ่าน Magento cronjob ของคุณ - โปรดตรวจสอบให้แน่ใจว่าได้ตั้งค่าและทำงานอย่างถูกต้อง
  3. ส่วนขยายAOE_Schedulerสามารถช่วยคุณในการยืนยันว่า Magento cronjob ของคุณได้รับการกำหนดค่าอย่างถูกต้องและกำลังทำงานอยู่

6
ตรวจสอบให้แน่ใจว่าcron.shกำลังทำงานอยู่! เราเพิ่งใช้เวลาหนึ่งวันเต็มในการแก้ไขข้อบกพร่องนี้เพื่อค้นพบ cron ได้รับการกำหนดค่าผิดพลาด
forsvunnet

2
จะรู้ได้อย่างไรว่า cron.php ทำงานหรือไม่
Teja Bhagavan Kollepara

2
คุณสามารถติดตามบันทึกภายใน / var / log / cron
Beto Castillo

ฉันมีปัญหากับอีเมลสั่งซื้อใน Magento 2 Cron ก็ทำงานอยู่เช่นกัน แต่อีเมลไม่ได้ส่ง งาน cron ส่วนใหญ่พลาดในตารางฐานข้อมูล ฉันจะแก้ไขมันได้อย่างไร
Magecode

@Magecode ฉันขอแนะนำให้ค้นหาคำถามเฉพาะของ Magento 2 ก่อน หากไม่มีใครสามารถเพิ่มคำถามของคุณเองพร้อมรายละเอียดเกี่ยวกับสิ่งที่คุณได้พบ / ตัดออกไป
Kristof ที่ Fooman

29

มี 2 ​​วิธีในการส่งอีเมลจาก Magento 1 store ของเรา

  1. โดยใช้ cron
  2. โดยหลีกเลี่ยง cron

หากคุณต้องการหลีกเลี่ยง 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

ใช้งานได้ดีอยู่แล้วว่าจำเป็นต้องเพิ่มโค้ดบน success.phtml becoz โดยไม่ต้องว่ามันดูเหมือนว่าทำงานดี
Suneth Kalhara

3
สวัสดีมีความสุขที่ได้ฟังสิ่งนี้ ไม่จำเป็นต้องเพิ่มรหัสใด ๆ เนื่องจากจดหมายธุรกรรมจะถึงอีเมลทันที
Teja Bhagavan Kollepara

1
ไม่เคยเปลี่ยน (หรือเขียนทับรหัสผู้ขาย) เรื่องนี้จะเกิดอะไรขึ้นเมื่อคุณอัปเกรด
Bachi

20

ฉันลบรหัสคิวอีเมลต่อไปนี้จาก 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;
    }

วิธีนี้แก้ปัญหาได้ แต่การสมัครรับจดหมายข่าวไม่ทำงานการหมุนกลับไปที่แม่แบบเก่า PHP แก้ปัญหาการสมัครรับจดหมายข่าว
balajisoundar

14

มีสองวิธีดังนี้:

โซลูชัน -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

10

ด้วย Magento 1.9 อีเมลทั้งหมดจะเข้าคิวและส่งต่อผ่าน Cron

บันทึกประจำรุ่น Magento 1.9

หากคุณต้องการส่งอีเมลธุรกรรมของคุณผ่าน Cron คุณสามารถตั้ง cron จากระบบ > การกำหนดค่า > ระบบ ภายใต้แท็บCronหรือสร้าง cron ในCpanelตรงไปที่cron.shหรือcron.php ที่อยู่ในไดเรกทอรี Magento ของคุณ


10

เพียงติดตั้งส่วนขยาย "อีเมล SMTP Pro": http://www.magentocommerce.com/magento-connect/smtp-pro-email-free-custom-smtp-email.html

กรอกรายละเอียด SMTP แบบกำหนดเองของคุณแล้วทำ


ฉันใช้เวลาสองวันเต็มในการหา ไม่มีงาน Cron ที่จำเป็นแม้ว่าคุณจะต้องการให้งาน cron ทำงานและคุณไม่ต้องการทำตามข้างต้นคุณสามารถทำสิ่งต่อไปนี้:

แก้ไข cron.php ในไดเรกทอรีรากของวีโอไอพี

หลังจาก:

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

เพิ่มรหัสบรรทัดนี้:

$isShellDisabled = true;

ตั้งค่างาน Cron

บน C Panel เปิดส่วน Cron Jobs
สร้างงาน cron ที่รันคำสั่งต่อไปนี้ทุก 15 นาที:

php -f /home/USERNAME/public_html/domain.com/magento_folder/cron.php

สิ่งสำคัญที่ควรทราบว่าด้วย SMTP Pro การกำหนดค่านี้จะต้องทำสำหรับ Magento 1.9.1 ขึ้นไป: ระบบ -> การกำหนดค่า -> SMTP Pro -> การกำหนดค่าคิว -> การใช้คิวเปลี่ยนจากค่าเริ่มต้นเป็นไม่เคย
Shrenik

8

ใน Magento 1.9.1.0 Magento ได้เพิ่มคุณสมบัติใหม่: พวกเขาเก็บอีเมลคำสั่งซื้อไว้ในcore_email_queueตารางเพื่อส่งอีเมลคำสั่งซื้อ เราต้องตั้งค่าcron.phpเซิร์ฟเวอร์

cron.phpไฟล์ตั้งค่าcore_email_queue_send_allในตารางกำหนดการ cron เมื่อยายเฒ่าดำเนินการ "ส่ง" Mage_Core_Model_Email_Queueวิธีการเรียกจาก พวกเขาส่งจดหมายถึงลูกค้า

ดังนั้นการแก้ไขด้านบนจะทำงานโดยไม่มีการเปลี่ยนแปลงในไฟล์คอร์


6

เพียงแค่ทำการติดตั้ง cron บนเซิร์ฟเวอร์ของคุณตามคำสั่งด้านล่างแล้วคุณจะเริ่มได้รับอีเมลการขาย

php -q /home/YOUR_USER_NAME/public_html/Path_to_cron.php

ใช้การตั้งค่าทั่วไปเป็น "*****"

ต้องแทนที่ YOUR_USER_NAME & Path_to_cron.php ด้วยของคุณ


6

ใช้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 วินาที


6

สำหรับเซิร์ฟเวอร์ godaddy ใช้รหัสต่อไปนี้ในขณะที่ตั้งค่า cronjob:

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

สิ่งนี้จะทำงานทุกนาทีป้อนคำอธิบายรูปภาพที่นี่


5

หากเป็นเพียงอีเมลคำสั่งซื้อที่ไม่ได้ส่งเป็นเพราะวีโอไอพีจะส่งอีเมลคำสั่งซื้อเท่านั้นและบันทึกไว้เพื่อส่งออกเป็นชุด หากคุณไม่ได้ติดตั้ง Heartbeat Cron ของคุณ .. พวกเขาจะไม่ออกจากคิววีโอไอพี

คุณเห็นอีเมลอื่น ๆ ของ Magento ออกไปเพราะสิ่งเหล่านั้นถูกส่งโดยตรงจาก Magento ไปยังจดหมาย daemon ของคุณ คิววีโอไอพีที่รอคิว (เช่นอีเมลคำสั่งซื้อ) ยังไม่ได้ส่งมอบให้กับ mailer daemon จนกว่า Hearbeat Cron จะทำงาน

หากต้องการบังคับให้พวกเขาออกไปข้างนอก ... ไปที่http://yourmagentodomain.com/cron.phpและรีเฟรชหน้านั้นใหม่ทุก ๆ ห้านาทีและคุณจะเห็นอีเมลคำสั่งที่อยู่ในคิวเริ่มออกไปข้างนอก Heartbeat Cron ควรจะทำเพื่อคุณ โอ้และเมื่อคุณนำทางไปยังไฟล์ cron.php หน้านั้นควรจะว่างเปล่าดังนั้นอย่าตกใจ ... มันจะทำงาน


5

ฉันมีปัญหาเดียวกันและพบว่ามันเกี่ยวข้องกับส่วนขยาย Fooman Email Attachments ได้รับการอัพเดทเป็น v0.10.4 แล้ว รุ่นที่ต่ำกว่า v0.10.3 จะไม่ทำงานกับ Magento 1.9


5

ฉันติดตามฐานความรู้เพื่อให้ทำงานได้: 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 / แม่แบบ / อีเมล์


2
ยินดีต้อนรับสู่ Magento SE! คุณช่วยอธิบายเพิ่มเติมเกี่ยวกับคำตอบของคุณได้ไหม (ตัวอย่างรหัสข้อเสนอ ฯลฯ )?
benmarks

3

หากระบบเมลของคุณ (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\*/) {

5
สิ่งนี้จะทำลายฟังก์ชันการทำงานของแบบฟอร์มการติดต่อ
Zoya

9
อย่าแก้ไขหลัก
Kevin Schroeder

1
โปรดอย่าให้บริการโซลูชั่นที่ต้องมีการเปลี่ยนแปลง CORE คลาสแกนจะต้องไม่ถูกเปลี่ยนแปลง
Ahsan Horani

2

หากคุณมีส่วนขยาย SMTPpro กว่าลองปิดการใช้งาน และตรวจสอบอีกครั้ง อีเมลทั้งหมดทำงานได้ดีและคุณต้องกำหนดค่าอย่างถูกต้อง


0

วิธีที่ดีกว่าคือทำสำเนาแอพ / รหัส / คอร์ / ผู้วิเศษ / คอร์ / โมเดล / อีเมล / เทมเพลต / Mailer.php

ไปยังแอปโฟลเดอร์ในเครื่องของคุณ / รหัส / local / Mage / Core / รุ่น / อีเมล / แม่แบบ / Mailer.php

จากนั้นใส่เครื่องหมายความคิดเห็นในบรรทัดที่ 76

->setQueue($this->getQueue())

ถ้าอย่างนั้นคุณก็ทำได้ ไม่จำเป็นต้องแก้ไขเทมเพลต success.phtml : D

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.