It was yesterday and this morning, trying to understand what was happening. I have a simple Rails 5 application that successfully sends emails using sendgrid from a rails console for development, but trying to do the same thing in a rails deployable server console for a hask server does not send an email, but it generates the following error:
Errno::ECONNREFUSED: Connection refused - connect(2) for "localhost" port 25 from (irb):1
More details:
- ruby 2.3.3
- rails 5.1.3
- gem 'sendgrid-ruby', '~> 5.0'
config /environment.rb
# Load the Rails application. require_relative 'application'
configurations / environment / development.rb
The only email related code:
# Don't care if the mailer can't send. config.action_mailer.raise_delivery_errors = false config.action_mailer.perform_caching = false
configurations / environment / production.rb
The only email-related line is not commented out:
config.action_mailer.perform_caching = false
In development, an email is created on my local machine.
Rails Development Console:
>> ActionMailer::Base.delivery_method => :smtp >> InvoiceMailer.invoice_email(Customer.first).delivery_method Customer Load (0.6ms) SELECT "customers".* FROM "customers" ORDER BY "customers"."id" ASC LIMIT $1 [["LIMIT", 1]] Rendering invoice_mailer/invoice_email.html.erb within layouts/mailer Rendered invoice_mailer/invoice_email.html.erb within layouts/mailer (0.0ms) Rendering invoice_mailer/invoice_email.text.erb within layouts/mailer Rendered invoice_mailer/invoice_email.text.erb within layouts/mailer (0.0ms) InvoiceMailer
Heroku production does not ship and I get an error.
In the console of the heroine rails
$ heroku run rails c Loading production environment (Rails 5.1.3) irb(main):001:0> InvoiceMailer.invoice_email(Customer.first).deliver D, [2017-09-03T14:59:53.803069 #4] DEBUG -- :Customer Load (7.2ms) SELECT "customers".* FROM "customers" ORDER BY "customers"."id" ASC LIMIT $1 [["LIMIT", 1]] I, [2017-09-03T14:59:53.863967 #4] INFO -- :Rendering invoice_mailer/invoice_email.html.erb within layouts/mailer I, [2017-09-03T14:59:53.864680 #4] INFO -- :Rendered invoice_mailer/invoice_email.html.erb within layouts/mailer (0.6ms) I, [2017-09-03T14:59:53.865742 #4] INFO -- :Rendering invoice_mailer/invoice_email.text.erb within layouts/mailer I, [2017-09-03T14:59:53.866329 #4] INFO -- :Rendered invoice_mailer/invoice_email.text.erb within layouts/mailer (0.4ms) D, [2017-09-03T14:59:54.087932 #4] DEBUG -- : InvoiceMailer#invoice_email: processed outbound mail in 232.7ms I, [2017-09-03T14:59:54.101584 #4] INFO -- : Sent mail to XXX@gmail.com (13.4ms) D, [2017-09-03T14:59:54.102047 #4] DEBUG -- : Date: Sun, 03 Sep 2017 14:59:54 +0000 From: XXX@gmail.com To: XXX@gmail.com Message-ID: < 59ac18ea16bd6_451d0d888799@f74404ed-7ea9-41ff-9b05-715d2a185bf4. mail> Subject: XXXXX Website Monthly Invoice - August-2017 Mime-Version: 1.0 Content-Type: multipart/alternative; boundary="--==_mimepart_59ac18ea151a7_451d0d8886dd"; charset=UTF-8 Content-Transfer-Encoding: 7bit ----==_mimepart_59ac18ea151a7_451d0d8886dd Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Dear XXX Attached please find your monthly invoice. Best, XXX CrazyJ Media ;-) ----==_mimepart_59ac18ea151a7_451d0d8886dd Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: 7bit <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <style> </style> </head> <body> <!DOCTYPE html> <html> <head> <meta content='text/html; charset=UTF-8' http-equiv='Content-Type' /> </head> <body> <p>Dear XXX,</p> <p>Attached please find the latest monthly invoice.</p> <p>Best,<br>XXX<br>Crazy J Media</p> </body> </html> </body> </html> ----==_mimepart_59ac18ea151a7_451d0d8886dd-- Errno::ECONNREFUSED: Connection refused - connect(2) for "localhost" port 25 from (irb):1
Also in the Heroku Rails console:
irb(main):001:0> ActionMailer::Base.delivery_method => :smtp irb(main):002:0> InvoiceMailer.invoice_email(Customer.first).delivery_method D, [2017-09-13T22:42:58.951166 #4] DEBUG -- : Customer Load (2.8ms) SELECT "customers".* FROM "customers" ORDER BY "customers"."id" ASC LIMIT $1 [["LIMIT", 1]] I, [2017-09-13T22:42:59.037206 #4] INFO -- : Rendering invoice_mailer/invoice_email.html.erb within layouts/mailer I, [2017-09-13T22:42:59.038316 #4] INFO -- : Rendered invoice_mailer/invoice_email.html.erb within layouts/mailer (0.9ms) I, [2017-09-13T22:42:59.039720 #4] INFO -- : Rendering invoice_mailer/invoice_email.text.erb within layouts/mailer I, [2017-09-13T22:42:59.040359 #4] INFO -- : Rendered invoice_mailer/invoice_email.text.erb within layouts/mailer (0.5ms) D, [2017-09-13T22:42:59.413839 #4] DEBUG -- : InvoiceMailer#invoice_email: processed outbound mail in 405.7ms => #<Mail::SMTP:0x0000000575c678 @settings={:address=>"localhost", :port=>25, :domain=>"localhost.localdomain", :user_name=>nil, :password=>nil, :authentication=>nil, :enable_starttls_auto=>true, :openssl_verify_mode=>nil, :ssl=>nil, :tls=>nil}>
Does anyone have any ideas? I studied Heroku sendgrid ruby โโdocs , as well as several SO questions and answers like this one , but to no avail. I restarted the heroku server and my sendgrid account associated with this application is up and recording email sent from development.
A lot of positive karma, which is sent in advance to anyone who has any understanding!