2013-08-24 23 views
22

Tôi có một đường ray 4 ứng dụng với cấu hình bưu phẩm sau:ArgumentError: Một SMTP Để giải quyết được yêu cầu để gửi tin nhắn. Đặt smtp_envelope_to tin nhắn, để, cc, hoặc bcc quyết

config.action_mailer.delivery_method = :smtp 
    config.action_mailer.default_url_options = { host: 'myhost.com' } 
    config.action_mailer.perform_deliveries = true 

    config.action_mailer.smtp_settings = { 
    :enable_starttls_auto => true, 
    :address   => 'smtp.myhost.com', 
    :port    => 587, 
    :domain    => 'myhost.com', 
    :authentication  => :login, 
    :enable_starttls_auto => false, 
    :tls     => false, 
    :openssl_verify_mode => 'none', 
    :ssl => false, 
    :user_name   => "myusername", 
    :password   => "mypassword" 
    } 

Mỗi lần tôi cố gắng để gửi một email với một thiết lập thử nghiệm bưu phẩm:

class TestMailer < ActionMailer::Base 

    default :from => "[email protected]" 

    def welcome_email 
    mail(:to => "[email protected]", :subject => "Test mail", :body => "Test mail body") 
    end 
end 

TestMailer.welcome_email.deliver 

tôi có ngoại lệ này:

ArgumentError: An SMTP To address is required to send a message. Set the message smtp_envelope_to, to , cc, or bcc address.

có thể rằng tôi quên cái gì đó để thiết lập.? Và tôi không thể tìm thấy một tùy chọn cấu hình cho "smtp_envelope_to"

Trả lời

26

Các thông báo lỗi không phải là về phong bì SMTP, nhưng về người gửi:

An SMTP To address is required to send a message

phần còn lại chỉ là một thông báo chung. Nội dung nào đó trong số [email protected] của bạn không hoạt động. Bạn có sử dụng địa chỉ thực sự, đang hoạt động không? Nếu không, hãy thử với một.

+3

Thx thất bại của tôi là một trọng tâm của một địa chỉ smtp mà đặt nó thành nil Oo – bulleric

2

:to => '[email protected]' cách thức hoạt động trong môi trường không thành công của bạn? Nếu đó không phải là địa chỉ email được mã hóa cứng, hãy đảm bảo rằng biến chứa địa chỉ không được để trống.

Bạn không phải đặt Mail::Message#smtp_envelope_to một cách rõ ràng. Nó có thể đoán nó từ người nhận của nó, tức là. Mail::Message#destinations (đến + cc + bcc), nhưng dường như không có.

+0

Đề xuất đơn giản và chính xác những gì đã khắc phục được sự cố của tôi. Giá trị APP_CONFIG của tôi được truyền trong giá trị mặc định SMTP của tôi từ: 'đang trả về' nil'. – skplunkerin

4

Nếu bạn sử dụng sidekiq + actionmailer. Hãy cẩn thận, trong khi gửi email bằng cách sử dụng băm. Tôi đã làm một cái gì đó như thế này MyWorker.perform_async ("var1", {email: '[email protected]', var2: 'test1234'})

Tôi đập đầu trong vài giờ, tại sao nó đang ném lỗi trên. Bởi vì trong hash perform_menthod [: email] là không. Bạn cần sử dụng hàm băm ["email"] để nhận email. Tôi không biết, lý do. Nhưng nó đã giúp tôi thoát khỏi lỗi này.

+4

Có thể xin lỗi vì offtopic, nhưng lý do tại sao bạn phải sử dụng băm ['email'] là nhờ quá trình serialization vào redis. Sidekiq tạo tài liệu JSON, nó tự động chuyển đổi tất cả các khóa thành chuỗi. –