Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Rails 3 mailer not working and not logging any errors

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 [email protected]

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 => "[email protected]",
  :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 => '[email protected]', :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: [email protected]>, <Subject: testing rails>, <Mime-Version: 1.0>, <Content-Type: text/html>>
like image 772
HappyDeveloper Avatar asked Mar 01 '12 18:03

HappyDeveloper


2 Answers

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!

like image 57
Ardee Aram Avatar answered Oct 13 '22 00:10

Ardee Aram


  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)

like image 40
Frederick Cheung Avatar answered Oct 12 '22 23:10

Frederick Cheung