|
View:
New views
1 Messages
—
Rating Filter:
Alert me
|
|
|
Errno::EBADF Send an Email in Rails using GMailHi, would someone please help me. I have been desperatley trying to fnd out for the last two days why the following code is not working. Any ideas. I'm running Instant Rails 1.4 / Rails version 1.2.5 / Ruby version 1.8.5 (i386-mswin32) / RubyGems version 1.1.1 / Action Mailer version 1.3.5 / Windows XP. Here is a description of my emailing application: in app/views/emailer/correspond.rhtml: <h2>Request A Call Back</h2> <p>Email a request to receive a Call Back from XYZ:</p> <% form_tag :action => 'sendmail' do -%> <p>First Name:<br /><%= text_field 'email', 'firstname', :size => 30 %></p> <p>Surname:<br /><%= text_field 'email', 'surname', :size => 30 %></p> <p>Email Address:<br /><%= text_field 'email', 'email_address', :size => 30 %></p> <p>Telephone Number:<br /><%= text_field 'email', 'telephone', :size => 30 %></p> <p>Message:<br /><%= text_area 'email', 'message_body', :rows => 20, :cols => 50 %></p> <%= submit_tag "Send", :class => "submit" %> or <%= link_to 'Cancel', '/' %> <% end -%> in app/controllers/emailer_controller.rb: class EmailerController < ApplicationController def sendmail email = params[:email] recipient = 'abc@...' subject = 'Request A Call Back' firstname = email["firstname"] surname = email["surname"] email_address = email["email_address"] telephone = email["telephone"] message_body = email["message_body"] Emailer.deliver_message(recipient, subject, firstname, surname, email_address, telephone, message_body) return if request.xhr? flash[:notice] = "Email Sent Successfully." redirect_to '/emailer/correspond' end end in app/models/emailer.rb: class Emailer < ActionMailer::Base def message(recipient, subject, firstname, surname, email_address, telephone, message_body) @subject = subject @recipients = recipient @from = 'no-reply@...' @body["firstname"] = firstname @body["surname"] = surname @body["email_address"] = email_address @body["telephone"] = telephone @body["message_body"] = message_body end end in app/views/emailer/message.rhtml: Hi XYZ! You are receiving an email message from: First Name: <%= @firstname %> Surname: <%= @surname %> Email address: <%= @email_address %> Telephone Number: <%= @telephone %> Message: <%= @message_body %> requesting a Call Back. in config/environment.rb: require 'smtp_tls' ActionMailer::Base.delivery_method = :smtp ActionMailer::Base.server_settings = { :address => "smtp.gmail.com", :port => 587, :domain => "def.com", :authentication => :plain, :user_name => "abc@...", :password => "abcdef" } 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 #@socket.debug_output = STDERR #@debug_output 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 #@socket.debug_output = STDERR #@debug_output 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, OpenSSL::SSL::SSLError end end end I get the following error message: Errno::EBADF in EmailerController#sendmail Bad file descriptor - connect(2) RAILS_ROOT: ./script/../config/.. Application Trace | Framework Trace | Full Trace C:/InstantRails/rails_apps/YOTO/vendor/plugins/action_mailer_tls/lib/ smtp_tls.rb:10:in `initialize' C:/InstantRails/rails_apps/YOTO/vendor/plugins/action_mailer_tls/lib/ smtp_tls.rb:10:in `open' C:/InstantRails/rails_apps/YOTO/vendor/plugins/action_mailer_tls/lib/ smtp_tls.rb:10:in `do_start' C:/InstantRails/ruby/lib/ruby/1.8/timeout.rb:56:in `timeout' C:/InstantRails/ruby/lib/ruby/1.8/timeout.rb:76:in `timeout' C:/InstantRails/rails_apps/YOTO/vendor/plugins/action_mailer_tls/lib/ smtp_tls.rb:10:in `do_start' C:/InstantRails/ruby/lib/ruby/1.8/net/smtp.rb:378:in `start' C:/InstantRails/ruby/lib/ruby/1.8/net/smtp.rb:316:in `start' C:/InstantRails/rails_apps/YOTO/vendor/rails/actionmailer/lib/ action_mailer/base.rb:565:in `perform_delivery_smtp' C:/InstantRails/rails_apps/YOTO/vendor/rails/actionmailer/lib/ action_mailer/base.rb:451:in `send' C:/InstantRails/rails_apps/YOTO/vendor/rails/actionmailer/lib/ action_mailer/base.rb:451:in `deliver!' C:/InstantRails/rails_apps/YOTO/vendor/rails/actionmailer/lib/ action_mailer/base.rb:333:in `method_missing' C:/InstantRails/rails_apps/YOTO/app/controllers/emailer_controller.rb: 12:in `sendmail' What on earth is happening? I have a working version of this code running on Mac OS X with Rails 2.0.2 (with the obvious changes: rhtml --> html.erb and server_settings --> smtp_settings). Thanks in advance. Regards Walter --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk@... To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe@... For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~--- |
| Free Forum Powered by Nabble | Forum Help |