Hẹn giờ gửi mail ở mail send laravel

Chào mọi người!
Em muốn gửi mail tới khách hàng thông báo là đã ship hàng rồi, nhưng tránh gửi vào giờ để không làm phiền khách, nên em muốn hẹn giờ gửi mail trong mail:send của laravel.
Thí dụ gửi ngày 20 tháng 3 năm 2022 lúc 10h sáng thì tới ngày đó, mail mới được gửi đi ạ.
Mong mọi người giúp đỡ

Laravel không tự chạy được vào lúc đó, cũng như ngôn ngữ kịch bản web nói chung không có khả năng tự gọi bản thân mình mà phải… có lực tác động từ bên ngoài. Đây là kiến thức tổng quát về sử dụng máy tính và làm quen lập trình nói chung.

Do đó, bạn phải cấu hình trên hệ thống nếu là VPS, còn sử dụng shared hosting thì kiếm trên cPanel, DirectAdmin hoặc cái Panel nào đó bạn đang dùng xem có chức năng liên quan đến Cron? Cụ thể hơn: bạn tìm mục Cron và thiết lập ngày giờ gửi trong đó, đường dẫn đến file PHP có cái phương thức gửi email của Laravel mà bạn đã code, dành cho việc gửi email. Đây là mình giả sử server chạy Linux, còn nếu server chạy Windows thì thay Cron bằng Scheduled Tasks, cũng bấy nhiêu chuyện.

Nếu không thể thiết lập trên hệ thống, thì bạn phải có một máy tính chạy 24/7 để đến giờ đó nó mở URL đến domaincuaban/file-gui-email-viet-bang-laravel.php để file này được kích hoạt thì mới gửi.

Ngoài ra, cách quái quỷ hơn là nhờ khách truy cập kích hoạt gửi mail giúp bạn: ngay khi vào file index.php thì check ngày giờ xem lúc đó đang là giờ nào, nếu nó trong khung giờ gửi email thì gọi đến file gửi email. Nhưng cái này chỉ phù hợp nếu web bạn có khách truy cập nhiều suốt cả ngày, còn mỗi ngày lèo tèo và tản mát là không được.

5 Likes

@superthin
Em cảm ơn anh, đọc cả 3 cách mà không có cách nào em dùng được cả.
Cách 1 thì shared hosting chỉ có Sếp em quản lý, mà em mới học code dự án đầu shop có 2 sản phẩm nên chắc là em sẽ làm đơn giản hoá lại ạ.
Cố gắng gửi mail tránh giờ trưa. với giờ nghỉ của khách ra vậy ạ, em sẽ bỏ mục hẹn giờ ở phần form soạn mail.

Em muốn gửi mail tới khách hàng thông báo là đã ship hàng rồi, nhưng tránh gửi vào giờ để không làm phiền khách, nên em muốn hẹn giờ gửi mail trong mail:send của laravel.

=.=
Requirement này không hợp lý với tớ lắm. Mail là thứ mà mọi người có thể đọc sau lúc rảnh, nên tớ không nghĩ ai bị phiền khi nhận email lúc ăn trưa/tắm/đi ngủ đâu @@ Cách giải quyết vấn đề này hiệu quả nhất chắc chắn là push back :smile:


Nếu cậu thực sự muốn làm, cậu có thể cân nhắc sử dụng message queue, để note lại các email sẽ được gửi sau, khi cậu nhận thấy thời gian gửi là trưa.
Cậu có thể sử dụng Rabbit MQ với dead letter exchange và TTL vài giờ (cho phép cậu trì hoãn message trong vài giờ), set cho queue chứa email mà cậu sẽ gửi chậm, để gửi email cho khách hàng.
Cách này có thể sẽ tốt hơn cho cậu, khi cậu không phải cài đặt thêm logic hẹn giờ (tương đối khó cài đặt một cách hiệu quả), hay sử dụng Laravel task schedule (có thể khiến cho app của cậu không scale được nếu cậu định code chung tất cả vào 1 app).

Trên DNH, đã có 1 article hướng dẫn cơ bản về Rabbit MQ. Cậu đọc thử xem nhé!

3 Likes

Anh cho em hỏi tại sao lại như vậy? Ngôn ngữ script như PHP, javascript, lua, … không làm được vậy java, C#, C++ có làm được không? Nó cũng có thể lấy thời gian từ hệ thống của server mà anh?

1 Like

Php vẫn làm được các cơ chế message queue tương tự nhé. Bạn có thể tham khảo cái này

4 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?