2012-03-01 22 views
10

Tôi đã thử tất cả các loại cấu hình nhưng tôi vẫn không thể gửi email trong môi trường phát triển của mình từ đường ray.Rails 3 mailer không hoạt động và không ghi lại bất kỳ lỗi nào

Tôi đã cài đặt thư để thử điều này từ dòng lệnh và nó hoạt động, tôi nhận được email (trong thư rác tất nhiên): echo test | Thư -s Chủ đề [email protected]

Dưới đây là cấu hình của tôi:

# Don't care if the mailer can't send 
config.action_mailer.raise_delivery_errors = true # still no logs about emails 

config.action_mailer.delivery_method = :smtp 
config.action_mailer.perform_deliveries = true # I can't believe I have to add this option. Does it even exist? I found it on google. 
config.action_mailer.smtp_settings = { 
    :enable_starttls_auto => true, 
    :address => "smtp.gmail.com", 
    :port => 587, 
    :domain => "gmail.com", 
    :authentication => :login, 
    :user_name => "[email protected]", 
    :password => "abc123", 
} 

Và đây là mã trong bưu phẩm:

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

    def test_email 
    Rails.logger.debug 'test_email' 
    mail(:to => '[email protected]', :subject => "testing rails") 
    end 
end 

Bộ điều khiển:

class PagesController < ApplicationController 
    def home 
    UserMailer.test_email 
    end 
end 

phát triển .log:

[2012-03-01 18:26:45.859] DEBUG [bb44dee806d73eb60ab3ae16297f5c02] [127.0.0.1] [GET] [http://myapp:3000/] test_email 
[2012-03-01 18:26:45.888] INFO [bb44dee806d73eb60ab3ae16297f5c02] [127.0.0.1] [GET] [http://myapp:3000/] Rendered user_mailer/test_email (1.6ms) 
[2012-03-01 18:26:45.898] INFO [bb44dee806d73eb60ab3ae16297f5c02] [127.0.0.1] [GET] [http://myapp:3000/] Rendered pages/home.html.erb within layouts/application (1.1ms) 
[2012-03-01 18:26:46.815] INFO [bb44dee806d73eb60ab3ae16297f5c02] [127.0.0.1] [GET] [http://myapp:3000/] Completed 200 OK in 455ms (Views: 112.4ms) 

Tôi cũng đã cố gắng sử dụng giao diện điều khiển:

[email protected]:/srv/www/myapp# rails c 
Loading development environment (Rails 3.2.1) 
irb(main):001:0> UserMailer.test_email 
=> #<Mail::Message:32110400, Multipart: false, Headers: <To: [email protected]>, <Subject: testing rails>, <Mime-Version: 1.0>, <Content-Type: text/html>> 
+0

http://guides.rubyonrails.org/action_mailer_basics.html có ví dụ về cấu hình Gmail. Nó sử dụng 'plain' cho thuộc tính xác thực, bạn đã thử nó chưa? – ismriv

+0

vâng tôi đã thử nó và không có gì xảy ra. Nếu không có bất kỳ nhật ký nào, điều này sẽ không hoạt động. Mọi thứ khác trong yêu cầu được ghi chính xác – HappyDeveloper

+0

Mã nào gọi trình gửi như thế nào? –

Trả lời

27
UserMailer.test_email 

Chỉ cần tạo đối tượng Mail::Message. Để thực sự gửi một email mà bạn cần phải làm

UserMailer.test_email.deliver 

(hoặc bắt đầu với đường ray 4,2 deliver_now/deliver_later)

+14

Ok điều này thật đáng xấu hổ .. Cảm ơn – HappyDeveloper

+0

Ow My God! Tôi đã dành 3 giờ, hoàn toàn quên về phương pháp này! Cảm ơn – 0bserver07

+1

Lưu ý đối với đường ray 5: DEPRECATION CẢNH BÁO: '# deliver' không được chấp nhận và sẽ bị xóa trong Rails 5.Sử dụng '# deliver_now' – jtlindsey

0

Nếu bạn nghi ngờ đó là thiết lập của bạn, hãy thử đưa ra khỏi: miền. Nó làm việc cho tôi một thời gian trước đây. (Net::SMTPAuthenticationError in rails 3.1.0.rc5 when connecting to gmail)

Nhưng tôi không thấy tùy chọn: body trong hàm mail. Có lẽ đó là vấn đề. Hãy thử gửi nó từ bảng điều khiển đường ray và xem điều gì xảy ra. http://api.rubyonrails.org/classes/ActionMailer/Base.html#method-i-mail

+0

Không hoạt động, tôi đã cập nhật bài đăng của mình để hiển thị kết quả – HappyDeveloper

9

Về lỗi đăng nhập:

Chỉ cần tìm ra bằng cách mày mò rằng một phương pháp nổ đối tồn tại cho cung cấp, mà ném một ngoại lệ. Có thể khá hữu ích để kiểm tra xem bạn đã viết sai chính tả tên người dùng hay mật khẩu của mình hay bạn chỉ có một số cài đặt được định cấu hình sai.

UserMailer.test_email.deliver!

1

Một câu trả lời được cập nhật cho Rails 4.2 sẽ là:

UserMailer.test_email.deliver_now! 

Dấu thán là nâng cao một ngoại lệ nếu có bất kỳ sai sót.

+0

Dấu chấm than cũng cho biết thêm mức độ khẩn cấp ngụ ý :) –

+0

' deliver_now! 'Cung cấp email _without_ kiểm tra perform_deliveries và raise_delivery_errors, vì vậy hãy thận trọng khi sử dụng. http://api.rubyonrails.org/v4.2/classes/ActionMailer/MessageDelivery.html#method-i-deliver_now-21 –

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