12/08/2018, 14:11

Tìm hiểu về gem Letter Opener

Trong quá trình xây dựng 1 ứng dụng, bạn cần làm chức năng gửi mail nhưng không muốn thiết lập mail thử nghiệm hoặc không muốn 1 mail spam sẽ được gửi từ mail thử nghiệm của bạn đến 1 mail nào đó. Gem "Letter Opener" sẽ giúp bạn giải quyết vấn đề đó một cách đơn giản. Thay vì phải mở mail để test, ...

Trong quá trình xây dựng 1 ứng dụng, bạn cần làm chức năng gửi mail nhưng không muốn thiết lập mail thử nghiệm hoặc không muốn 1 mail spam sẽ được gửi từ mail thử nghiệm của bạn đến 1 mail nào đó. Gem "Letter Opener" sẽ giúp bạn giải quyết vấn đề đó một cách đơn giản. Thay vì phải mở mail để test, Letter Opener sẽ giúp bạn reivew email ngay trên trình duyệt.

Đề sử dụng được gem "Letter Opener" đầu tiên bạn cần thêm nó vào môi trường phát triển của bạn sau đó mở command lên và chạy lệnh "bundle" để cài đặt nó

gem "letter_opener", :group => :development

Sau đó bạn cần thiết lập phương thức delivery method trong file config/environments/development.rb như sau:

config.action_mailer.delivery_method = :letter_opener

Bây giờ bất kỳ email sẽ bật lên trong trình duyệt của bạn thay vì được gửi đi. Các tin nhắn được lưu trữ trong tmp / letter_opener. Nếu bạn muốn thay đổi ứng dụng đó sẽ được sử dụng để mở email của bạn, bạn nên ghi đè biến môi trường LAUNCHY_APPLICATION hoặc thiết lập Launchy.application trong initializer.

Non Rails Setup

Nếu bạn không sử dụng Rails, điều này có thể dễ dàng thiết lập bằng cách sử dụng Mail gem. Chỉ cần thiết lập các phương pháp phân phối khi cấu hình Mail và chỉ định một vị trí.

require "letter_opener"
Mail.defaults do
  delivery_method LetterOpener::DeliveryMethod, :location => File.expand_path('../tmp/letter_opener', __FILE__)
end

Phương pháp này là tương tự nếu bạn đang sử dụng Pony gem:

require "letter_opener"
Pony.options = {
  :via => LetterOpener::DeliveryMethod,
  :via_options => {:location => File.expand_path('../tmp/letter_opener', __FILE__)}
}

Ngoài ra, nếu bạn đang sử dụng ActionMailer trực tiếp (không có Rails), bạn sẽ cần thêm các phương pháp phân phối.

require "letter_opener"
ActionMailer::Base.add_delivery_method :letter_opener, LetterOpener::DeliveryMethod, :location => File.expand_path('../tmp/letter_opener', __FILE__)
ActionMailer::Base.delivery_method = :letter_opener

Letter Opener sử dụng Launchy để mở gửi mail trong trình duyệt. Điều này giả định quá trình Ruby được chạy trên các máy phát triển địa phương. Nếu bạn đang sử dụng một dàn máy chủ riêng biệt hoặc máy ảo này sẽ không làm việc. Trong trường hợp đó xem xét sử dụng Mailtrap hoặc MailCatcher. Link tham khảo: https://github.com/ryanb/letter_opener

0