2011-01-05 46 views
6

Trong một ứng dụng Rails tôi thiết lập một môi trường dàn dựng mới với các thông số sau trong environments/ tập tin của nó:Kiểm soát khai thác gỗ và gửi email trong các môi trường khác nhau

config.action_mailer.perform_deliveries = true 
config.action_mailer.raise_delivery_errors = true 
config.action_mailer.delivery_method = :smtp 

Tuy nhiên, khi hệ thống tạo một email, nó được in ra tệp staging.log thay vì được gửi. Cài đặt SMTP của tôi hoạt động tốt trong các môi trường khác. Tôi thiếu cấu hình nào để nhận email thực sự gửi?

Chỉnh sửa: Có, hộp dàn dựng được thiết lập với cấu hình hợp lệ cho máy chủ SMTP có quyền truy cập. Có vẻ như vấn đề không phải là với các thiết lập SMTP (nếu nó được, tôi sẽ không nhận được lỗi trong các bản ghi?), Nhưng với cấu hình Rails. Ứng dụng vẫn đang chuyển hướng email tới tệp nhật ký (nói "Đã gửi thư: ...") thay vì thực sự đi qua SMTP.

Chỉnh sửa # 2: Có vẻ như các email thực sự đã được gửi chính xác, chúng cũng chỉ xảy ra để in vào nhật ký. Tôi đang cố gắng sử dụng đá quý sanitize_email để chuyển hướng thư đến địa chỉ khác và điều đó dường như không hoạt động, đó là lý do tại sao tôi cho rằng các email đó không bị xóa. Vì vậy, tôi nghĩ rằng giải quyết vấn đề của tôi, mặc dù tôi vẫn còn tò mò những gì trong cài đặt ActionMailer kiểm soát email được gửi, đăng nhập vào tập tin đăng nhập, hoặc cả hai.

Chỉnh sửa # 3: Sự cố với sanitize_email đun sôi xuống để tôi cần thêm môi trường dàn dựng mới vào ActionMailer::Base.local_environments. Tôi sẽ giữ câu hỏi này mở để xem liệu có ai có thể trả lời câu hỏi cuối cùng của tôi (điều gì xác định xem email của ActionMailer có được gửi đi, đăng nhập vào tệp nhật ký hay không?)

+1

Hộp dàn trang của bạn có máy chủ SMTP đang hoạt động không? – jdl

+0

Bạn đã đặt config.action_mailer.smtp_settings với localhost, cổng 25 và một số miền chưa? – marko

Trả lời

10

Về chỉnh sửa thứ ba của bạn, ghi nhật ký là một hàm trong đó cấp độ nhật ký bạn đã đặt cho chính ứng dụng, không phải bất kỳ cài đặt cụ thể nào trong ActionMailer.

Trong Rails 2.3, ActionMailer::Base chỉ cần gửi email đến bất kỳ trình ghi nhật ký nào đã được định cấu hình, nếu có. Người nhận được gửi đến nhật ký info và nội dung email được gửi đến nhật ký debug. (Cảm nhận là của tôi. Phần còn lại là thẳng ra của mã nguồn.)

def deliver!(mail = @mail) 
    raise "no mail object available for delivery!" unless mail 

    # 
    # Logging happens first (or not) 
    # 
    unless logger.nil? 
    logger.info "Sent mail to #{Array(recipients).join(', ')}" 
    logger.debug "\n#{mail.encoded}" 
    end 

    # 
    # And then we decide if an email should really get sent 
    # 
    begin 
    __send__("perform_delivery_#{delivery_method}", mail) if perform_deliveries 
    rescue Exception => e # Net::SMTP errors or sendmail pipe errors 
    raise e if raise_delivery_errors 
    end 

    return mail 
end 

bạn environment.rb hoặc staging.rb tập tin nên có một dòng điều khiển mức độ log. Một cái gì đó như sau:

config.log_level = :debug 

Điều này hoàn toàn tách biệt với cấu hình thư mà bạn đã tìm thấy, kiểm soát xem email có được gửi hay không.

config.action_mailer.perform_deliveries = true 
+0

Cảm ơn, câu trả lời tuyệt vời! Điều đó xóa nó lên. – jrdioko

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