[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Re: Using actionmailer to send an email

Deepak Vohra

6/21/2008 1:42:00 AM

Seems like the actionmailer has a bug. I tested the actionmailer and the em=
ail does not get sent.
=A0
thanks,
Deepak

--- On Fri, 6/20/08, APNelson.L <APNelson.L@gmail.com> wrote:

From: APNelson.L <APNelson.L@gmail.com>
Subject: Using actionmailer to send an email
To: "ruby-talk ML" <ruby-talk@ruby-lang.org>
Date: Friday, June 20, 2008, 6:13 PM

Hi, I was just wondering how i would write a ruby script to send an
email using the gmail smtp. Here is what I have so far:

require 'rubygems'
require 'action_mailer'

class SimpleMailer < ActionMailer::Base
=09def simple_message(recipient)
=09=09from 'my_email@gmail.com'
=09=09recipients recipient
=09=09subject 'yay I just sent this'
=09=09body 'hope this works'
=09end
end

ActionMailer::Base.smtp_settings =3D { :address =3D>
'smtp.gmail.com', :port =3D> '25', :user_name =3D>
'my_email@gmail.com', :password =3D> 'my_password',
:authentication =3D>
'login' }

SimpleMailer.deliver_simple_message('other_email@gmail.com')


Unfortunately, when run I get these error messages:

ruby mail.rb
/usr/local/lib/ruby/1.8/net/smtp.rb:680:in `check_response': 530 5.7.0
Must issue a STARTTLS command first. z80sm1963933pyg.31
(Net::SMTPUnknownError)
from /usr/local/lib/ruby/1.8/net/smtp.rb:582:in `auth_login'
from /usr/local/lib/ruby/1.8/net/smtp.rb:686:in `critical'
from /usr/local/lib/ruby/1.8/net/smtp.rb:581:in `auth_login'
from /usr/local/lib/ruby/1.8/net/smtp.rb:571:in `__send__'
from /usr/local/lib/ruby/1.8/net/smtp.rb:571:in `authenticate'
from /usr/local/lib/ruby/1.8/net/smtp.rb:411:in `do_start'
from /usr/local/lib/ruby/1.8/net/smtp.rb:378:in `start'
from /usr/local/lib/ruby/1.8/net/smtp.rb:316:in `start'
from /usr/local/lib/ruby/gems/1.8/gems/actionmailer-2.1.0/lib/
action_mailer/base.rb:627:in `perform_delivery_smtp'
from /usr/local/lib/ruby/gems/1.8/gems/actionmailer-2.1.0/lib/
action_mailer/base.rb:508:in `__send__'
from /usr/local/lib/ruby/gems/1.8/gems/actionmailer-2.1.0/lib/
action_mailer/base.rb:508:in `deliver!'
from /usr/local/lib/ruby/gems/1.8/gems/actionmailer-2.1.0/lib/
action_mailer/base.rb:383:in `method_missing'
from mail.rb:15
5 Answers

APNelson.L

6/21/2008 2:01:00 AM

0

so how would I go about writing a scrip to send an email then?

Phlip

6/21/2008 2:04:00 AM

0

Deepak Vohra wrote:

> ActionMailer::Base.smtp_settings = { :address =>
> 'smtp.gmail.com', :port => '25', :user_name =>
> 'my_email@gmail.com', :password => 'my_password',
> :authentication =>
> 'login' }

GMail uses a different port so they can secure the channel. Not 25. Look up
the protocol, and ask a Rails forum how to set the encryption correctly.

--
Phlip
http://assert2.rubyforge.org/assert_yin...

Phlip

6/21/2008 12:46:00 PM

0

APNelson.L wrote:

> so how would I go about writing a scrip to send an email then?

You might have some small hope of installing a lite POP3 server on your own
workstation. Then you can test ActionRecord by sending it mail.

I tried that once, and I could not find a POP3 server that was _lite_, like
a student's sketch of one. They were all real servers, top-heavy and
configuration-hostile.

Then turn on TLS security, to emulate how GMail does it...

--
Phlip
http://assert2.rubyforge.org/assert_yin...

Junkone

6/22/2008 9:48:00 AM

0

On Jun 21, 8:45 am, Phlip <phlip2...@gmail.com> wrote:
> APNelson.L wrote:
> > so how would I go about writing a scrip to send an email then?
>
> You might have some small hope of installing a lite POP3 server on your own
> workstation. Then you can test ActionRecord by sending it mail.
>
> I tried that once, and I could not find a POP3 server that was _lite_, like
> a student's sketch of one. They were all real servers, top-heavy and
> configuration-hostile.
>
> Then turn on TLS security, to emulate how GMail does it...
>
> --
>   Phlip
>  http://assert2.rubyforge.org/assert_yin...

Junkone

6/22/2008 9:49:00 AM

0

On Jun 22, 5:47 am, Junkone <junko...@gmail.com> wrote:
> On Jun 21, 8:45 am, Phlip <phlip2...@gmail.com> wrote:
>
>
>
> > APNelson.L wrote:
> > > so how would I go about writing a scrip to send an email then?
>
> > You might have some small hope of installing a lite POP3 server on your own
> > workstation. Then you can test ActionRecord by sending it mail.
>
> > I tried that once, and I could not find a POP3 server that was _lite_, like
> > a student's sketch of one. They were all real servers, top-heavy and
> > configuration-hostile.
>
> > Then turn on TLS security, to emulate how GMail does it...
>
> > --
> >   Phlip
> >  http://assert2.rubyforge.org/assert_yin_... Hide quoted text -
>
> - Show quoted text -

you have to add this piece of code for gmail smtp to work thro action
mailer
INSTALL THE FOLLOWING AS smtp_tls UNDER C:\ruby\lib\ruby\gems\1.8\gems
\actionmailer-2.0.2\lib
############## START OF CODE ##################################
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
@socket.debug_output = STDERR #@debug_output

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

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

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')
end

def quit
begin
getok('QUIT')
rescue EOFError
end
end
end

##########END OF CODE #############################################