Cái api gửi mail của mình và được demo bằng golang
Go
40
Gmail
2
message
1
thread
4
White

hunghh.dev viết ngày 04/07/2020

Xin chào, cả tháng rồi mình không biết viết về gì cả, nay lại rảnh rỗi ngồi về cái api để gửi mail của mình.

Chuẩn bị

  • Để gửi được mail đâu tiên là phải có server mail, anh em có thể tự build lấy 1 cái mà gửi nếu như có khả năng, còn mình thì dùng luôn của thằng google gửi bằng gmail cho tiện :grin:
  • Còn lý do mình dùng golang để demo là mình đang nghịch thằng này :joy:

Vào bài

  • Có rất nhiều lý do chúng ta cần gửi mail, đơn gian và gần gũi thì tính năng quên mật khẩu chẳng hạn, người dùng sẽ nhập vào thông tin tài khoản như user, email,.. email của người dùng sẽ nhận được cái tin nhắn với đường link click vào để lấy lại mật khẩu. Đấy cơ bản có vậy thôi. Viết thử cái phát
  • Đầu tiên là viết một cái hàm gửi mail này alt text
  • Tiếp theo là cái api gửi mail
    alt text
    alt text

  • Rồi đó đơn giản vây thôi là đã gửi được cái mail rồi. với cái api nhứ này localhost:3000/forgot-password/yourname@domain với method get

Vấn đề

  • Vấn đề ở đây mình mất hơn 4 giây để gọi cái api này alt text
  • Client của mình sẽ phải đợi hơn 4 giấy để biết request gửi lên có thành công hay không để xử lý tiếp, thời gian này sẽ có thể cao hơn nếu trên server mail xử lý lâu trả về chậm thì thời gian client phải đợi càng lâu.
  • Rồi nếu gửi mail theo cách này với số lượng lớn, thì có vẻ client sẽ phải đợi lâu đây :sleeping::sleeping::sleeping:

Giải quyết

  • Không biết các cao nhân giải quyết vấn để đó như nào, nhưng mình đầu óc đơn giản thì nghĩ ngay đến việc sử dụng schedule :kissing_heart:
  • Đầu tiên là mình viết 1 cái schedule alt text
  • Rồi bên controller thay vì gửi mail luôn, thì mình dùng 1 cái biến global để gửi tin nhắn cho schedule, kiểu là khi có request lên, mình lấy cái được cái email rồi nhét nó vào biến MailTo alt text
  • Schedule của mình cứ 10 giây chạy một lần, nếu thấy MailTo có dữ liệu thì sẽ chạy phần gửi mail :stuck_out_tongue: :stuck_out_tongue: :stuck_out_tongue:

Tổng kết

  • Đại khái nội dung bài này chỉ có vậy, nếu user thấy lâu quá không nhận được mail, thì nhấn vào cái nút gửi lại thôi :satisfied:
  • Và nữa là trong trường hợp gửi khoảng vài chục nghìn mail chẳng hạn, client sẽ không phải đợi gửi xong hết đống mail đó mới nhận kết quả, còn việc cập nhật trạng thái mail có gửi thành công hay không thì mình có thể cập nhật sau qua database chẳng hạn :kissing_closed_eyes:
  • Với các vấn đề gửi notification hay message ta cũng có thể làm tương tự
  • Cảm ơn các bạn đã đọc đến đây :relaxed: có gì thiếu thốn sai sót bảo cho mình với nhé. Source bài này ở đây https://github.com/hunghhdev/guide/tree/master/golang/api-send-mail :wink::wink::wink:
Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

hunghh.dev

8 bài viết.
10 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
7 0
Xin chào các bạn đọc, trong seri này mình dự định sẽ chia sẻ cách dùng spring security để phân quyền trong web service, cách đọc ghi một JWT, rồi t...
hunghh.dev viết 9 tháng trước
7 0
White
6 1
Restful api Rest (Representational State Transfer) hiểu nôm na nó là một kiểu kiến trúc được dùng để giao tiếp giữa các máy tính, được truyền tải...
hunghh.dev viết 8 tháng trước
6 1
White
3 0
Ở (Link) mình đã tạo một số model và tạo thử một api register, ở phần này mình sẽ hướng dẫn các bạn tạo một chuỗi JWT và khi login sẽ chả về cái ch...
hunghh.dev viết 9 tháng trước
3 0
Bài viết liên quan
White
16 14
1. Tản mạn ngoài lề Như chúng ta đã biết việc gửi mail về cho người dùng trong web là một vấn đề phổ biến. Điển hình như gửi confirm mail khi mem...
Văn Đức Thái viết hơn 2 năm trước
16 14
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
8 bài viết.
10 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!