# Re: Action\_mailer\_tls + Gmail

**URL:** <https://www.ruby-forum.com/t/re-action-mailer-tls-gmail/135744>\
**Category:** Rails\
**Created:** [April 24, 2008, 4:04pm UTC](https://www.ruby-forum.com/t/re-action-mailer-tls-gmail/135744 "2008-04-24T16:04:24Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![mslagell](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/e274bd/32.png) [@mslagell](https://www.ruby-forum.com/u/mslagell)\
**Post date:** [April 24, 2008, 4:04pm UTC](https://www.ruby-forum.com/t/re-action-mailer-tls-gmail/135744/1 "2008-04-24T16:04:24Z")

</div>

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

----- Original Message ----  
From: PJAY79 [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
To: Ruby on Rails: Talk [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
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/](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: removed\_email\_address@domain.invalid  
To: removed\_email\_address@domain.invalid  
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:in `do\_start’  
/opt/local/lib/ruby/1.8/timeout.rb:56:in `timeout' /opt/local/lib/ruby/1.8/timeout.rb:76:in `timeout’  
/vendor/plugins/action\_mailer\_tls/lib/smtp\_tls.rb:10:in `do_start' /opt/local/lib/ruby/1.8/net/smtp.rb:378:in `start’  
/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:in `perform\_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:in `deliver!’  
/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:in `after\_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:in `update’  
/opt/local/lib/ruby/1.8/observer.rb:185:in `notify_observers' /opt/local/lib/ruby/1.8/observer.rb:184:in `each’  
/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:in `notify’  
/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:in `create\_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:in `save\_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:in `transaction’  
/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:in `transaction’  
/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:in `rollback\_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:in `save’  
/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:in `send’  
/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:in `call\_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:in `perform\_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:in `perform\_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:in `perform\_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:in `cache’  
/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:in `send’  
/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:in `process\_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:in `process’  
/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:in `dispatch’  
/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:in `dispatch’  
/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:in `synchronize’  
/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:in `process\_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:in `process\_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:in `initialize’  
/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:in `run’  
/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:in `new’  
/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:in `run’  
/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:in `run’  
/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:in `run’  
/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:in `load’  
/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:in `load’  
/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:in `require’  
/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:in `new\_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:in `gem\_original\_require’  
/opt/local/lib/ruby/site\_ruby/1.8/rubygems/custom\_require.rb:27:in  
`require' ./script/server:3 -e:2:in `load’  
-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.

---

<div class="post-metadata">

**Author:** ![mslagell](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/e274bd/32.png) [@mslagell](https://www.ruby-forum.com/u/mslagell)\
**Post date:** [April 25, 2008, 7:11am UTC](https://www.ruby-forum.com/t/re-action-mailer-tls-gmail/135744/2 "2008-04-25T07:11:10Z")

</div>

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”?

☹

PJ.

---

<div class="post-metadata">

**Author:** ![mslagell](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/e274bd/32.png) [@mslagell](https://www.ruby-forum.com/u/mslagell)\
**Post date:** [April 27, 2008, 2:03am UTC](https://www.ruby-forum.com/t/re-action-mailer-tls-gmail/135744/3 "2008-04-27T02:03:06Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![mslagell](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/e274bd/32.png) [@mslagell](https://www.ruby-forum.com/u/mslagell)\
**Post date:** [April 28, 2008, 4:37am UTC](https://www.ruby-forum.com/t/re-action-mailer-tls-gmail/135744/4 "2008-04-28T04:37:56Z")

</div>

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](http://smtp.gmail.com)”,  
:port =\> 587,  
:authentication =\> :plain,  
:user\_name =\> ‘removed\_email\_address@domain.invalid’,  
: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
