2012-03-14 26 views
11

Trong môi trường phát triển của tôi, tôi sử dụng bản sao của cơ sở dữ liệu sản xuất khi thử nghiệm cục bộ. Vì lý do để thử nghiệm và chỉ đơn giản là để bảo vệ chống lại gửi email thử nghiệm/dev cho người dùng thực, cách tốt nhất để ghi đè địa chỉ nhận thư khi ở chế độ phát triển là gì?Ghi đè thư của ActionMailer để giải quyết trong môi trường phát triển

Tôi biết tôi có thể viết logic trong mỗi bưu phẩm, nhưng tôi có một số và nó sẽ là tốt đẹp để đặt nó tất cả ở một nơi. Tôi có thể ghi đè phương thức mail() bằng cách nào đó để làm cho tham số :to luôn trỏ vào địa chỉ email tôi chỉ định không?

Trả lời

1

Bạn could do một mặc định của

class UserMailer < ActionMailer::Base 
    default :to=> "[email protected]" 
end 

Và sau đó làm cho địa chỉ một tùy chọn trong các phương pháp. Bằng cách đó, nó sẽ mặc định là :to mà bạn đã đặt. Một ý tưởng khác tôi đã có thêm một chút:

class UserMailer < ActionMailer::Base 
    attr_accessor :email_address 

    def initialize 
    if RAILS_ENV == "development" 
     @email_address = "[email protected]" 
    end 
    end 
end 

Điều đó sẽ yêu cầu bạn đặt một địa chỉ mới trong mã của bạn nhưng nó sẽ bị ghi đè mỗi lần trong quá trình phát triển.

3

Những gì tôi muốn làm là cấu hình bưu phẩm hành động trong môi trường phát triển để sử dụng mailtrap.

27

Tôi sử dụng ActionMailer interceptor để tất cả thư được gửi trong khi đang phát triển hoặc môi trường thử nghiệm được gửi đến cùng một địa chỉ. Như thế này:

# config/initializers/override_mail_recipient.rb 
if Rails.env.development? or Rails.env.test? 
    class OverrideMailRecipient 
    def self.delivering_email(mail) 
     mail.to = '[email protected]' 
    end 
    end 
    ActionMailer::Base.register_interceptor(OverrideMailRecipient) 
end 
+0

Điều này là khá gọn gàng thực sự. Cảm ơn các đoạn! – Calvin

Các vấn đề liên quan