Magento không gửi được email

Nhận xét sản phẩm này

Tình trạng: Còn hàng

0,00 US$
Hoặc

Magento không gửi được email

More Views

Magento không gửi được email

I. Các phương thức gửi email trong magento

Về cơ bản có 2 phương thức:

 - Gửi email qua hàng chờ:

Email chưa gửi đi sẽ được lưu hết data vào database(bảng core_email_queue và core_email_queue_recipients). Khi hàng chờ đến lượt thì các data đó được ghép lại và gửi đi. Theo Release note thì từ Magento 1.9.1, tất cả các email (bao gồm confirmation email và transactional email) đều được đưa vào hàng đợi (queued) và gửi đi dựa theo cấu hình cronjob. Như vậy mặc định để online shop của bạn gửi được email trơn tru thì phải setup cron.

 - Gửi email trực tiếp:

Thông thường việc gửi các email này được kích hoạt trong event observers hoặc controller của module cài thêm thông qua hàm gửi mặc định của php hoặc Zend_Mail. Vì email không gửi qua hàng chờ nên khi phát sinh lỗi chúng ta có thể debug code dễ dàng và tiện lợi hơn.

 

II. Khi Magento không gửi được email

1. Kiểm tra config trong admin

System --> Configuration --> Advanced --> System --> Mail Sending option --> Disable Email Communication cần để giá trị “No” để gửi được email.

2. Đối với các email không gửi qua hàng chờ (queue) 

2.1. Kiểm tra cài đặt của server

Thử chạy đoạn php sau:

<?php

    mail ('you@example.com', "Test Postfix", "Test mail from postfix");

?>

trong đó you@example.com là địa chỉ email của bạn. Nếu không nhận được email nào tức là cần xem lại settings của server

 

2.2. Bắt lỗi trong quá trình gửi email

Khi debug, đoạn code gửi email chúng ta nên đặt trong try{….} catch….. và in ra exception message để nắm được nguyên nhân lỗi. Trước đó có thể kiểm tra trước ở 2 file system.log và excepton.log (Chú ý cần  vào System/Configuration/Developer để bật tính năng log)

Một số module cũng có tính năng bật log riêng (và ghi ra file riêng). Ví dụ SMTP Pro của Aschroder

 

3. Đối với các email sử dụng hàng chờ

Các email dùng hàng chờ cần cronjob được setup để chạy thực hiện gửi theo chu kỳ. Chúng ta có thể kiểm tra

3.1. Kiểm tra & cài đặt  bằng ssh

- Đăng nhập vào SSH cient và gõ lệnh:

crontab -l

- Nếu có cronjob đã trỏ đến file cron.php hoặc cron.sh thì kết quả sẽ hiển thị ra:

 

- Nếu cần setup lại cronjob, chúng ta gõ lệnh

crontab -e

Lúc này cửa sổ edit cronjobs  sẽ hiện ra, sau khi sửa xong nội dung, lưu lại bằng cách nhấn Ctrl+O. Để thoát ra bấm Ctrl+X

 

3.2. Kiểm tra & cài đặt bằng cpanel

- Đăng nhập vào cpanel

- Click vào biểu tượng cron jobs

 - Nếu có cronjob cài sẵn:

 

- Nếu cần setup thêm cronjob:

 

3.3. Kiểm tra bằng cách đợi cron thực thi

- Mở file cron.php và thêm đoạn sau vào phần dispatchEvent

Mage::dispatchEvent('default');

$log = fopen(__FILE__.'.log', 'a');

fwrite($log, date("Y-m-d H:i:s").PHP_EOL);

fclose($log);

Như vậy mỗi khi file cron đc chạy sẽ sinh ra log cron.php.log trong var/log chúng ta có thể kiểm tra thời điểm sinh ra log để kết luận. 

 

3.4. Kiểm tra xung đột giữa các module

Khi Magento cài cùng lúc nhiều module hỗ trợ gửi email, có thể chúng bị xung đột & gây lỗi. Ví dụ: dùng chung SMTP Pro (bản cũ) và Mailchimp sẽ có lỗi không gửi được email do cả 2 module cùng overwrite và extend hàm trong Mage_Core_Model_Email_Template. Trường hợp đó chúng ta buộc phải sửa code để fix xung đột hoặc disable đi 1 module.

 

Thông tin kỹ thuật

Author Vu Linh
(0)

Questions and Answers

add your question

There are no entries.