Re: Action_mailer_tls + Gmail

Check out
http://wanlord.com/articles/2007/11/29/sending-email-using-actionmailer-and-gmail

----- Original Message ----
From: PJAY79 [email protected]
To: Ruby on Rails: Talk [email protected]
Sent: Wednesday, April 23, 2008 10:31:24 PM
Subject: [Rails] Action_mailer_tls + Gmail

Hi, i am really struggling with getting gmail working in my rails
app.

I have installed this plugin:

https://openrain.com/opensource/public/rails/plugins/action_mailer_tls/

I am implementing the ‘forgot password’ feature in
restful_authentication.

Anyway, in my development log it appears that the email is sent, as i
see the following:

Sent mail:
Date: Thu, 24 Apr 2008 12:20:01 +1000
From: [email protected]
To: [email protected]
Subject: Mydomain - You have requested to change your password
Mime-Version: 1.0
Content-Type: text/plain; charset=utf-8

However , i subsequently get this “timeout” error:

Timeout::Error (execution expired):
/opt/local/lib/ruby/1.8/timeout.rb:54:in open' /vendor/plugins/action_mailer_tls/lib/smtp_tls.rb:10:indo_start’
/opt/local/lib/ruby/1.8/timeout.rb:56:in timeout' /opt/local/lib/ruby/1.8/timeout.rb:76:intimeout’
/vendor/plugins/action_mailer_tls/lib/smtp_tls.rb:10:in do_start' /opt/local/lib/ruby/1.8/net/smtp.rb:378:instart’
/opt/local/lib/ruby/1.8/net/smtp.rb:316:in start' /opt/local/lib/ruby/gems/1.8/gems/actionmailer-2.0.2/lib/ action_mailer/base.rb:586:inperform_delivery_smtp’
/opt/local/lib/ruby/gems/1.8/gems/actionmailer-2.0.2/lib/
action_mailer/base.rb:469:in __send__' /opt/local/lib/ruby/gems/1.8/gems/actionmailer-2.0.2/lib/ action_mailer/base.rb:469:indeliver!’
/opt/local/lib/ruby/gems/1.8/gems/actionmailer-2.0.2/lib/
action_mailer/base.rb:352:in method_missing' /app/models/user_observer.rb:8:inafter_save’
/opt/local/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/
active_record/observer.rb:157:in send' /opt/local/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/ active_record/observer.rb:157:inupdate’
/opt/local/lib/ruby/1.8/observer.rb:185:in notify_observers' /opt/local/lib/ruby/1.8/observer.rb:184:ineach’
/opt/local/lib/ruby/1.8/observer.rb:184:in notify_observers' /opt/local/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/ active_record/callbacks.rb:338:innotify’
/opt/local/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/
active_record/callbacks.rb:302:in callback' /opt/local/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/ active_record/callbacks.rb:214:increate_or_update’
/opt/local/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/
active_record/base.rb:1972:in save_without_validation' /opt/local/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/ active_record/validations.rb:934:insave_without_transactions’
/opt/local/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/
active_record/transactions.rb:108:in save_without_captcha' /opt/local/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/ active_record/connection_adapters/abstract/database_statements.rb: 66:intransaction’
/opt/local/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/
active_record/transactions.rb:80:in transaction' /opt/local/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/ active_record/transactions.rb:100:intransaction’
/opt/local/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/
active_record/transactions.rb:108:in save_without_captcha' /opt/local/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/ active_record/transactions.rb:120:inrollback_active_record_state!’
/opt/local/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/
active_record/transactions.rb:108:in save_without_captcha' /vendor/plugins/simple_captcha/lib/simple_captcha_active_record.rb: 84:insave’
/app/controllers/passwords_controller.rb:15:in create' /opt/local/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/ action_controller/base.rb:1158:insend’
/opt/local/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/
action_controller/base.rb:1158:in perform_action_without_filters' /opt/local/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/ action_controller/filters.rb:697:incall_filters’
/opt/local/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/
action_controller/filters.rb:689:in perform_action_without_benchmark' /opt/local/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/ action_controller/benchmarking.rb:68:inperform_action_without_rescue’
/opt/local/lib/ruby/1.8/benchmark.rb:293:in measure' /opt/local/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/ action_controller/benchmarking.rb:68:inperform_action_without_rescue’
/opt/local/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/
action_controller/rescue.rb:199:in perform_action_without_caching' /opt/local/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/ action_controller/caching.rb:678:inperform_action’
/opt/local/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/
active_record/connection_adapters/abstract/query_cache.rb:33:in
cache' /opt/local/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/ active_record/query_cache.rb:8:incache’
/opt/local/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/
action_controller/caching.rb:677:in perform_action' /opt/local/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/ action_controller/base.rb:524:insend’
/opt/local/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/
action_controller/base.rb:524:in process_without_filters' /opt/local/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/ action_controller/filters.rb:685:inprocess_without_session_management_support’
/opt/local/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/
action_controller/session_management.rb:123:in process' /opt/local/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/ action_controller/base.rb:388:inprocess’
/opt/local/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/
action_controller/dispatcher.rb:171:in handle_request' /opt/local/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/ action_controller/dispatcher.rb:115:indispatch’
/opt/local/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/
action_controller/dispatcher.rb:126:in dispatch_cgi' /opt/local/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/ action_controller/dispatcher.rb:9:indispatch’
/opt/local/lib/ruby/gems/1.8/gems/mongrel-1.1.4/bin/…/lib/mongrel/
rails.rb:76:in process' /opt/local/lib/ruby/gems/1.8/gems/mongrel-1.1.4/bin/../lib/mongrel/ rails.rb:74:insynchronize’
/opt/local/lib/ruby/gems/1.8/gems/mongrel-1.1.4/bin/…/lib/mongrel/
rails.rb:74:in process' /opt/local/lib/ruby/gems/1.8/gems/mongrel-1.1.4/lib/mongrel.rb: 159:inprocess_client’
/opt/local/lib/ruby/gems/1.8/gems/mongrel-1.1.4/lib/mongrel.rb:
158:in each' /opt/local/lib/ruby/gems/1.8/gems/mongrel-1.1.4/lib/mongrel.rb: 158:inprocess_client’
/opt/local/lib/ruby/gems/1.8/gems/mongrel-1.1.4/lib/mongrel.rb:
285:in run' /opt/local/lib/ruby/gems/1.8/gems/mongrel-1.1.4/lib/mongrel.rb: 285:ininitialize’
/opt/local/lib/ruby/gems/1.8/gems/mongrel-1.1.4/lib/mongrel.rb:
285:in new' /opt/local/lib/ruby/gems/1.8/gems/mongrel-1.1.4/lib/mongrel.rb: 285:inrun’
/opt/local/lib/ruby/gems/1.8/gems/mongrel-1.1.4/lib/mongrel.rb:
268:in initialize' /opt/local/lib/ruby/gems/1.8/gems/mongrel-1.1.4/lib/mongrel.rb: 268:innew’
/opt/local/lib/ruby/gems/1.8/gems/mongrel-1.1.4/lib/mongrel.rb:
268:in run' /opt/local/lib/ruby/gems/1.8/gems/mongrel-1.1.4/lib/mongrel/ configurator.rb:282:inrun’
/opt/local/lib/ruby/gems/1.8/gems/mongrel-1.1.4/lib/mongrel/
configurator.rb:281:in each' /opt/local/lib/ruby/gems/1.8/gems/mongrel-1.1.4/lib/mongrel/ configurator.rb:281:inrun’
/opt/local/lib/ruby/gems/1.8/gems/mongrel-1.1.4/bin/mongrel_rails:
128:in run' /opt/local/lib/ruby/gems/1.8/gems/mongrel-1.1.4/lib/mongrel/ command.rb:212:inrun’
/opt/local/lib/ruby/gems/1.8/gems/mongrel-1.1.4/bin/mongrel_rails:
281
/opt/local/lib/ruby/gems/1.8/gems/activesupport-2.0.2/lib/
active_support/dependencies.rb:489:in load' /opt/local/lib/ruby/gems/1.8/gems/activesupport-2.0.2/lib/ active_support/dependencies.rb:489:inload’
/opt/local/lib/ruby/gems/1.8/gems/activesupport-2.0.2/lib/
active_support/dependencies.rb:342:in new_constants_in' /opt/local/lib/ruby/gems/1.8/gems/activesupport-2.0.2/lib/ active_support/dependencies.rb:489:inload’
/opt/local/lib/ruby/gems/1.8/gems/rails-2.0.2/lib/commands/servers/
mongrel.rb:64
/opt/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in
gem_original_require' /opt/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:inrequire’
/opt/local/lib/ruby/gems/1.8/gems/activesupport-2.0.2/lib/
active_support/dependencies.rb:496:in require' /opt/local/lib/ruby/gems/1.8/gems/activesupport-2.0.2/lib/ active_support/dependencies.rb:342:innew_constants_in’
/opt/local/lib/ruby/gems/1.8/gems/activesupport-2.0.2/lib/
active_support/dependencies.rb:496:in require' /opt/local/lib/ruby/gems/1.8/gems/rails-2.0.2/lib/commands/ server.rb:39 /opt/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:ingem_original_require’
/opt/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in
require' ./script/server:3 -e:2:inload’
-e:2

Does anyone know what could be happening?? The email does not actually
get sent when i check my hotmail account…

Many thanks,

PJ.

Hi,

I installed the tlsmail gem as mentioned in the above blog post.

Exact same thing is happening - “Timeout::Error (execution
expired)”…

Is this possibly because the connection to the Gmail smtp is too slow?

Is there a way to increase the amount of time that is allowed before
things “expire”?

:frowning:

PJ.

Anyone else know what is happening??

The odd thing is that in the last 72 hours, after trying about 100
times, on about 3 or 4 occasions the emails have been delivered, but i
am unable to get this to happen consistently.

I have tried using my ISP’s smtp mail server as well with no luck
either…

Aarrrgh!!!

PJ.

First, I’m sorry if I’m repeating much, but I’ll give you everything
I’ve got. I’m not sure what’s happening on your end, but here’s what
I have. The following is in lib/smtp_tls.rb:

require “openssl”
require “net/smtp”

Net::SMTP.class_eval do
private
def do_start(helodomain, user, secret, authtype)
raise IOError, ‘SMTP session already started’ if @started
check_auth_args user, secret, authtype if user or secret

sock = timeout(@open_timeout) { TCPSocket.open(@address, @port) }
@socket = Net::InternetMessageIO.new(sock)
@socket.read_timeout = 60 #@read_timeout

check_response(critical { recv_response() })
do_helo(helodomain)

if starttls
  raise 'openssl library not installed' unless defined?(OpenSSL)
  ssl = OpenSSL::SSL::SSLSocket.new(sock)
  ssl.sync_close = true
  ssl.connect
  @socket = Net::InternetMessageIO.new(ssl)
  @socket.read_timeout = 60 #@read_timeout
  do_helo(helodomain)
end

authenticate user, secret, authtype if user
@started = true

ensure
unless @started
# authentication failed, cancel connection.
@socket.close if not @started and @socket and not
@socket.closed?
@socket = nil
end
end

def do_helo(helodomain)
begin
if @esmtp
ehlo helodomain
else
helo helodomain
end
rescue Net::ProtocolError
if @esmtp
@esmtp = false
@error_occured = false
retry
end
raise
end
end

def starttls
getok(‘STARTTLS’) rescue return false
return true
end

def quit
begin
getok(‘QUIT’)
rescue EOFError
end
end
end

Toward the top of my config/environment.rb file, I have:

require ‘smtp_tls’

In the Rails::Initializer.run do |config| block, I have:

config.action_mailer.delivery_method = :smtp
config.action_mailer.perform_deliveries = true
config.action_mailer.raise_delivery_errors = true
config.action_mailer.default_charset = ‘utf-8’

At the bottom of that same file, I have:

ActionMailer::Base.smtp_settings = {
:address => “smtp.gmail.com”,
:port => 587,
:authentication => :plain,
:user_name => ‘[email protected]’,
:password => ‘pass’
}

I think that’s everything in my app dealing with email settings. Have
you been able to get it working with sendmail first? Maybe there’s
something elsewhere in your app? I haven’t used mailer.yml - perhaps
the “old-fashioned” way would work for you?

-Kyle

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs