Rails 3 mailer not working and not logging any errors

笑着哭i 提交于 2019-12-09 15:16:10

问题


I have tried all kinds of configurations but still I can't send an email in my development environment from rails.

I installed mailutils to try this from the command line and it worked, I received the email (in spam of course): echo test | mail -s Subject user@example.com

Here's my config:

# 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 => "some_user@gmail.com",
  :password => "abc123",
}

And here's the code in the mailer:

class UserMailer < ActionMailer::Base
  default :from => "root@ubuntu"

  def test_email
    Rails.logger.debug 'test_email'
    mail(:to => 'user@example.com', :subject => "testing rails")
  end
end

The controller:

class PagesController < ApplicationController
  def home
    UserMailer.test_email
  end
end

development.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)

I also tried using the console:

root@ubuntu:/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: user@example.com>, <Subject: testing rails>, <Mime-Version: 1.0>, <Content-Type: text/html>>

回答1:


  UserMailer.test_email

Just creates a Mail::Message object. To actually send an email you need to do

  UserMailer.test_email.deliver

(or starting with rails 4.2 deliver_now / deliver_later)




回答2:


Regarding logging errors:

Just figured out by tinkering that a bang method counterpart exists for deliver, which throws an exception. Can be pretty useful to check if you just misspelled your username or password, or you just have some misconfigured settings.

UserMailer.test_email.deliver!




回答3:


An updated answer for Rails 4.2 would be:

UserMailer.test_email.deliver_now!

The exclamatory mark is to raise an exception if there are any errors.




回答4:


If you suspect it's your settings, try taking out the :domain. It worked for me a while ago.( Net::SMTPAuthenticationError in rails 3.1.0.rc5 when connecting to gmail )

But I don't see a :body option in the mail function. Perhaps that's the issue. Try sending it from rails console and see what happens. http://api.rubyonrails.org/classes/ActionMailer/Base.html#method-i-mail



来源:https://stackoverflow.com/questions/9522205/rails-3-mailer-not-working-and-not-logging-any-errors

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!